【Prometheus】prometheus监控pod资源,ingress,service资源以及如何通过annotations实现自动化监控
俞事 发布于 阅读:248
监控Pod资源
- Exporter部署:
Pod需暴露metrics端点(如/metrics
),通过Sidecar模式或应用内置的Exporter(如node-exporter
)提供数据。 - 服务发现配置:
在Prometheus的prometheus.yml
中配置kubernetes_sd_configs
,使用role: pod
自动发现Pod。- 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] target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] target_label: __address__ regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2
- Annotations示例:
在Pod模板中添加Annotations以触发自动监控:annotations: prometheus.io/scrape: "true" prometheus.io/port: "8080" prometheus.io/path: "/metrics"
- 容器资源指标:
- 使用
cAdvisor
(集成在Kubelet中)收集CPU、内存、磁盘等容器级指标,通过metrics_path: /metrics/cadvisor
抓取。 - 使用
kube-state-metrics
监控Pod状态(如重启次数、资源请求/限制)。
- 使用
监控Ingress
- Ingress Controller Metrics:
Nginx、Traefik等Ingress Controller默认暴露指标(如请求数、延迟)。例如,Nginx Ingress的Service需配置:kind: Service metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "10254"
- Prometheus抓取配置:
针对Ingress Controller的Service配置专用Job:- job_name: 'nginx-ingress' 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_name] action: keep regex: nginx-ingress-controller
监控Service
- Endpoints发现:
Prometheus通过role: endpoints
自动发现Service关联的Endpoint,抓取后端Pod的指标。- job_name: 'kubernetes-endpoints' kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] action: keep regex: true
- Service Annotations:
在Service上设置Annotations以声明抓取规则:metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "8080"
通过Annotations实现自动化监控
- 核心Annotations:
prometheus.io/scrape
: "true"(启用抓取)prometheus.io/port
: "端口号"(指定指标端口)prometheus.io/path
: "/metrics"(自定义指标路径)
- Relabeling规则:
在Prometheus配置中使用relabel_configs
解析Annotations,动态生成抓取目标:relabel_configs: # 保留包含scrape=true注解的目标 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true # 覆盖指标路径 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] target_label: __metrics_path__ regex: (.+) # 组合地址和端口 - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] target_label: __address__ regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2
- 适用对象:
Pod、Service、Endpoints等资源均可通过Annotations实现无侵入式监控配置。