1. 程式人生 > 其它 >Prometheus實戰之聯邦+高可用+持久

Prometheus實戰之聯邦+高可用+持久

  有了上述幾章的學習之後,這裡將總結一下之前所有內容;正好,在我司架構中正好是多資料中心,多專案,且k8s環境,宿主機環境共存,這裡正好將學習的知識用在實戰中.

  以下可能不會貼出所有配置,但是會將重要的展示出來.

  基礎概念:

  高可用: 2臺彙總所有資料的prometheus 做負載均衡,這樣即使有一臺down機也不會影響任務,這2臺機器彙總所有聯邦prometheus的資料.

  持久:2臺彙總所有資料的prometheus 資料儲存在本地這樣不利於遷移和更長之間的持久,所以2臺prometheus的資料儲存至遠端資料庫.

  聯邦:簡單來說就是zabbix-proxy的概念,這些prometheus不需要去持久化資料,只要能採集資料,主prometheus需要資料時能採集到即可.

  這樣,多資料中心,多叢集,多環境就可以使用這種架構解決.

1.環境資訊

角色 部署方式 資訊 雲環境 作用
Prometheus 主(總)/alertmanager01 宿主 10.1.1.10 騰訊雲 彙總prometheus
Prometheus 備(總)/alertmanager02 宿主 10.1.1.5 騰訊雲 彙總prometheus
聯邦 Prometheus K8s K8s 阿里雲 Lcm k8s環境
聯邦 Prometheus 宿主 阿里雲內網 阿里雲 罪惡王冠遊戲
軟體對應版本
軟體名稱 軟體版本
主prometheus 2.13.1
聯邦子prometheus 2.13.1
Node-exporter 0.18.1
blackbox_exporter 0.16.0
Consul 1.6.1
Metrics-server 0.3.5
Kube-state-metrics 1.8.0

這裡我們由小變大來配置這個專案.

本章不講解任何prometsql和alert告警規則的方法,只講解叢集的配置方式。

2.子聯邦配置

2.1 K8s叢集聯邦點

  因為子聯邦節點是監控k8s叢集的,為了方便,肯定是部署在prometheus裡,下面看看deploy的配置檔案

apiVersion: v1
kind: "Service
" metadata: name: prometheus namespace: monitoring labels: name: prometheus spec: ports: - name: prometheus protocol: TCP port: 9090 targetPort: 9090 nodePort: 30946 selector: app: prometheus type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: labels: name: prometheus name: prometheus namespace: monitoring spec: replicas: 1 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: serviceAccountName: prometheus containers: - name: prometheus image: prom/prometheus:v2.3.0 env: - name: ver value: "15" command: - "/bin/prometheus" args: - "--config.file=/etc/prometheus/prometheus.yml" - "--log.level=debug" ports: - containerPort: 9090 protocol: TCP volumeMounts: - mountPath: "/etc/prometheus" name: prometheus-config volumes: - name: prometheus-config configMap: name: prometheus-config

上面的deploy掛載了一個卷,就是配置檔案,如下的配置檔案,沒有告警條目,沒有持久化儲存,因為他們不需要,只要總prometheus來向它收集資料就可以了.它也是一個prometheus,只是做的工作比較少罷了.

這個prometheus包含了以下采集任務:

  • kubernetes-kubelet
  • kubernetes-cadvisor
  • kubernetes-pods
  • kubernetes-apiservers
  • kubernetes-services
  • kubernetes-ingresses
  • kubernetes-service-endpoints

基本涵蓋了k8s 的大部分的key,所以k8s內聯邦prometheus角色需要注意這麼幾點就可以.

