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部分組成:
-
告警規則prometheus會根據告警規則rule_files,將告警發送給Alertmanager
-
管理告警和通知模塊是 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