使用说明
MCP洛基
用于查询Grafana Loki日志的MCP服务器。使LLM能够通过模型上下文协议搜索和分析日志。
特性
- LogQL查询 --执行具有灵活时间范围的范围查询
- 标签发现 --列出用于构建查询的标签及其值
- 系列探索 --查找与标签选择器匹配的日志流
- 索引统计 --获取基数和大小指标
- 提示模板 --用于常见日志分析任务的现成LogQL模式
- 多种身份验证方法 --基本身份验证、承载令牌、多租户(X-Scope-ArgID)
- 多拱形图像 —
linux/amd64和linux/arm64 - 签名图像 --通过联合签名无密钥签名进行验证
快速开始
容器(Podman/Docker)
添加到MCP客户端配置中:
{
"mcpServers": {
"loki": {
"command": "podman",
"args": [
"run", "--rm", "-i",
"-e", "LOKI_URL=http://loki:3100",
"ghcr.io/lexfrei/mcp-loki:latest"
]
}
}
}
去安装
go install github.com/lexfrei/mcp-loki/cmd/mcp-loki@latest
MCP客户端配置:
{
"mcpServers": {
"loki": {
"command": "mcp-loki",
"env": {
"LOKI_URL": "http://loki:3100"
}
}
}
}
配置
所有配置都是通过环境变量完成的:
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
LOKI_URL |
没有 | http://localhost:3100 |
洛基服务器URL |
LOKI_USERNAME |
否 | -- | 基本身份验证用户名 |
LOKI_PASSWORD |
否 | -- | 基本身份验证密码 |
LOKI_TOKEN |
无 | -- | 承载令牌(基本身份验证的替代方案) |
LOKI_ORG_ID |
多租户Loki没有 | -- | X-Scope-ArgID标头 |
MCP_HTTP_PORT |
否 | -- | 在此端口上启用HTTP SSE传输 |
身份验证示例
无身份验证(本地Loki):
{
"command": "podman",
"args": [
"run", "--rm", "-i",
"-e", "LOKI_URL=http://loki:3100",
"ghcr.io/lexfrei/mcp-loki:latest"
]
}
基本身份验证:
{
"command": "podman",
"args": [
"run", "--rm", "-i",
"-e", "LOKI_URL=https://loki.example.com",
"-e", "LOKI_USERNAME=admin",
"-e", "LOKI_PASSWORD=secret",
"ghcr.io/lexfrei/mcp-loki:latest"
]
}
承载令牌(Grafana Cloud):
{
"command": "podman",
"args": [
"run", "--rm", "-i",
"-e", "LOKI_URL=https://logs-prod-us-central1.grafana.net",
"-e", "LOKI_TOKEN=glc_xxx",
"-e", "LOKI_ORG_ID=123456",
"ghcr.io/lexfrei/mcp-loki:latest"
]
}
可用工具
loki_query
对Loki执行LogQL查询。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query |
string | 是 | LogQL查询字符串 |
start |
string | 否 | 开始时间(RFC3339,相对类似 1h,或 now) |
end |
string | 否 | 结束时间(RFC3339,相对或 now) |
limit |
int | 否 | 返回的最大条目数(默认值:100) |
direction |
string | 否 | forward 或 backward (默认值: backward) |
例子:
Query the last hour of nginx error logs:
- query: {app="nginx"} |= "error"
- start: 1h
- limit: 50
loki标签
获取特定标签的标签名称或值。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name |
string | 否 | 要获取值的标签名称(对所有标签省略) |
start |
string | 否 | 开始时间 |
end |
string | 否 | 结束时间 |
例子:
Get all label names: (no parameters)
Get values for "app" label: name=app
loki系列
查找与标签选择器匹配的日志流。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
match |
[]string | Yes | 标签选择器,例如。, {app="nginx"} |
start |
string | 否 | 开始时间 |
end |
string | 否 | 结束时间 |
例子:
Find all nginx streams: match=["{app=\"nginx\"}"]
loki_stats
获取查询的索引统计信息。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query |
string | 是 | LogQL选择器 |
start |
string | 否 | 开始时间 |
end |
string | 否 | 结束时间 |
例子:
Get stats for nginx logs: query={app="nginx"}
lokiready
检查Loki是否已准备好接受请求。无需参数。
loki_config
获取YAML格式的Loki服务器配置。无需参数。
可用提示
错误日志
查找特定应用程序的错误日志。
| 参数 | 必需 | 默认值 | 描述 |
|---|---|---|---|
app |
是 | -- | 要搜索错误的应用程序名称 |
timerange |
没有 | 1h |
时间范围(例如。 1h, 30m, 7d) |
rate_query
计算与选择器匹配的日志行的比率。
| 参数 | 必需 | 默认值 | 描述 |
|---|---|---|---|
selector |
是 | -- | LogQL流选择器(例如。 {app="nginx"}) |
interval |
没有 | 5m |
速率间隔(例如。 5m, 1h) |
top_label_values
按日志量查找标签的前N个值。
| 参数 | 必需 | 默认值 | 描述 |
|---|---|---|---|
selector |
是 | -- | LogQL流选择器(例如。 {app="nginx"}) |
label |
是 | -- | 要分组的标签名称 |
n |
没有 | 10 |
要返回的顶级值的数量 |
interval |
没有 | 5m |
速率间隔(例如。 5m, 1h) |
时间格式
所有时间参数均接受:
- RFC3339:
2024-01-15T10:30:00Z - 相对的:
30s,5m,1h,7d(秒、分钟、小时、天前) - 关键词:
now
验证
容器图像使用共同签名无密钥签名进行签名:
cosign verify ghcr.io/lexfrei/mcp-loki:latest \
--certificate-identity-regexp=https://github.com/lexfrei/mcp-loki \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com
