【2020.07.06】kube-prometheus中如何添加新scrape api?


上一篇博客中,有說到用kube-prometheus安裝prometheus全家桶,用來監控,其中演示了如何通過配置文件的形式來添加,它有點不好的地方,就要修改,可能還需要重啟,不是自動的,不是特別方便。


下面介紹一個它自動服務發現的方式:

prometheus-operator

自動發現scrape api主要得力於prometheus-operator這個項目,這個項目是方便管理prometheus在k8s集群中的自定義資源、配置、監控對象等,十分的方便。

image

其中,自定義資源ServiceMonitor它就能自動的獲取到符合要求的metrics指標

自定義ServiceMonitor實現metrics指標自動獲取(場景1)

  • 此方法適用於,你暴露metrics的service的namespacemonitoring下的
  • service中,添加annotations

    1. image
    2. 上面2個key,就是約定的,必須要有的,這樣才能自動探測到,注意port要和service保持 一致
  • 新增servicemonitor定義

    • image
  • 驗證

    • image
    • 至此就自動發現了,成功!
  • 附上完整文件
    •   1 apiVersion: apps/v1
        2 kind: Deployment
        3 metadata:
        4   name: rabbitmq-exporter-auto
        5   namespace: monitoring
        6   labels:
        7     app: rabbitmq-exporter-auto
        8     author: jamestao
        9 spec:
       10   replicas: 1
       11   selector:
       12     matchLabels:
       13       app: rabbitmqpod-auto
       14   template:
       15     metadata:
       16       name: rabbitmq-exporter-pod-auto
       17       labels:
       18         app: rabbitmqpod-auto
       19     spec:
       20       restartPolicy: Always
       21       containers:
       22         - name: rabbitmq-exporter-container-auto
       23           image: kbudde/rabbitmq-exporter:latest
       24           resources:
       25             requests:
       26               memory: 10Mi
       27           ports:
       28             - containerPort: 9419
       29           env:
       30             - name: RABBIT_URL
       31               value: http://192.168.26.91:15672
       32             - name: RABBIT_USER
       33               value: james
       34             - name: RABBIT_PASSWORD
       35               value: "666666"
       36             - name: INCLUDE_VHOST
       37               value: ".*"
       38             - name: INCLUDE_QUEUES
       39               value: ".*"
       40 ---
       41 apiVersion: v1
       42 kind: Service
       43 metadata:
       44   name: svc-rabbitmq-management-auto
       45   labels:
       46     app: rabbitmq-exporter-svc-auto
       47   namespace: monitoring
       48   annotations:
       49     prometheus.io/port: "39418"
       50     prometheus.io/scrape: "true"
       51 spec:
       52   selector:
       53     app: rabbitmqpod-auto
       54   ports:
       55     - protocol: TCP
       56       port: 39418
       57       targetPort: 9419
       58       name: metrics
       59 ---
       60 apiVersion: monitoring.coreos.com/v1
       61 kind: ServiceMonitor
       62 metadata:
       63   name: taozhiqiang
       64   namespace: monitoring
       65 spec:
       66   endpoints:
       67   - interval: 15s
       68     port: metrics
       69   namespaceSelector:
       70     matchNames:
       71     - monitoring
       72   selector:
       73     matchLabels:
       74       app: rabbitmq-exporter-svc-auto
      rabbitmq_exporter_auto.yaml

自定義ServiceMonitor實現metrics指標自動獲取(場景2)

  • 此方法適用於,你暴露metrics的service的namespace不在monitoring下(kube-prometheus它默認安裝在monitoring),不在monitoring下的server想要被prometheus-operator所探測到,需要創建sa權限綁定。
  • 主要需要新增這2節:image
  • 附上完整文件:
      1 apiVersion: apps/v1
      2 kind: Deployment
      3 metadata:
      4   name: rabbitmq-exporter-auto
      5   namespace: bookstore
      6   labels:
      7     app: rabbitmq-exporter-auto
      8     author: jamestao
      9 spec:
     10   replicas: 1
     11   selector:
     12     matchLabels:
     13       app: rabbitmqpod-auto
     14   template:
     15     metadata:
     16       name: rabbitmq-exporter-pod-auto
     17       labels:
     18         app: rabbitmqpod-auto
     19     spec:
     20       restartPolicy: Always
     21       containers:
     22         - name: rabbitmq-exporter-container-auto
     23           image: kbudde/rabbitmq-exporter:latest
     24           resources:
     25             requests:
     26               memory: 10Mi
     27           ports:
     28             - containerPort: 9419
     29           env:
     30             - name: RABBIT_URL
     31               value: http://192.168.26.91:15672
     32             - name: RABBIT_USER
     33               value: james
     34             - name: RABBIT_PASSWORD
     35               value: "666666"
     36             - name: INCLUDE_VHOST
     37               value: ".*"
     38             - name: INCLUDE_QUEUES
     39               value: ".*"
     40 ---
     41 apiVersion: v1
     42 kind: Service
     43 metadata:
     44   name: svc-rabbitmq-management-auto
     45   labels:
     46     app: rabbitmq-exporter-svc-auto
     47   namespace: bookstore
     48   annotations:
     49     prometheus.io/port: "39418"
     50     prometheus.io/scrape: "true"
     51 spec:
     52   selector:
     53     app: rabbitmqpod-auto
     54   ports:
     55     - protocol: TCP
     56       port: 39418
     57       targetPort: 9419
     58       name: metrics
     59 ---
     60 apiVersion: monitoring.coreos.com/v1
     61 kind: ServiceMonitor
     62 metadata:
     63   name: taozhiqiang-auto
     64   namespace: monitoring
     65 spec:
     66   endpoints:
     67   - interval: 15s
     68     port: metrics
     69   namespaceSelector:
     70     matchNames:
     71     - bookstore
     72   selector:
     73     matchLabels:
     74       app: rabbitmq-exporter-svc-auto
     75 ---
     76 apiVersion: rbac.authorization.k8s.io/v1
     77 kind: RoleList
     78 items:
     79 - apiVersion: rbac.authorization.k8s.io/v1
     80   kind: Role
     81   metadata:
     82     name: prometheus-k8s-rabbitmq
     83     namespace: bookstore
     84   rules:
     85   - apiGroups:
     86     - ""
     87     resources:
     88     - services
     89     - endpoints
     90     - pods
     91     verbs:
     92     - get
     93     - list
     94     - watch
     95 ---
     96 apiVersion: rbac.authorization.k8s.io/v1
     97 kind: RoleBindingList
     98 items:
     99 - apiVersion: rbac.authorization.k8s.io/v1
    100   kind: RoleBinding
    101   metadata:
    102     name: prometheus-k8s-rabbitmq
    103     namespace: bookstore
    104   roleRef:
    105     apiGroup: rbac.authorization.k8s.io
    106     kind: Role
    107     name: prometheus-k8s-rabbitmq
    108   subjects:
    109   - kind: ServiceAccount
    110     name: prometheus-k8s
    111     namespace: monitoring
    rabbitmq_exporter_auto_out_monitoring.yaml

2種場景請仔細閱讀文件信息,對比下差異,就好理解了。

ServiceMonitor機制圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM