自动发现配置

为解决上面的问题,Prometheus Operator 为我们提供了一个额外的抓取配置的来解决这个问题,我们可以通过添加额外的配置来进行服务发现进行自动监控。和前面自定义的方式一样,我们想要在 Prometheus Operator 当中去自动发现并监控具有prometheus.io/scrape=true这个 annotations 的 Service,之前我们定义的 Prometheus 的配置如下:

  1. - job_name: kubernetes-service-endpoints
  2. kubernetes_sd_configs:
  3. - role: endpoints
  4. relabel_configs:
  5. - action: keep
  6. regex: true
  7. source_labels:
  8. - __meta_kubernetes_service_annotation_prometheus_io_scrape
  9. - action: replace
  10. regex: (https?)
  11. source_labels:
  12. - __meta_kubernetes_service_annotation_prometheus_io_scheme
  13. target_label: __scheme__
  14. - action: replace
  15. regex: (.+)
  16. source_labels:
  17. - __meta_kubernetes_service_annotation_prometheus_io_path
  18. target_label: __metrics_path__
  19. - action: replace
  20. regex: ([^:]+)(?::\d+)?;(\d+)
  21. replacement: $1:$2
  22. source_labels:
  23. - __address__
  24. - __meta_kubernetes_service_annotation_prometheus_io_port
  25. target_label: __address__
  26. - action: labelmap
  27. regex: __meta_kubernetes_service_label_(.+)
  28. - action: replace
  29. source_labels:
  30. - __meta_kubernetes_namespace
  31. target_label: kubernetes_namespace
  32. - action: replace
  33. source_labels:
  34. - __meta_kubernetes_service_name
  35. target_label: kubernetes_name
  36. - job_name: kubernetes-pods
  37. kubernetes_sd_configs:
  38. - role: pod
  39. relabel_configs:
  40. - action: keep
  41. regex: true
  42. source_labels:
  43. - __meta_kubernetes_pod_annotation_prometheus_io_scrape
  44. - action: replace
  45. regex: (.+)
  46. source_labels:
  47. - __meta_kubernetes_pod_annotation_prometheus_io_path
  48. target_label: __metrics_path__
  49. - action: replace
  50. regex: ([^:]+)(?::\d+)?;(\d+)
  51. replacement: $1:$2
  52. source_labels:
  53. - __address__
  54. - __meta_kubernetes_pod_annotation_prometheus_io_port
  55. target_label: __address__
  56. - action: labelmap
  57. regex: __meta_kubernetes_pod_label_(.+)
  58. - action: replace
  59. source_labels:
  60. - __meta_kubernetes_namespace
  61. target_label: kubernetes_namespace
  62. - action: replace
  63. source_labels:
  64. - __meta_kubernetes_pod_name
  65. target_label: kubernetes_pod_name

要想自动发现集群中的 Service,就需要我们在 Service 的annotation区域添加:prometheus.io/scrape=true的声明要想自动发现集群中的 pod,也需要我们在 pod 的annotation区域添加:prometheus.io/scrape=true的声明例如我们把之前的redis监控给修改一下,做成pod和svc,自动发现

  1. annotations:
  2. prometheus.io/scrape: "true"
  3. prometheus.io/port: "9121"

