Skip to main content
Glama
yeonkyu-git

MCP Prometheus

by yeonkyu-git

MCP Prometheus + Loki ๐Ÿ“ˆ

Prometheus + Loki ๊ธฐ๋ฐ˜ ๋ชจ๋‹ˆํ„ฐ๋ง์šฉ MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์—”ํŠธ๋ฆฌํฌ์ธํŠธ๋Š” main.py์ž…๋‹ˆ๋‹ค.

Quick Start ๐Ÿš€

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

์ตœ๊ทผ ๋กœ๊ทธ ๊ธฐ์ค€ host ํ›„๋ณด ์กฐํšŒ

๊ธฐ๋ณธ ์ตœ๊ทผ 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๋Š” ๋ช…์‹œ์ ์œผ๋กœ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Discovery Tool

  • 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
}

CHECKS Catalog โœ…

Source: domain/checks.py (CHECKS)

System / Resource

  • cpu_avg_pct: CPU average usage (%) by instance/server_name

  • cpu_peak_pct: window peak CPU usage (%) over selected range

  • mem_used_pct: memory used ratio (%)

  • mem_swap_used_pct: swap used ratio (%)

  • load15_avg: 15-minute load average

  • cpu_iowait_pct: CPU iowait ratio (%)

Disk / Filesystem

  • disk_used_pct_by_mount: filesystem used (%) by mountpoint/device (0-100 scale)

  • disk_used_top5_pct: top 5 filesystem usage (%)

  • disk_inodes_used_pct: inode usage (%)

  • fs_readonly: readonly filesystem indicator (1=readonly)

  • disk_io_busy_pct: disk I/O busy ratio (%)

Availability

  • up: target liveness (1=up, 0=down)

Network / TCP

  • net_in_bytes: inbound throughput (bytes/sec)

  • net_out_bytes: outbound throughput (bytes/sec)

  • net_errs_per_sec: RX+TX network errors per second

  • tcp_retrans_per_sec: TCP retransmit segments per second

  • tcp_established: established TCP connections

  • tcp_time_wait: TIME_WAIT TCP sockets

  • tcp_inuse: in-use TCP sockets

  • tcp_orphan: orphan TCP sockets

Process Monitoring

  • proc_cpu_pct: process group CPU usage (%)

  • proc_mem_bytes: process group memory usage (bytes)

  • proc_count: process group process count

PostgreSQL

  • pg_up: PostgreSQL exporter up state (1=up, 0=down)

  • pg_qps: PostgreSQL transactions/sec (commit + rollback)

  • pg_cache_hit_pct: PostgreSQL buffer cache hit ratio (%)

  • pg_active_conn: active PostgreSQL connections

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์š”์•ฝ โš™๏ธ

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 fallback

Loki ํ™˜๊ฒฝ ์„ ํƒ ์šฐ์„ ์ˆœ์œ„:

  1. loki_environment

  2. LOKI_URL fallback

์šด์˜ ํŒ ๐Ÿ’ก

  • ๋ฆฌํฌํŠธ ์ถœ๋ ฅ ์‹œ % ๋‹จ์œ„๋ฅผ ๋ช…ํ™•ํžˆ ํ‘œ๊ธฐํ•˜์„ธ์š”.

  • ๋‹จ์ผ ์„œ๋ฒ„ ์ ๊ฒ€์€ instance ๋˜๋Š” server_name ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • disk_used_pct_by_mount ๊ฐ’์€ 0~100 ์Šค์ผ€์ผ์ž…๋‹ˆ๋‹ค. (0.8 = 0.8%)

  • Loki ์กฐํšŒ ์ „์—๋Š” list_loki_hosts ๋˜๋Š” list_loki_apps๋กœ ํ›„๋ณด๊ฐ’์„ ๋จผ์ € ํ™•์ธํ•˜๋Š” ํŽธ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yeonkyu-git/MCP-Prometheus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server