关于 prometheus-configuration
用于配置 Prometheus 指标采集、告警和监控的技能,涵盖抓取发现、记录规则与验证,并注明部分引用文件未随附。
主要功能
- 01配置指标抓取目标
- 02文件与 Kubernetes 服务发现
- 03编写记录规则和告警规则
- 04验证配置与规则
适用场景
- 01搭建基础设施监控
- 02配置应用指标抓取
- 03为查询编写记录规则
- 04检查 Prometheus 配置和规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill prometheus-configuration安装后在 Claude Code 中输入/prometheus-configuration确认已加载。
详细介绍
配套材料可用性
此目录副本包含以下内联指南,但不包含以下配套路径。这些是外部前提文件,并未打包在内:
<support-root>/assets/prometheus.yml.template<support-root>/references/scrape-configs.md<support-root>/references/recording-rules.md<support-root>/scripts/validate-prometheus.sh
使用依赖这些路径的步骤前,请索取原始配套材料或现有安装;此目录未提供经验证的下载来源。请相对于该安装解析每个路径、检查其内容,并确认适用的许可证及执行前提。所需文件不存在时,不要运行命令,也不要声称已遵循相关流程。不要伪造缺失的脚本,也不要将名称相同但无关的文件视为等同文件。此处完整记录的独立步骤,可在用户授权范围内继续;任何依赖配套材料的步骤都应报告为不可用。
Prometheus 配置
Prometheus 设置、指标采集、抓取配置和记录规则的完整指南。
以下情况请勿使用此技能
- 任务与 Prometheus 配置无关
- 需要使用此范围之外的其他领域或工具
说明
- 明确目标、约束和所需输入。
- 应用相关最佳实践并验证结果。
- 提供可执行的步骤和验证方法。
用途
配置 Prometheus,以全面采集指标、进行告警并监控基础设施和应用。
以下情况请使用此技能
- 设置 Prometheus 监控
- 配置指标抓取
- 创建记录规则
- 设计告警规则
- 实现服务发现
Prometheus 架构
┌──────────────┐
│ Applications │ ← Instrumented with client libraries
└──────┬───────┘
│ /metrics endpoint
↓
┌──────────────┐
│ Prometheus │ ← Scrapes metrics periodically
│ Server │
└──────┬───────┘
│
├─→ AlertManager (alerts)
├─→ Grafana (visualization)
└─→ Long-term storage (Thanos/Cortex)
安装前应固定并检查 Chart/镜像版本及其配置值。Helm 的 PVC 片段还需要合适的 StorageClass 和容量;请验证渲染后的清单。Compose 示例缺少完整配置中引用的 Alertmanager、exporter、Kubernetes API 凭据/RBAC、TLS 文件和规则挂载;请明确提供这些内容,或移除未使用的任务。请将监控 API 保持为私有,并保护标签/配置响应,避免暴露租户数据或机密信息。限制指标标签的基数,并使用 promtool 验证规则;阈值仅供参考,并非通用 SLO。若错误指标序列不存在,可能需要有意采用补零策略;流量为零时,也不应默认视为健康百分比。
安装
使用 Helm 部署到 Kubernetes
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set prometheus.prometheusSpec.retention=30d \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.accessModes[0]=ReadWriteOnce \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi
Docker Compose
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "127.0.0.1:9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
volumes:
prometheus-data:
配置文件
prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
cluster: 'production'
region: 'us-west-2'
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
# Load rules files
rule_files:
- /etc/prometheus/rules/*.yml
# Scrape configurations
scrape_configs:
# Prometheus itself
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Node exporters
- job_name: 'node-exporter'
static_configs:
- targets:
- 'node1:9100'
- 'node2:9100'
- 'node3:9100'
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
# Kubernetes pods with annotations
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
# Application metrics
- job_name: 'my-app'
static_configs:
- targets:
- 'app1.example.com:9090'
- 'app2.example.com:9090'
metrics_path: '/metrics'
scheme: 'https'
tls_config:
ca_file: /etc/prometheus/ca.crt
cert_file: /etc/prometheus/client.crt
key_file: /etc/prometheus/client.key
**参考:**参见 assets/prometheus.yml.template
抓取配置
静态目标
scrape_configs:
- job_name: 'static-targets'
static_configs:
- targets: ['host1:9100', 'host2:9100']
labels:
env: 'production'
region: 'us-west-2'
基于文件的服务发现
scrape_configs:
- job_name: 'file-sd'
file_sd_configs:
- files:
- /etc/prometheus/targets/*.json
- /etc/prometheus/targets/*.yml
refresh_interval: 5m
targets/production.json:
[
{
"targets": ["app1:9090", "app2:9090"],
"labels": {
"env": "production",
"service": "api"
}
}
]
Kubernetes 服务发现
scrape_configs:
- job_name: 'kubernetes-services'
kubernetes_sd_configs:
- role: service
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: "true"
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
**参考:**参见 references/scrape-configs.md
记录规则
为经常查询的表达式创建预计算指标:
# /etc/prometheus/rules/recording_rules.yml
groups:
- name: api_metrics
interval: 15s
rules:
# HTTP request rate per service
- record: job:http_requests:rate5m
expr: sum by (job) (rate(http_requests_total[5m]))
# Error rate percentage
- record: job:http_requests_errors:rate5m
expr: sum by (job) (rate(http_requests_total{status=~"5.."}[5m]))
- record: job:http_requests_error_rate:percentage
expr: |
(job:http_requests_errors:rate5m / job:http_requests:rate5m) * 100
# P95 latency
- record: job:http_request_duration:p95
expr: |
histogram_quantile(0.95,
sum by (job, le) (rate(http_request_duration_seconds_bucket[5m]))
)
- name: resource_metrics
interval: 30s
rules:
# CPU utilization percentage
- record: instance:node_cpu:utilization
expr: |
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Memory utilization percentage
- record: instance:node_memory:utilization
expr: |
100 - ((node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100)
# Disk usage percentage
- record: instance:node_disk:utilization
expr: |
100 - ((node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100)
**参考:**参见 references/recording-rules.md
告警规则
# /etc/prometheus/rules/alert_rules.yml
groups:
- name: availability
interval: 30s
rules:
- alert: ServiceDown
expr: up{job="my-app"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Service {{ $labels.instance }} is down"
description: "{{ $labels.job }} has been down for more than 1 minute"
- alert: HighErrorRate
expr: job:http_requests_error_rate:percentage > 5
for: 5m
labels:
severity: warning
annotations:
summary: "High error rate for {{ $labels.job }}"
description: "Error rate is {{ $value }}% (threshold: 5%)"
- alert: HighLatency
expr: job:http_request_duration:p95 > 1
for: 5m
labels:
severity: warning
annotations:
summary: "High latency for {{ $labels.job }}"
description: "P95 latency is {{ $value }}s (threshold: 1s)"
- name: resources
interval: 1m
rules:
- alert: HighCPUUsage
expr: instance:node_cpu:utilization > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is {{ $value }}%"
- alert: HighMemoryUsage
expr: instance:node_memory:utilization > 85
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage is {{ $value }}%"
- alert: DiskSpaceLow
expr: instance:node_disk:utilization > 90
for: 5m
labels:
severity: critical
annotations:
summary: "Low disk space on {{ $labels.instance }}"
description: "Disk usage is {{ $value }}%"
验证
# Validate configuration
promtool check config prometheus.yml
# Validate rules
promtool check rules /etc/prometheus/rules/*.yml
# Test query
promtool query instant http://localhost:9090 'up'
**参考:**参见 scripts/validate-prometheus.sh
最佳实践
- 采用一致的命名方式为指标命名(prefix_name_unit)
- 设置合适的抓取间隔(通常为 15-60s)
- 对开销较大的查询使用记录规则
- 实现高可用性(运行多个 Prometheus 实例)
- 根据存储容量配置数据保留时间
- 使用重新标记清理指标
- 监控 Prometheus 本身
- 为大型部署实现联邦
- 使用 Thanos/Cortex 进行长期存储
- 记录自定义指标
故障排除
检查抓取目标:
curl http://localhost:9090/api/v1/targets
检查配置:
curl http://localhost:9090/api/v1/status/config
测试查询:
curl 'http://localhost:9090/api/v1/query?query=up'
参考文件
assets/prometheus.yml.template- 完整配置模板references/scrape-configs.md- 抓取配置模式references/recording-rules.md- 记录规则示例scripts/validate-prometheus.sh- 验证脚本
相关技能
grafana-dashboards- 用于可视化slo-implementation- 用于 SLO 监控distributed-tracing- 用于请求追踪
限制
- 仅当任务明确符合上述范围时,才使用此技能。
- 请勿将输出视为针对特定环境的验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。