configmap实例

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. name: prometheus-config
  5. namespace: kube-system
  6. labels:
  7. kubernetes.io/cluster-service: "true"
  8. addonmanager.kubernetes.io/mode: EnsureExists
  9. data:
  10. # 存放prometheus配置文件
  11. prometheus.yml: |
  12. # 配置采集目标
  13. scrape_configs:
  14. - job_name: kubernetes-nodes
  15. static_configs:
  16. - targets:
  17. # 采集自身
  18. - 192.168.1.110:9100
  19. - 192.168.1.111:9100
  20. # 采集:Apiserver 生存指标
  21. # 创建的job name 名称为 kubernetes-apiservers
  22. - job_name: kubernetes-apiservers
  23. # 基于k8s的服务发现
  24. kubernetes_sd_configs:
  25. - role: endpoints
  26. # 使用通信标记标签
  27. relabel_configs:
  28. # 保留正则匹配标签
  29. - action: keep
  30. # 已经包含
  31. regex: default;kubernetes;https
  32. source_labels:
  33. - __meta_kubernetes_namespace
  34. - __meta_kubernetes_service_name
  35. - __meta_kubernetes_endpoint_port_name
  36. # 使用方法为https、默认http
  37. scheme: https
  38. tls_config:
  39. # promethus访问Apiserver使用认证
  40. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  41. # 跳过https认证
  42. insecure_skip_verify: true
  43. # promethus访问Apiserver使用认证
  44. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  45. # 采集:Kubelet 生存指标
  46. - job_name: kubernetes-nodes-kubelet
  47. kubernetes_sd_configs:
  48. # 发现集群中所有的Node
  49. - role: node
  50. relabel_configs:
  51. # 通过regex获取关键信息
  52. - action: labelmap
  53. regex: __meta_kubernetes_node_label_(.+)
  54. scheme: https
  55. tls_config:
  56. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  57. insecure_skip_verify: true
  58. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  59. # 采集:nodes-cadvisor 信息
  60. - job_name: kubernetes-nodes-cadvisor
  61. kubernetes_sd_configs:
  62. - role: node
  63. relabel_configs:
  64. - action: labelmap
  65. regex: __meta_kubernetes_node_label_(.+)
  66. # 重命名标签
  67. - target_label: __metrics_path__
  68. replacement: /metrics/cadvisor
  69. scheme: https
  70. tls_config:
  71. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  72. insecure_skip_verify: true
  73. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  74. # 采集:service-endpoints 信息
  75. - job_name: kubernetes-service-endpoints
  76. # 选定指标
  77. kubernetes_sd_configs:
  78. - role: endpoints
  79. relabel_configs:
  80. - action: keep
  81. regex: true
  82. # 指定源标签
  83. source_labels:
  84. - __meta_kubernetes_service_annotation_prometheus_io_scrape
  85. - action: replace
  86. regex: (https?)
  87. source_labels:
  88. - __meta_kubernetes_service_annotation_prometheus_io_scheme
  89. # 重命名标签采集
  90. target_label: __scheme__
  91. - action: replace
  92. regex: (.+)
  93. source_labels:
  94. - __meta_kubernetes_service_annotation_prometheus_io_path
  95. target_label: __metrics_path__
  96. - action: replace
  97. regex: ([^:]+)(?::\d+)?;(\d+)
  98. replacement: $1:$2
  99. source_labels:
  100. - __address__
  101. - __meta_kubernetes_service_annotation_prometheus_io_port
  102. target_label: __address__
  103. - action: labelmap
  104. regex: __meta_kubernetes_service_label_(.+)
  105. - action: replace
  106. source_labels:
  107. - __meta_kubernetes_namespace
  108. target_label: kubernetes_namespace
  109. - action: replace
  110. source_labels:
  111. - __meta_kubernetes_service_name
  112. target_label: kubernetes_name
  113. # 采集:kubernetes-services 服务指标
  114. - job_name: kubernetes-services
  115. kubernetes_sd_configs:
  116. - role: service
  117. # 黑盒探测,探测IP与端口是否可用
  118. metrics_path: /probe
  119. params:
  120. module:
  121. - http_2xx
  122. relabel_configs:
  123. - action: keep
  124. regex: true
  125. source_labels:
  126. - __meta_kubernetes_service_annotation_prometheus_io_probe
  127. - source_labels:
  128. - __address__
  129. target_label: __param_target
  130. # 使用 blackbox进行黑盒探测
  131. - replacement: blackbox
  132. target_label: __address__
  133. - source_labels:
  134. - __param_target
  135. target_label: instance
  136. - action: labelmap
  137. regex: __meta_kubernetes_service_label_(.+)
  138. - source_labels:
  139. - __meta_kubernetes_namespace
  140. target_label: kubernetes_namespace
  141. - source_labels:
  142. - __meta_kubernetes_service_name
  143. target_label: kubernetes_name
  144. # 采集: kubernetes-pods 信息
  145. - job_name: kubernetes-pods
  146. kubernetes_sd_configs:
  147. - role: pod
  148. relabel_configs:
  149. - action: keep
  150. regex: true
  151. source_labels:
  152. # 只保留采集的信息
  153. - __meta_kubernetes_pod_annotation_prometheus_io_scrape
  154. - action: replace
  155. regex: (.+)
  156. source_labels:
  157. - __meta_kubernetes_pod_annotation_prometheus_io_path
  158. target_label: __metrics_path__
  159. - action: replace
  160. regex: ([^:]+)(?::\d+)?;(\d+)
  161. replacement: $1:$2
  162. source_labels:
  163. # 采集地址
  164. - __address__
  165. # 采集端口
  166. - __meta_kubernetes_pod_annotation_prometheus_io_port
  167. target_label: __address__
  168. - action: labelmap
  169. regex: __meta_kubernetes_pod_label_(.+)
  170. - action: replace
  171. source_labels:
  172. - __meta_kubernetes_namespace
  173. target_label: kubernetes_namespace
  174. - action: replace
  175. source_labels:
  176. - __meta_kubernetes_pod_name
  177. target_label: kubernetes_pod_name
  178. alerting:
  179. # 告警配置文件
  180. alertmanagers:
  181. - kubernetes_sd_configs:
  182. # 采用动态获取
  183. - role: pod
  184. tls_config:
  185. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  186. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  187. relabel_configs:
  188. - source_labels: [__meta_kubernetes_namespace]
  189. regex: kube-system
  190. action: keep
  191. - source_labels: [__meta_kubernetes_pod_label_k8s_app]
  192. regex: alertmanager
  193. action: keep
  194. - source_labels: [__meta_kubernetes_pod_container_port_number]
  195. regex:
  196. action: drop