Files
apache--hertzbeat/mcp-servers/mcp-log-server/README.md
T
wehub-resource-sync c8cebdfeee
MCP Bash Server CI / Test MCP Bash Server (dev) (push) Has been cancelled
MCP Bash Server CI / Test MCP Bash Server (release) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:11:39 +08:00

75 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HertzBeat 日志 MCP
该 MCP 服务基于 GreptimeDB 查询 HertzBeat 自身运行日志。使用前需要启用 GreptimeDB 日志写入。
## 结构化只读查询
服务只暴露 `query_logs`,不再接收或执行调用方提供的 SQL。服务端生成的查询固定为:
```sql
SELECT timestamp, severity_text, body
FROM hzb_logs
WHERE <结构化过滤条件>
ORDER BY timestamp DESC
LIMIT <1-100>
```
`query_logs` 支持以下可选参数:
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `severity` | 字符串 | `TRACE``DEBUG``INFO``WARN``ERROR``FATAL` |
| `keyword` | 字符串 | 日志正文关键词,最长 256 个字符 |
| `startTime` | 整数 | 开始时间,Unix 毫秒时间戳 |
| `endTime` | 整数 | 结束时间,Unix 毫秒时间戳 |
| `limit` | 整数 | 返回条数,默认为 20,范围为 1~100 |
调用示例:
```json
{
"severity": "ERROR",
"keyword": "connection refused",
"startTime": 1783785600000,
"endTime": 1783872000000,
"limit": 20
}
```
当前 `hzb_logs` 表没有 `monitorId` 字段,因此本接口不提供无效的监控 ID 过滤。如果后续需要该能力,应先在 OpenTelemetry 日志写入链中定义并提取统一的监控 ID 字段。
## GreptimeDB 账号
服务支持通过 `greptime.username``greptime.password` 发送 HTTP Basic Authentication。用户名和密码必须同时配置;建议配合 HTTPS 或可信内网使用。
项目当前 Docker Compose 使用 GreptimeDB `v0.14.3`,该版本只提供身份认证,不能限制用户为只读权限。因此当前真正生效的安全边界是“删除原始 SQL参数并固定生成单条 `SELECT`”。使用 GreptimeDB 1.0 及以上版本时,应为该 MCP 配置独立的 `ro`/`readonly` 账号。
## Claude Desktop 集成(stdio
```json
{
"mcpServers": {
"hertzbeat-mcp": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"${PATH}/hertzbeat-mcp-2.0-SNAPSHOT.jar"
],
"env": {
"GREPTIME_URL": "http://${IP}:4000",
"GREPTIME_DATABASE": "public",
"GREPTIME_USERNAME": "${READ_ONLY_USERNAME}",
"GREPTIME_PASSWORD": "${READ_ONLY_PASSWORD}"
}
}
}
}
```
不启用 GreptimeDB 认证时,可以省略 `GREPTIME_USERNAME``GREPTIME_PASSWORD`;不能只配置其中一个。
旧的 `getHertzbeatLog({"querySql": "..."})` Tool 已直接移除,不保留兼容入口,以免继续暴露任意 SQL执行能力。