Prometheus指标分析服务

一个用于分析和监控Prometheus node_exporter和cAdvisor指标的服务,提供多种查询和分析工具,适用于系统健康监控和容器性能分析。

  • by burhanfauzisalam
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 burhanfauzisalam/mcp-prometheus

使用说明

Prometheus node_exporter + cAdvisor MCP Server

MCP server ini membaca dan menganalisa metric Prometheus, dengan fokus utama pada data node_exporter dan cAdvisor.

Endpoint publik yang diharapkan di Traefik:

https://YOUR_DOMAIN/mcp-node-exporter

Di backend container, endpoint MCP dijalankan pada /, lalu Traefik melakukan StripPrefix(/mcp-node-exporter).

Tools yang tersedia

  1. prometheus_instant_query Menjalankan instant query PromQL.

  2. prometheus_range_query Menjalankan range query PromQL.

  3. prometheus_metric_metadata Mengambil metadata metric seperti type, help, dan unit.

  4. prometheus_label_values Mengambil daftar nilai untuk label tertentu, misalnya instance atau job.

  5. analyze_node_exporter Membuat ringkasan health node_exporter per instance, meliputi:

    • status scrape (up)
    • CPU usage 5 menit
    • penggunaan memory
    • load average per core
    • filesystem usage tertinggi
  6. analyze_cadvisor Membuat ringkasan kondisi tiap container dari cAdvisor, meliputi:

    • status scrape instance (up)
    • CPU usage 5 menit per container
    • memory working set dan persentase terhadap memory limit
    • filesystem usage per container
    • network receive/transmit rate per container

Asumsi metric

Server ini mengasumsikan metric node_exporter dan cAdvisor tersedia di Prometheus.

Metric node_exporter yang dipakai:

  • up
  • node_cpu_seconds_total
  • node_memory_MemAvailable_bytes
  • node_memory_MemTotal_bytes
  • node_load1
  • node_filesystem_avail_bytes
  • node_filesystem_size_bytes

Metric cAdvisor yang dipakai:

  • container_cpu_usage_seconds_total
  • container_memory_working_set_bytes
  • container_spec_memory_limit_bytes
  • container_fs_usage_bytes
  • container_fs_limit_bytes
  • container_network_receive_bytes_total
  • container_network_transmit_bytes_total

Environment variable

Lihat .env.example.

Variabel penting:

  • PROMETHEUS_BASE_URL: URL Prometheus internal, misalnya http://prometheus:9090
  • DEFAULT_NODE_EXPORTER_JOB: default label job, misalnya node-exporter
  • DEFAULT_CADVISOR_JOB: default label job untuk cAdvisor, misalnya cadvisor
  • MCP_ENDPOINT: endpoint MCP internal container, default /
  • HEALTH_PATH: endpoint health, default /healthz
  • ALLOWED_ORIGINS: daftar origin yang diizinkan, dipisah koma. Kosong = semua origin lolos di layer app. Tetap gunakan proteksi di Traefik / jaringan.

Menjalankan dengan Docker

cp .env.example .env
# edit sesuai environment

docker compose up -d --build

Traefik pathPrefix

docker-compose.yml sudah menyiapkan label untuk:

  • router: PathPrefix(/mcp-node-exporter)
  • middleware: StripPrefix(/mcp-node-exporter)

Dengan begitu:

  • URL MCP dari sisi client: /mcp-node-exporter
  • URL health dari sisi client: /mcp-node-exporter/healthz

Contoh konfigurasi MCP client

Codex / client berbasis Streamable HTTP

[mcp_servers.prometheus_node_exporter]
url = "https://YOUR_DOMAIN/mcp-node-exporter"

Contoh penggunaan tool

1. Dapatkan daftar instance node exporter

Gunakan tool:

prometheus_label_values

Input:

{
  "label": "instance",
  "match": "up{job=\"node-exporter\"}"
}

2. Analisa satu node tertentu

Gunakan tool:

{
  "job": "node-exporter",
  "instance": "10.0.0.5:9100"
}

3. Instant query custom

{
  "query": "100 * (1 - avg by(instance) (rate(node_cpu_seconds_total{job=\"node-exporter\", mode=\"idle\"}[5m])))"
}

4. Analisa kondisi semua container cAdvisor

Gunakan tool analyze_cadvisor:

{
  "job": "cadvisor"
}

Untuk filter container tertentu (substring match):

{
  "job": "cadvisor",
  "container": "redis"
}

Catatan keamanan

MCP transport HTTP sebaiknya diamankan. Spesifikasi MCP menekankan validasi Origin, binding yang tepat, dan autentikasi untuk server remote. Streamable HTTP adalah transport yang direkomendasikan untuk server remote, dan server harus menyediakan satu endpoint HTTP yang mendukung POST dan GET. citeturn2search1turn3view1

Prometheus juga menyediakan HTTP API resmi untuk instant query, range query, metadata, dan label values; server ini memakai endpoint-endpoint tersebut. citeturn1view2