返回 MCP 目录
public公开dns本地运行

mcp-loki

MCP Loki是一个用于查询Grafana Loki日志的MCP服务器,通过模型上下文协议使LLM能够搜索和分析日志,支持LogQL查询、标签发现、系列探索和索引统计等功能。

article

README

🚀 MCP Loki

MCP Loki 是一个用于查询 Grafana Loki 日志的 MCP 服务器。它借助模型上下文协议,让大语言模型(LLMs)能够搜索和分析日志,极大提升了日志处理和分析的效率。

✨ 主要特性

  • LogQL 查询:可执行具有灵活时间范围的范围查询。
  • 标签发现:列出标签及其值,方便构建查询。
  • 系列探索:查找与标签选择器匹配的日志流。
  • 索引统计:获取基数和大小指标。
  • 多种认证方式:支持基本认证、Bearer 令牌、多租户(X-Scope-OrgID)。
  • 多架构镜像:提供 linux/amd64linux/arm64 架构的镜像。
  • 签名镜像:通过 cosign 无密钥签名验证。

🚀 快速开始

容器(Podman/Docker)

将以下内容添加到你的 MCP 客户端配置中:

{
  "mcpServers": {
    "loki": {
      "command": "podman",
      "args": [
        "run", "--rm", "-i",
        "-e", "LOKI_URL=http://loki:3100",
        "ghcr.io/lexfrei/mcp-loki:latest"
      ]
    }
  }
}

Go 安装

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 | Loki 服务器的 URL | | LOKI_USERNAME | 否 | — | 基本认证的用户名 | | LOKI_PASSWORD | 否 | — | 基本认证的密码 | | LOKI_TOKEN | 否 | — | Bearer 令牌(基本认证的替代方式) | | LOKI_ORG_ID | 否 | — | 多租户 Loki 的 X-Scope-OrgID 头 | | 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"
  ]
}

Bearer 令牌(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 | 字符串 | 是 | LogQL 查询字符串 | | start | 字符串 | 否 | 开始时间(RFC3339 格式、相对时间如 1hnow) | | end | 字符串 | 否 | 结束时间(RFC3339 格式、相对时间或 now) | | limit | 整数 | 否 | 要返回的最大条目数(默认:100) | | direction | 字符串 | 否 | forwardbackward(默认:backward) |

示例:

查询最近一小时的 nginx 错误日志:
- query: {app="nginx"} |= "error"
- start: 1h
- limit: 50

loki_labels

获取特定标签的名称或值。 | 参数 | 类型 | 是否必需 | 描述 | |-----------|------|----------|-------------| | name | 字符串 | 否 | 要获取值的标签名称(省略则获取所有标签) | | start | 字符串 | 否 | 开始时间 | | end | 字符串 | 否 | 结束时间 |

示例:

获取所有标签名称:(无参数)
获取 "app" 标签的值:name=app

loki_series

查找与标签选择器匹配的日志流。 | 参数 | 类型 | 是否必需 | 描述 | |-----------|------|----------|-------------| | match | 字符串数组 | 是 | 标签选择器,例如 {app="nginx"} | | start | 字符串 | 否 | 开始时间 | | end | 字符串 | 否 | 结束时间 |

示例:

查找所有 nginx 日志流:match=["{app=\"nginx\"}"]

loki_stats

获取查询的索引统计信息。 | 参数 | 类型 | 是否必需 | 描述 | |-----------|------|----------|-------------| | query | 字符串 | 是 | LogQL 选择器 | | start | 字符串 | 否 | 开始时间 | | end | 字符串 | 否 | 结束时间 |

示例:

获取 nginx 日志的统计信息:query={app="nginx"}

时间格式

所有时间参数支持以下格式:

  • RFC33392024-01-15T10:30:00Z
  • 相对时间30s5m1h7d(分别表示秒、分钟、小时、天前)
  • 关键字now

🔧 技术细节

容器镜像通过 cosign 无密钥签名进行验证:

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

📄 许可证

本项目采用 BSD-3-Clause 许可证。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端