Add prometheus_skill.py for Prometheus-dignose skill

This commit is contained in:
joee_yang
2026-03-30 20:01:18 +08:00
parent 645542c104
commit c88420ac74

View File

@@ -0,0 +1,105 @@
import requests
from typing import Optional, Dict, Any, List
class PrometheusSkill:
"""
Prometheus API Skill
封装 Prometheus HTTP API 所有常用接口,支持 agent/LangChain/LLM 等调用。
"""
def __init__(self, base_url: str, bearer_token: Optional[str] = None):
self.base_url = base_url.rstrip("/")
self.headers = {"Authorization": f"Bearer {bearer_token}"} if bearer_token else {}
# ========== 1. 实时查询 ==========
def instant_query(self, promql: str, time: Optional[float] = None) -> Dict[str, Any]:
"""执行单点PromQL查询 /api/v1/query"""
params = {"query": promql}
if time:
params["time"] = time
return self._get("/api/v1/query", params)
# ========== 2. 范围查询 ==========
def range_query(self, promql: str, start: str, end: str, step: str) -> Dict[str, Any]:
"""执行时序PromQL查询 /api/v1/query_range"""
params = {
"query": promql,
"start": start,
"end": end,
"step": step
}
return self._get("/api/v1/query_range", params)
# ========== 3. 获取所有 metric 名字 ==========
def list_series(self, match: List[str], start: Optional[str] = None, end: Optional[str] = None) -> Dict[str, Any]:
"""列出匹配的时序(可用于探查所有监控项) /api/v1/series"""
params = [("match[]", m) for m in match]
if start: params.append(("start", start))
if end: params.append(("end", end))
return self._get("/api/v1/series", params)
def list_labels(self, start: Optional[str] = None, end: Optional[str] = None) -> Dict[str, Any]:
"""列出所有label名 /api/v1/labels"""
params = {}
if start: params["start"] = start
if end: params["end"] = end
return self._get("/api/v1/labels", params)
def label_values(self, label_name: str, start: Optional[str] = None, end: Optional[str] = None) -> Dict[str, Any]:
"""列出某个label的所有 possible value /api/v1/label/{label_name}/values"""
params = {}
if start: params["start"] = start
if end: params["end"] = end
return self._get(f"/api/v1/label/{{label_name}}/values", params)
# ========== 4. 获取目标/告警 配置/状态 ==========
def get_targets(self) -> Dict[str, Any]:
"""获取targets监控目标 /api/v1/targets"""
return self._get("/api/v1/targets")
def get_alerts(self) -> Dict[str, Any]:
"""Prometheus当前所有告警由Prometheus规则产生 /api/v1/alerts"""
return self._get("/api/v1/alerts")
def get_rules(self) -> Dict[str, Any]:
"""获取当前所有Prometheus规则 /api/v1/rules"""
return self._get("/api/v1/rules")
def get_active_alertmanagers(self) -> Dict[str, Any]:
"""获取当前活跃的alertmanager列表 /api/v1/alertmanagers"""
return self._get("/api/v1/alertmanagers")
def get_status(self) -> Dict[str, Any]:
"""获取Prometheus服务状态 /api/v1/status"""
return self._get("/api/v1/status")
def get_flags(self) -> Dict[str, Any]:
"""获取Prometheus启动flags /api/v1/status/flags"""
return self._get("/api/v1/status/flags")
def get_config(self) -> Dict[str, Any]:
"""获取Prometheus配置 /api/v1/status/config"""
return self._get("/api/v1/status/config")
def get_runtimeinfo(self) -> Dict[str, Any]:
"""Prometheus运行时信息 /api/v1/status/runtimeinfo"""
return self._get("/api/v1/status/runtimeinfo")
def get_buildinfo(self) -> Dict[str, Any]:
"""Prometheus构建信息 /api/v1/status/buildinfo"""
return self._get("/api/v1/status/buildinfo")
# ========== 5. 内部辅助 ==========
def _get(self, path: str, params=None) -> Dict[str, Any]:
url = self.base_url + path
r = requests.get(url, headers=self.headers, params=params, timeout=15)
r.raise_for_status()
return r.json()
# ==== 用法示例 ====
if __name__ == "__main__":
prom = PrometheusSkill(base_url="http://localhost:9090")
print(prom.instant_query("up"))
print(prom.get_targets())
print(prom.list_labels())
print(prom.get_rules())