主要是采用prometues通过service的annotations动态endpoints采集采集后端pod数据
环境 :
- prometheus安装在K8S
- 应用暴露了一个/metrics接口来暴露应用内业务数据
说明:
- 其实K8S 下prometheus自带了K8S动态采集信息
- 如endpoints方式采集获取对应pods数据,如下
- job_name: 'kubernetes-service-endpoints' kubernetes_sd_configs: - role: endpoints 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: (.+) - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] action: replace target_label: __address__ regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 - action: labelmap regex: __meta_kubernetes_service_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_service_name] action: replace target_label: kubernetes_name
- 所以为了将pod的数据暴露K8S,我们只需要增加一个service(也可以用原来的)
apiVersion: v1 kind: Service metadata: name: admin-prometheus-svc namespace: soe annotations: # 在metadata下增加annotations prometheus.io/scrape: 'true' # 开启K8s动态监测后端pod数据 prometheus.io/path: '/metrics' #pod暴露的/metrics接口地址 prometheus.io/port: '9163' #pod暴露的采集数据端口 spec: ports: - port: 80 targetPort: 17501 name: worker - port: 9163 targetPort: 9163 name: prometheusport selector: app: admin
注意:
- prometheus.io/xxx : 后面的值一定要有引号,不然没效果
参考:
评论区