MCP洛基
](https://go.dev/)   
用于查询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@latestMCP客户端配置:
{
"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: 50loki标签
获取特定标签的标签名称或值。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | 要获取值的标签名称(对所有标签省略) |
start | string | 否 | 开始时间 |
end | string | 否 | 结束时间 |
例子:
Get all label names: (no parameters)
Get values for "app" label: name=apploki系列
查找与标签选择器匹配的日志流。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
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