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_nameprometheus-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}:9115consul
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配置
作者:小家電維修
相見有時,後會無期。