Prometheus監控docker容器


Prometheus監控docker容器

監控服務器 需要安裝4個服務

  • Prometheus Server(普羅米修斯監控主服務器 )
  • Node Exporter (收集Host硬件和操作系統信息)
  • cAdvisor (負責收集Host上運行的容器信息)
  • Grafana (展示普羅米修斯監控界面)

被監控的只有安裝2個

  • Node Exporter (收集Host硬件和操作系統信息)
  • cAdvisor (負責收集Host上運行的容器信息)
 

1.安裝Node Exporter 來收集硬件信息

所有節點運行以下命令安裝Node Exporter 容器
docker run -d -p 59100:9100 \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
-v "/etc/localtime:/etc/localtime" \
--name=node-exporter \
prom/node-exporter

 

2.安裝cAdvisor 來收集容器信息 

所有節點運行以下命令來安裝cAdvisor

docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=58080:8080 \
--detach=true \
--name=cadvisor \
-v "/etc/localtime:/etc/localtime" \
google/cadvisor:latest

 

3.安裝普羅米修斯服務

首先在本地創建prometheus.yml這是普羅米修斯的配置文件

將下方內容寫入到文件中,將監聽的地址改為自己本機地址
mkdir -p /data/prometheus
vim /data/prometheus/prometheus.yml
# 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_timeout is set to the global default (10s).


# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093


# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"


# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'


    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.


    static_configs:
    #監聽的地址
    - targets: ['localhost:59090','localhost:59100']


  - job_name: 'dev-base1'
    static_configs:
    - targets: ['xxx.xxx.xxx.xxx:58080','xxx.xxx.xxx.xxx:59100']


  - job_name: 'dev-base2'
    static_configs:
    - targets: ['xxx.xxx.xxx.xxx:58080','xxx.xxx.xxx.xxx:59100']

當Prometheus容器啟動成功后訪問http://localhost:59090

 

 4.在DockerMachine上運行Grafana

docker run -d -i -p 53000:3000 \
-v "/etc/localtime:/etc/localtime" \
-e "GF_SERVER_ROOT_URL=http://grafana.dev.abc.com" \
-e "GF_SECURITY_ADMIN_PASSWORD=123456" \
grafana/grafana

Grafana啟動后,在瀏覽器中打開http://localhost:53000/登錄界面,登錄用admin 密碼為剛創建Grafana時的123456

 

Grafana使用

 

一、添加普羅米修斯服務器,重點看框部分,其它默認即可

如果一切順利該DataSource可以正常工作了,也就是說Grafana可以正常跟Prometheus正常通信了,接下來通過dashboard展示數據。
自己手工創建dashboard有點困難,可以借助開元的力量訪問 監控模板地址 將會看到很多用於監控 Docker 的 Dashboard。監控模板地址(多種監控模板根據自己需求下載不同的模板)
 

二、使用第三方儀表盤監控實現

注:需提前添加好數據源。
1.點擊左上角的加號,點擊import
在線模式
 
 
 
 
 

三、效果展示

 

 

 

 

四、配置報警

 
我們已經能夠對收集的數據,通過grafana展示出來了,能查看數據。想一想,系統還缺失什么功能?
監控最重要的目的是什么?
  • 第一:監控系統是否正常
  • 第二:系統不正常時,可以告知相關人員及時的排查和解除問題,這就是 告警通知

 

所以,還缺一個告警通知的模塊。
prometheus的告警機制由2部分組成:

 

  1. 告警規則
    prometheus會根據告警規則rule_files,將告警發送給Alertmanager
  2. 管理告警和通知
    模塊是 Alertmanager。它負責管理告警,去除重復的數據,告警通知。通知方式有很多如Email、HipChat、Slack、WebHook等等。

配置#

1.告警規則配置#

告警文檔地址: 告警規則官方文檔
我們新創建一個規則文件:alert_rules.yml,把它和prometheus.yml放在一起,官方有一個模板 Templating,直接copy過來:
groups:
- name: example
  rules:
 
 
  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
 
 
  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

 

上面規則文件大意:就是創建了2條alert規則 alert: InstanceDown 和 alert: APIHighRequestLatency :
  • InstanceDown 就是實例宕機(up==0)觸發告警,5分鍾后告警(for: 5m);
  • APIHighRequestLatency 表示有一半的 API 請求延遲大於 1s 時(api_http_request_latencies_second{quantile="0.5"} > 1)觸發告警
更多rules規則說明,請看 這里 recording_rules
然后把alrt_rules.yml添加到prometheus.yml 里:
我們要把alert_rules.yml規則映射到docker里:
先用docker ps查看prometheus容器ID, CONTAINER ID: ac99a89d2db6, 停掉容器 docker stop ac99,然后刪掉這個容器 docker rm ac99。
重新啟動容器:
 
docker run -d -p 59090:9090 \
-v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v "/etc/localtime:/etc/localtime" \
-v /data/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml \
--name prometheus \
prom/prometheus

啟動時主要添加這個參數:-v /data/prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml

然后在瀏覽器上查看,rules是否添加成功,在瀏覽器上輸入地址  http://localhost:59090/rules
  

 

 

 
也可以查看alers情況,點擊菜單 Alerts:
 
 
 
  
docker run -d -p 59093:9093 --name Alertmanager -v /data/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml docker.io/prom/alertmanager:latest
[root@devmaster2 prometheus]# cat alertmanager.yml
 
global:
  resolve_timeout: 5m
  smtp_smarthost: 'smtp.sina.com:465'
  smtp_from: '1916989848@qq.com'
  smtp_auth_username: 'user_sunli@sina.com'
  smtp_auth_password: 'xxxxxxxxxxxx'
  smtp_require_tls: false
 
route:
  receiver: team-test-mails
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 2m
 
 
receivers:
  - name: 'team-test-mails'
    email_configs:
    - to: 'sunli@bdszh.vip'
      send_resolved: true

 

 
 
 
 
 

 


免責聲明!

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



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