下面的配置檔案如下,可能(cn-lcm-prod)專案標識不太一樣,這裡可以忽略,改成自己對應的專案即可

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval:     15s 
      evaluation_interval: 15s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
     
      - job_name: 'cn-lcm-prod-kubernetes-kubelet'
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
        - role: node
       
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - target_label: __address__
          replacement: kubernetes.default.svc:443
        - source_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics 

      - job_name: 'cn-web-prod-kubernetes-cadvisor'
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
        - role: node

        relabel_configs:
        - target_label: __address__
          replacement: kubernetes.default.svc:443
        - source_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
 
      - job_name: 'cn-lcm-prod-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]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: kubernetes_pod_name


      - job_name: 'cn-lcm-prod-kubernetes-apiservers'
        kubernetes_sd_configs:
        - role: endpoints
        scheme: https
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
        - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: default;kubernetes;https
        - target_label: __address__
          replacement: kubernetes.default.svc:443

      - job_name: 'cn-lcm-prod-kubernetes-services'
        metrics_path: /probe
        params:
          module: [http_2xx]
        kubernetes_sd_configs:
        - role: service
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
          action: keep
          regex: true
        - source_labels: [__address__]
          target_label: __param_target
        - target_label: __address__
          replacement: blackbox-exporter.monitoring.svc.cluster.local:9115
        - source_labels: [__param_target]
          target_label: instance
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_service_name]
          target_label: kubernetes_name

      - job_name: 'cn-lcm-prod-kubernetes-ingresses'
        metrics_path: /probe
        params:
          module: [http_2xx]
        kubernetes_sd_configs:
        - role: ingress
        relabel_configs:
        - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
          regex: (.+);(.+);(.+)
          replacement: ${1}://${2}${3}
          target_label: __param_target
        - target_label: __address__
          replacement: blackbox-exporter.monitoring.svc.cluster.local:9115
        - source_labels: [__param_target]
          target_label: instance
        - action: labelmap
          regex: __meta_kubernetes_ingress_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_ingress_name]
          target_label: kubernetes_name

      - job_name: 'cn-lcm-prod-kubernetes-service-endpoints'  
 

        scrape_interval: 10s
        scrape_timeout:  10s
        #這個job配置不太一樣,採集時間是10秒,因為使用全域性配置的15秒,會出現拉取資料閃斷的情況,所以,這裡單獨配置成10秒

        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
prometheus-config.yaml

2.2 宿主機聯邦及consul自動發現

其實在,主prometheus端, 聯邦角色在 k8s叢集內還是叢集外,主prometheus並不關注,但是運維人員需要關注,因為在k8s叢集內和宿主機採集方式和自動發現方式都不一樣.

下面的宿主機聯邦節點也配置監控程序以及埠的方式,具體的配置解釋,翻閱前面相關章節的文件

Consul的使用這裡不再做介紹.這裡僅貼出配置。

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

