«

【Prometheus】prometheus监控pod资源,ingress,service资源以及如何通过annotations实现自动化监控

俞事 发布于 阅读:248


监控Pod资源

  1. Exporter部署
    Pod需暴露metrics端点(如/metrics),通过Sidecar模式或应用内置的Exporter(如node-exporter)提供数据。
  2. 服务发现配置
    在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
  3. Annotations示例
    在Pod模板中添加Annotations以触发自动监控:
    annotations:
     prometheus.io/scrape: "true"
     prometheus.io/port: "8080"
     prometheus.io/path: "/metrics"
  4. 容器资源指标
    • 使用cAdvisor(集成在Kubelet中)收集CPU、内存、磁盘等容器级指标,通过metrics_path: /metrics/cadvisor抓取。
    • 使用kube-state-metrics监控Pod状态(如重启次数、资源请求/限制)。

监控Ingress

  1. Ingress Controller Metrics
    Nginx、Traefik等Ingress Controller默认暴露指标(如请求数、延迟)。例如,Nginx Ingress的Service需配置:
    kind: Service
    metadata:
     annotations:
       prometheus.io/scrape: "true"
       prometheus.io/port: "10254"
  2. 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

  1. 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
  2. Service Annotations
    在Service上设置Annotations以声明抓取规则:
    metadata:
     annotations:
       prometheus.io/scrape: "true"
       prometheus.io/port: "8080"

通过Annotations实现自动化监控

  1. 核心Annotations
    • prometheus.io/scrape: "true"(启用抓取)
    • prometheus.io/port: "端口号"(指定指标端口)
    • prometheus.io/path: "/metrics"(自定义指标路径)
  2. 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
  3. 适用对象
    Pod、Service、Endpoints等资源均可通过Annotations实现无侵入式监控配置。

取消
微信二维码
微信二维码
支付宝二维码