监控服务器

基于Prometheus和Loki的监控服务,用于系统资源、网络、进程和数据库等的实时监控与日志查询。

  • by yeonkyu-git
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yeonkyu-git/MCP-Prometheus

使用说明

# MCP普罗米修斯+洛基📈

用于基于Prometheus+Loki的监控的MCP服务器。 入口点为 main.py是。

快速开始🚀

cd d:\MCPTools
uv sync
uv run python mcp_prometheus/main.py

项目结构🧩

mcp_prometheus/
  main.py
  core/
    config.py
    runtime.py
    server.py
    time_utils.py
  domain/
    checks.py
  infra/
    loki_client.py
    prom_client.py
  tools/
    catalog.py
    alerts_runner.py
    checks_runner.py
    loki_query.py
    promql.py
  utils/
    query_utils.py
    summarize.py

Tools摘要🛠️

Tool目的备注 |---|---|---| | list_checks |查看已注册的检查列表| id, name, description 返回| | list_environments |按环境查询Prometheus URL | prod/dev_test/dr | | list_servers |查看最近的up标准服务器列表| (instance, job) 标准重复数据删除| | list_process_groups |查看流程组列表| process_monitoring 标准| | list_loki_environments |按环境查看Loki URL | prod/dev_test | | list_loki_hosts |查看基于最近日志的主机候选项|默认最近1小时| | list_loki_apps |查看基于最近日志的app候选|默认最近1小时| | find_logs |查看结构化Loki日志| loki_environment, log_env, host, app 需要| | get_alerts |查看Prometheus活动Alert | /api/v1/alerts 支持基于、标签/状态过滤器| | run_check |运行单个检查|默认建议| | run_all_checks |并行执行完整检查| step=5m 固定| | run_promql |直接运行用户PromQL | approved=True 需要|

Loki Tool输入指南🪵

区分环境

  • loki_environment:选择要连接到哪个Loki服务器(prod, dev_test)
  • log_env:Loki日志标签 env 值(prod, DEV, TEST)

这两个不是同一个意思。 例如, dev_test Loki服务器内 DEV哇 TEST 日志可能在一起, find_logs 呼叫时 log_env必须明确放入。

发现工具

  • list_loki_hosts
  • list_loki_apps

通用规则:

  • 默认持续时间为最近1小时
  • 绝对时间查询时 start_time_utc_iso, end_time_utc_iso 使用
  • 结果返回重复数据删除的候选列表

find_logs

必需:

  • loki_environment
  • log_env
  • host
  • app

选择:

  • 持续时间: hours, minutes, days
  • 绝对时间: start_time_utc_iso, end_time_utc_iso
  • 终止偏移: end_offset_minutes, end_offset_hours, end_offset_days
  • 过滤器: contains, level
  • 数量限制: limit

回复:

  • 生成的LogQL
  • UTC范围
  • line_count
  • logs[] (timestamp, timestamp_jakarta, labels, line)

run_check 输入指南🧭

必需

  • check_id

期间

  • 对象: hours, minutes, days
  • 绝对: start_time_utc_iso, end_time_utc_iso
  • 终止偏移: end_offset_minutes, end_offset_hours, end_offset_days

目标筛选器

  • server_name
  • instance (例如: host-or-ip:9100)

过滤规则:

  • server_name哇 instance如果同时提供,则应用AND
  • 只要给我一个,就只适用该标签

run_promql 护栏🔒

  • approved=False:返回确认消息而不运行
  • approved=True:运行

模式:

  • instant=True -> /api/v1/query
  • instant=False -> /api/v1/query_range

使用示例📌

1)特定服务器CPU平均值(最近24小时)

{
  "check_id": "cpu_avg_pct",
  "hours": 24,
  "instance": "10.23.12.11:9100",
  "environment": "prod"
}

2)特定服务器磁盘利用率(按mountpoint)

{
  "check_id": "disk_used_pct_by_mount",
  "hours": 24,
  "server_name": "CMS AP #1",
  "environment": "prod"
}

3)运行用户PromQL(instant)

{
  "promql": "up",
  "approved": true,
  "instant": true,
  "environment": "prod"
}

4)查询Loki host候选人

{
  "loki_environment": "dev_test",
  "log_env": "DEV",
  "app": "finast",
  "hours": 1
}

5)查看Loki日志

{
  "loki_environment": "prod",
  "log_env": "prod",
  "host": "cms-ap-01",
  "app": "cms",
  "hours": 1,
  "contains": "timeout",
  "limit": 200
}

检查目录✅

来源: domain/checks.py (CHECKS)

系统/资源

  • cpu_avg_pct:按实例/server_name列出的CPU平均使用率(%)
  • cpu_peak_pct:选定范围内的窗口峰值CPU使用率(%)
  • mem_used_pct:内存使用率(%)
  • mem_swap_used_pct:掉期使用率(%)
  • load15_avg:15分钟平均负载
  • cpu_iowait_pct:CPU等待率(%)

磁盘/文件系统

  • disk_used_pct_by_mount:装载点/设备使用的文件系统(%)(0-100比例)
  • disk_used_top5_pct:前5名文件系统使用率(%)
  • disk_inodes_used_pct:索引节点使用率(%)
  • fs_readonly:只读文件系统指示符(1=只读)
  • disk_io_busy_pct:磁盘I/O繁忙率(%)

可用性

  • up:目标活性(1=上升,0=下降)

网络/TCP

  • net_in_bytes:入站吞吐量(字节/秒)
  • net_out_bytes:出站吞吐量(字节/秒)
  • net_errs_per_sec:每秒RX+TX网络错误数
  • tcp_retrans_per_sec:TCP每秒重新传输段数
  • tcp_established:已建立TCP连接
  • tcp_time_wait:TIME_WAIT TCP套接字
  • tcp_inuse:正在使用的TCP套接字
  • tcp_orphan:孤立TCP套接字

过程监控

  • proc_cpu_pct:进程组CPU使用率(%)
  • proc_mem_bytes:进程组内存使用情况(字节)
  • proc_count:进程组进程计数

PostgreSQL

  • pg_up:PostgreSQL导出器向上状态(1=向上,0=向下)
  • pg_qps:PostgreSQL事务/秒(提交+回滚)
  • pg_cache_hit_pct:PostgreSQL缓冲区缓存命中率(%)
  • pg_active_conn:活动PostgreSQL连接

环境变量摘要⚙ENT

PROM_ENV_URLS={"prod":"http://...:9090","dev_test":"http://...:9090","dr":"http://...:9090"}
PROM_URL=http://...:9090
PROM_BEARER_TOKEN=
PROM_TIMEOUT_SEC=15

LOKI_ENV_URLS={"prod":"http://...:3100","dev_test":"http://...:3100"}
LOKI_URL=http://...:3100
LOKI_BEARER_TOKEN=
LOKI_TIMEOUT_SEC=15

ALERT_WARN_PCT=85
ALERT_CRIT_PCT=95
ALERT_SUSTAIN_MINUTES=5

PROM_MAX_SAMPLES_PER_SERIES=5000
PROM_MAX_PARALLEL_CHECKS=6

环境选择优先级:

  1. environment
  2. env_hint
  3. PROM_URL 后备方案

Loki环境选择优先级:

  1. loki_environment
  2. LOKI_URL 后备方案

操作提示💡

  • 输出报告时 % 请明确标注单位。
  • 单服务器检查 instance 或 server_name 请使用滤镜。
  • disk_used_pct_by_mount 值为0到100刻度。 (0.8 = 0.8%)
  • Loki查询前 list_loki_hosts 或 list_loki_apps先用确认候选值比较安全。