scrape_configs:
  - job_name: 'cn-gc-consul-node'
    consul_sd_configs:
      - server: '127.0.0.1:8500'
        #手動填寫的方式
        #services: ['cn-gc-game02']

    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*cn-gc.*
        action: keep
      - source_labels: [__meta_consul_service_id]
        target_label: "hostname"

  - job_name: 'cn-gc-consul-process'
    consul_sd_configs:
      - server: '127.0.0.1:8500'
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*cn-gc.*
        action: keep
      - source_labels: [__meta_consul_service_id]
        target_label: "hostname"
      - source_labels: [__address__]
        regex: ((?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|2[0-4]\d|25[0-5])):(\d{1,4})
        target_label: __address__
        replacement: ${1}:9256
  
  - job_name: 'cn-gc-nginx01'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs: 
      - targets: ['10.10.3.4:80/admin#/login']
    #consul_sd_configs:
      #- server: '127.0.0.1:8500'
        #services: []
    relabel_configs:
      #- source_labels: [__meta_consul_tags]
        #regex: .*cn-gc-port.*
        #action: keep
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 10.10.3.4:9115 
      
  - job_name: 'cn-gc-nginx02'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs: 
      - targets: ['10.10.3.10:80/admin#/login']
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 10.10.3.10:9115 
      

  - job_name: 'port'
    metrics_path: /probe
    params:
      module: [tcp_connect]
    #static_configs: 
      #- targets: ['10.1.1.9:12020',]
    consul_sd_configs:
      - server: '127.0.0.1:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*cn-gc.*
        action: keep
      - source_labels: [__meta_consul_service_id]
        target_label: "hostname"
      #- source_labels: [__address__]
        #target_label: __param_target
      - source_labels: [__address__]
        #regex: ((?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|2[0-4]\d|25[0-5])):(\d{1,5})
        target_label: __param_target
        replacement: 127.0.0.1:11000
      - source_labels: [__address__]
        regex: ((?:(?:\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|2[0-4]\d|25[0-5])):(\d{1,5})
        target_label: __address__
        replacement: ${1}:9115
consul

3.主聯邦高可用

  分佈在各環境、各資料中心的prometheus已經正常執行,並且能夠採集到資料,現在需要把這些散落在各資料中心的資料彙總並展示出來.

  這裡彙總資料,規則計算,告警,全部由主prometheus來完成.

3.1 主prometheus聯邦k8s叢集配置

- job_name: "cn-lcm-prod"  
  
  scrape_interval: 30s  
  scrape_timeout: 30s  
  honor_labels: true  
#horbor_labels配置true可以確保當採集到的監控指標衝突時,能夠自動忽略衝突的監控資料。如果為false時,prometheus會自動將衝突的標籤替換為”exported_“的形式。
  #只是聯邦prometheus採集的預設介面  
  metrics_path: '/federate'  
  
  params:  
    'match[]':  
      #這一行也預設配置,經過測試,建議保留(沒有得出實際作用是什麼,但是建議還是不要取消,不會影響採集)  
       #job和name都支援正則,目前沒有對比出2個使用者的區別,官網沒有對於__name__的解釋,但是用以下辦法可以採集資料監控即可
      - '{job="prometheus"}'
    #這裡相當於其實已經匹配除了所有的job任務,這裡是一種採集方式,根據語法可以看到,匹配所有job;使用更下面的job標籤指定任務,是會讓自己的採集更加清晰一點 ,以便更好的根據標籤分類
      - '{__name__=~"job:.*"}'  
      #子聯邦prometheus 上有哪些 target項,在這裡寫出來,這裡寫指定的job,是為了讓我們的監控更加清晰一點,以便更好的標籤分類,在job=prometheus的註釋裡面提到過(可以支援正則,但是正則比較麻煩,所以放棄)  
      - '{job="cn-lcm-prod-kubernetes-kubelet"}'  
      - '{job="cn-lcm-prod-kubernetes-cadvisor"}'  
      - '{job="cn-lcm-prod-kubernetes-pods"}'  
      - '{job="cn-lcm-prod-kubernetes-apiservers"}'  
      - '{job="cn-lcm-prod-kubernetes-services"}'  
      - '{job="cn-lcm-prod-kubernetes-service-endpoints"}'  
  
  static_configs:  
    - targets:  
     #要採集的子prometheus的地址  
      - '47.96.252.25:9090'  
       #給prometheus加上一個標籤,可以通過這個標籤過濾專案
       labels:
          project: cn-lcm-prod

3.2 主聯邦宿主機配置

- job_name: "cn-gc"  
  
    scrape_interval: 2s  
    scrape_timeout: 2s  
    honor_labels: true  
    metrics_path: '/federate'  
  
    params:  
      'match[]':  
        - '{job="prometheus"}'  
        - '{__name__=~"job:.*"}'  
        - '{job="cn-gc-consul"}'  
  
    static_configs:  
      - targets:  
        - '121.40.174.93:9090'  
      labels:
          project: cn-gc

可以看出,在主prometheus上配置基本差不多,因為主prometheus去找聯邦子prometheus固定的介面去採集資料就行了.

4.持久

持久化配置更簡潔,新版直接支援http的訪問方式;這裡選擇的是influxdb,當然還可以選擇其它儲存,但是需要注意,有些儲存不支援遠端同時讀寫.

更多儲存資訊可參考官方文件連結:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write

5.告警規則

  首先要明確一點,傳送告警是alertmanager的工作,但是計算告警規則,是否需要告警,由prometheus來處理,Prometheus 將要告警的內容傳送給alertmanager,再由alertmanager把告警內容傳送給“告警介質”.

  將告警規則定義在以下路徑的資料夾,現在我這裡是一個專案一個規則檔案,這裡就用k8s的規則來做簡單講解.

6.Alertmanager

  在本專案環境中,由於採用了郵件,釘釘,webchat的告警方式,所以直接整篇配置直接講解.

  以下講解一下各告警方式的區別.

  企業微信:可以單獨給不同聯絡傳送告警,但是需要資訊多,配置麻煩

  釘釘:使用擴充套件webhook的方式,使用預設轉發器傳送的格式為預設格式,不直觀;要麼使用自定義的訊息轉發器,使用python的flask開發.

  郵件:可以自定義模版,但是建議使用預設模版

  怎麼申請企業微信,申請釘釘機器人這裡不做詳細講解.但是會講解自定義釘釘機器人怎麼使用.

  這裡還是將配置拆分,後面會專門將配置彙總展示

6.1 郵件告警以及基礎配置

[root@prometheus01 rule]# cat /opt/alertmanager/alertmanager.yml 
global:
  resolve_timeout: 5m

  smtp_smarthost: 'smtp.qiye.163.com:465'  
  smtp_from: '[email protected]'  
  smtp_auth_username: '[email protected]'  
  smtp_auth_password: '3tkvGD8G4giGmAu'  
  smtp_require_tls: false  


templates:
-  "/opt/alertmanager/templates/*.tmpl"

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1m
  receiver: 'cn-web-prod'
receivers:
- name: 'cn-web-prod'
  email_configs:
  - to: '{{ template "lizexiongmail" }}'
    send_resolved: true
    #html: '{{ template "email.html" .}}'
    headers: { Subject: "{{  .CommonAnnotations.summary }}" }  

郵件告警沒什麼好說的,見以下結果

6.2 釘釘告警

  這裡用的自定義的,前面章節也講解過,這裡不做過多解釋。

  以下兩種方式都可以,不強求:

webhook_configs:
  - url: "http://10.10.1.16:8060/dingtalk/ops_dingding/send"
send_resolved: true

#自定義python指令碼
  webhook_configs:
  - url: "http://10.10.1.16:5000"
    send_resolved: true

6.3 微信告警

實戰案例中沒有使用企業微信,但是前面的alertmanager章節也有講解

6.4 自定義郵件模版

  在之前單獨講解alertmanager的章節已經講解過了模版,但是可能有人不太理解,這裡重新做一個簡單的演示,這裡的模版簡單來說就是自己定義變數或者引用已有的預設變數,在alertmanager中引用即可。根據自己實際情況使用。

  首先編寫模版規則

[root@prometheus01 templates]# vim email.tmpl 
[root@prometheus01 templates]# pwd
/opt/alertmanager/templates
[root@prometheus01 templates]# cat email.tmpl 
{{ define "lizexiongmail" }} [email protected] {{ end }}
{{ define "email.html" }}
<table border="5">
    <tr><td>報警項</td>
        <td>磁碟</td>
        <td>報警閥值</td>
        <td>開始時間</td>
    </tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td>
            <td>{{ index $alert.Labels "instance" }}</td>
            <td>{{ index $alert.Labels "value" }}</td>
            <td>{{ $alert.StartsAt }}</td>
        </tr>
    {{ end }}
</table>
{{ end }}

  上面定義了lizexiongmail這個模版變數還有一個email.html模版變數,可以看到email.html模版變數是一個郵件傳送的模版,這裡支援html和text格式,這裡為了顯示好看,採用html格式簡單顯示資訊。

  演示時會用到模版變數,真是環境會取消模版變數這2個配置,因為本人還是比較喜歡預設的告警模版。

  簡單看看alertmanager使用模版的配置檔案

[root@prometheus01 rule]# cat /opt/alertmanager/alertmanager.yml 
global:
  resolve_timeout: 5m

  smtp_smarthost: 'smtp.qiye.163.com:465'  
  smtp_from: '[email protected]'  
  smtp_auth_username: '[email protected]'  
  smtp_auth_password: '3tkvGD8G4giGmAu'  
  smtp_require_tls: false  


templates:
-  "/opt/alertmanager/templates/*.tmpl"

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1m
  receiver: 'cn-web-prod'
receivers:
- name: 'cn-web-prod'
  email_configs:
  - to: '{{ template "lizexiongmail" }}'
    send_resolved: true
    html: '{{ template "email.html" .}}'
    headers: { Subject: "{{  .CommonAnnotations.summary }}" }  

  可以看到收件人郵箱使用了模版變數,告警郵件模版使用了模版變數。

  由於模版變數的值沒有定義好,所以有些資料是空白,如果有興趣,可以自己定義比預設模版更強大更豐富的告警資訊,但是這裡本人需求足夠還是喜歡用預設模版。

  當然模版也有官方給的一些定義好的,可以參考官方git連結:https://github.com/prometheus/alertmanager/blob/master/template/default.tmpl

7 程式管理

  因為在聯邦總prometheus的伺服器,不管是alertmanager,proemethues,dingding轉換器,都是負載均衡模式的,所以這裡使用supervisord管理。當然,配置就alertmanager叢集配置不太一樣。

7.1 主prometheus supervisorod配置

[root@prometheus01 infra]# cat /etc/supervisord.d/prometheus.ini  
[program:prometheus]  
command=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data/ --storage.tsdb.retention.time=30d --query.max-samples=5000000 --query.max-concurrency=10  --web.enable-lifecycle  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
eillasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/prometheus.log  
  
[program:alertmanager]  
command=/opt/alertmanager/alertmanager  --web.listen-address="10.10.1.10:9093" --cluster.listen-address="10.10.1.10:8001" --config.file=/opt/alertmanager/alertmanager.yml --web.external-url='http://alertmanager.mobage.cn:9093/' --log.level=debug  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/alertmanager.log  
  
[program:node_exporter]  
command= /opt/node_exporter/node_exporter  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/node-exporter.log  
  
[program:dingtalk]  
command= python3 /opt/dingding.py  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/dingtalk.log  
主prometheus supervisorod配置

7.2 備prometheus supervisorod配置

[root@prometheus02 infra]# cat /etc/supervisord.d/prometheus.ini  
[program:prometheus]  
command=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data/ --storage.tsdb.retention.time=30d --query.max-samples=5000000 --query.max-concurrency=10  --web.enable-lifecycle  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/prometheus.log  
  
[program:alertmanager]  
command=/opt/alertmanager/alertmanager --web.listen-address="10.10.1.5:9093" --cluster.listen-address="10.10.1.5:8001" --cluster.peer="10.10.1.10:8001"  --config.file=/opt/alertmanager/alertmanager.yml --web.external-url='http://alertmanager.mobage.cn:9093/'  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/alertmanager.log  
  
[program:node_exporter]  
command= /opt/node_exporter/node_exporter  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/node-exporter.log  
  
[program:dingtalk]  
command= python3 /opt/dingding.py  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/dingtalk.log  
備prometheus supervisorod配置

7.3 宿主機聯邦子prometheus supervisord配置

[root@cn-gc-monitoring-proxy ~]# cat /etc/supervisord.d/*  
[program:consul]  
#在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個叢集,該標記不能和bootstrap公用(推薦使用的方式)  
command=consul agent -server -ui -bootstrap-expect 1 -data-dir=/opt/consul/data/  -config-dir=/opt/consul/config/  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/consul.log  
[program:prometheus]  
command=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data/  --web.enable-lifecycle  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/prometheus.log  
  
[program:blackbox_exporter]  
command=/opt/blackbox_exporter/blackbox_exporter --config.file=/opt/blackbox_exporter/blackbox.yml  
autostart=true  
autorestart=true  
startsecs=5  
priority=1  
stopasgroup=true  
killasgroup=true  
redirect_stderr         = true  
stdout_logfile_maxbytes = 50MB  
stdout_logfile=/var/log/supervisor/blackbox_exporter.log  
宿主機聯邦子prometheus supervisord配置

作者:小家電維修

相見有時,後會無期。