通用方式:

        prometheus提供了 kubernetes_sd_config 自动发现功能,可以抓取kubernetes集群内的各种metrics指标,node、service、pod、endpoints、ingress官方文档如下:

https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

一、在prometheus中添加如下配置:如果安装的是prometheus-operator或其他集成好的插件下面的配置默认是有的。

- job_name: kubernetes-pods
  scrape_interval: 1m
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  kubernetes_sd_configs:
  - api_server: null
    role: pod
    namespaces:
      names: []
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    separator: ;
    regex: "true"
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
    separator: ;
    regex: (.+)
    target_label: __metrics_path__
    replacement: $1
    action: replace
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    separator: ;
    regex: ([^:]+)(?::\d+)?;(\d+)
    target_label: __address__
    replacement: $1:$2
    action: replace
  - separator: ;
    regex: __meta_kubernetes_pod_label_(.+)
    replacement: $1
    action: labelmap
  - source_labels: [__meta_kubernetes_namespace]
    separator: ;
    regex: (.*)
    target_label: kubernetes_namespace
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_pod_name]
    separator: ;
    regex: (.*)
    target_label: kubernetes_pod_name
    replacement: $1
    action: replace

二、自动发现规则配置好后如何让prometheus抓取pod内的metrics指标呢,抓取的路径端口等信息如何指定呢,这就要在deployments中的spec.template.metadata.annotations中指定了。示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test
  name: test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      annotations:
        prometheus.io/path: /metrics # 定义路径
        prometheus.io/port: "80" # 定义端口
        prometheus.io/scheme: http # 使用的协议
        prometheus.io/scrape: "true" # 是否抓取
      labels:
        app: test
    spec:
      containers:
      - image: zhuqiyang/php7.2:0.2
        imagePullPolicy: IfNotPresent
        name: test

        定义好后prometheus即可抓取pod内的metrics指标数据了,在prometheus的targets页面即可看到job名称为 kubernetes-pods的target。


springboot开发的java应用:

        可使用 eureka_sd_config 自动发现抓取pod的metrics指标,可以使用如下prometheus的配置来获取指标数据。

    - job_name: 'kubernetes-pods-eureka'
      metrics_path: /actuator/prometheus
      basic_auth:
        username: 'user'
        password: '123456'
      eureka_sd_configs:
      - server: 'http://eureka.default.svc.cluster.local/eureka'
      relabel_configs:
      - source_labels:
        - __meta_eureka_app_name
        separator: ;
        regex: (.*)
        target_label: appname
        replacement: $1
        action: replace
      - action: labelmap
        regex: __meta_eureka_app_instance_(.+)
      - regex: metadata_user_(.+)
        action: labeldrop

配置好后即可在targets页面看到target。