关于 prometheus
prometheus 是用于基础设施、应用和服务监控的技能,面向 DevOps/SRE 场景。它介绍 HTTP 指标采集、PromQL 查询、告警规则和时序数据保留,也涵盖多实例联邦。
主要功能
- 01通过 HTTP 抓取指标
- 02使用 PromQL 查询时序数据
- 03配置 YAML 告警规则
- 04设置数据存储与保留期限
- 05汇总多个 Prometheus 实例
适用场景
- 01监控服务器或应用指标
- 02查询 CPU 等运行数据
- 03针对高 CPU 或错误率设置告警
- 04聚合多个实例的指标
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill prometheus安装后在 Claude Code 中输入/prometheus确认已加载。
详细介绍
prometheus
用途
Prometheus 用于监控各种目标的指标并基于指标发送告警。它通过 HTTP 拉取时序数据、存储数据,并允许查询数据以触发告警。
适用场景
在 DevOps/SRE 环境中监控基础设施、应用或服务时使用此技能。可将其用于实时指标采集、异常检测或扩缩容决策,例如跟踪 Kubernetes 集群中的服务器运行状况,或在微服务错误率过高时发送告警。
主要功能
- 指标采集:使用可配置的作业抓取 HTTP 端点;在 YAML 配置中指定目标,例如
scrape_configs: - job_name: 'node' static_configs: - targets: ['localhost:9100']。 - 查询:使用 PromQL 检索数据;例如,使用
rate(node_cpu_seconds_total{mode="idle"}[5m])查询 CPU 使用情况。 - 告警:在 YAML 文件中定义规则以触发告警;例如:
groups: - name: example rules: - alert: HighCPU usage: (avg by(instance) (rate(node_cpu_seconds_total{mode="system"}[5m])) > 0.8) for: 1m。 - 存储与保留:处理时序数据,并支持配置保留期限;通过
--storage.tsdb.retention.time=15d标志设置。 - 联邦:聚合多个 Prometheus 实例的指标,以适用于更大规模的部署。
使用模式
要监控某个目标,请先创建包含抓取作业的 YAML 配置文件(例如 prometheus.yml),然后使用该配置启动 Prometheus 服务。查询时,可使用内置 API 或集成 Grafana 等工具。尽早设置告警规则。如果在容器中使用,请挂载配置卷并公开 Web 端口(默认端口为 9090)。对于生产环境,可通过设置 --web.external-url 并使用环境变量(如 $PROMETHEUS_AUTH_USER 和 $PROMETHEUS_AUTH_PASS)配置基本身份验证。
常用命令/API
- CLI 命令:使用
prometheus --config.file=prometheus.yml --web.listen-address=":9090" --storage.tsdb.path="/prometheus"启动服务。使用curl -X POST http://localhost:9090/-/reload动态重新加载配置。使用promtool测试规则:promtool check rules prometheus.rules.yml。 - API 端点:通过 GET /api/v1/query 和查询参数查询指标,例如
curl "http://localhost:9090/api/v1/query?query=up"。范围查询可使用 GET /api/v1/query_range?query=up&start=1630000000&end=1630003600&step=15s。如果需要身份验证,请添加类似Authorization: Bearer $PROMETHEUS_API_KEY的标头。 - 代码片段:
// Simple Go client to query Prometheus client, err := prometheus.NewClient(http.Client{}, "http://localhost:9090") result, err := client.Query(context.Background(), "up", time.Now())# Python example using prometheus-api-client from prometheus_api_client import MetricsList metrics = MetricsList('http://localhost:9090/api/v1/query?query=up') print(metrics) - 配置格式:主配置使用 YAML;示例片段:
global: scrape_interval: 15s。告警规则使用 YAML 数组,参见“主要功能”部分中的示例。
集成说明
通过在配置中添加抓取作业,将 Prometheus 与导出器(例如,用于系统指标的 Node Exporter)集成。要进行可视化,可连接 Grafana,添加 URL 类似 http://prometheus:9090 的 Prometheus 数据源,并通过环境变量 $GRAFANA_PROM_DS_KEY 进行身份验证。要配置联邦,请在 YAML 中设置远程写入:remote_write: - url: 'http://federate-prometheus:9090/api/v1/write'。如果与 Kubernetes 配合使用,请通过 Helm charts 部署,并使用标签设置 ServiceMonitors。务必通过环境变量处理 API 密钥,例如将其导出为 $PROMETHEUS_API_KEY 以确保安全访问。
错误处理
常见错误包括配置语法问题(使用 promtool check config prometheus.yml 检查)、抓取失败(检查配置中的目标和超时设置)或查询错误(使用 API 响应码判断,例如错误查询会返回 422)。调试时,可通过 --log.level=debug 启用日志记录,并检查日志中类似 "error scraping target" 的消息。对于 API 调用,请处理 HTTP 错误:如果状态码为 500,请使用指数退避重试;代码示例如下:
if err != nil && strings.Contains(err.Error(), "context deadline exceeded") { log.Fatal("Scrape timeout; increase timeout in config") }
先使用 /api/v1/query 端点验证 PromQL 查询。如果身份验证失败(例如,401),请确保已设置环境变量 $PROMETHEUS_AUTH_TOKEN 并正确传递。
具体使用示例
- 监控本地 Web 服务:创建 prometheus.yml,内容如下:
scrape_configs: - job_name: 'web' metrics_path: '/metrics' static_configs: - targets: ['localhost:8080']。启动 Prometheus:prometheus --config.file=prometheus.yml。查询运行状态:curl "http://localhost:9090/api/v1/query?query=up{job='web'}"。此操作每 15 秒采集一次指标,并允许在服务宕机时触发告警。 - 设置 CPU 告警:定义规则文件:
groups: - name: instance rules: - alert: HighCPU expr: avg by(instance) (rate(node_cpu_seconds_total{mode="system"}[5m])) > 0.9 for: 2m。通过配置加载规则:将rule_files: ["alert.rules.yml"]添加到 prometheus.yml 中。运行prometheus --config.file=prometheus.yml。通过添加以下配置与 Alertmanager 集成:alerting: alertmanagers: - static_configs: - targets: ['localhost:9093']。这会在 CPU 使用率过高时触发告警并发送通知。
图关系
- 所属集群:devops-sre
- 标签:monitoring、metrics、alerting
- 相关技能:(例如,通过标签关联)用于可视化的 grafana、用于通知的 alertmanager