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


  導航:這里主要是列出一個prometheus一些系統的學習過程,最后按照章節順序查看,由於寫作該文檔經歷了不同時期,所以在文中有時出現

的雲環境不統一,但是學習具體使用方法即可,在最后的篇章,有一個完整的騰訊雲的實戰案例。

  1.什么是prometheus?

  2.Prometheus安裝

  3.Prometheus的Exporter詳解

  4.Prometheus的PromQL

  5.Prometheus告警處理

  6.Prometheus的集群與高可用

  7.Prometheus服務發現

  8.kube-state-metrics 和 metrics-server

  9.監控kubernetes集群的方式

  10.prometheus operator

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

  12.Prometheus實戰之配置匯總

  13.Grafana簡單用法

  14.Grafana SQL匯總

  15.prometheus SQL匯總

  參考:

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

  https://yunlzheng.gitbook.io/prometheus-book/part-iii-prometheus-shi-zhan/readmd/use-prometheus-monitor-kubernetes

  https://www.bookstack.cn/read/prometheus_practice/introduction-README.md

  https://www.kancloud.cn/huyipow/prometheus/521184

  https://www.qikqiak.com/k8s-book/docs/

 

  有了上述幾章的學習之后,這里將總結一下之前所有內容;正好,在我司架構中正好是多數據中心,多項目,且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的配置文件。

  這里不講解獲取數據來源工具組件等一些授權以及安裝,默認當作已安裝完成的情況,需要的去查看kube-state-metrics和metrics-server章節。

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

  當然也不能少了RBAC的授權。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  #node發現模式的授權資源,不然通過kubelet自帶的發現模式不授權這個資源,會在prometheus爆出403錯誤
  - nodes/metrics
  - nodes/proxy
  - services
  - endpoints
  - pods
  - namespaces
  verbs: ["get", "list", "watch"]
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics","/api/*"]
  verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
  namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus
  namespace: monitoring

上面的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的地址  
      - 'x.x.x.x: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:  
        - 'x.x.x.x: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: 'monitor@em.denachina.com'  
  smtp_auth_username: 'monitor@em.denachina.com'  
  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" }} zexiong.li@dena.com {{ 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: 'monitor@em.denachina.com'  
  smtp_auth_username: 'monitor@em.denachina.com'  
  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配置

  


免責聲明!

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



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