docker容器部署Prometheus服務——雲平臺監控利器

Prometheus是一個系統和服務監視系統。它以給定的時間間隔從已配置的目標收集指標,評估規則表達式,顯示結果,並在發現某些狀況爲真時觸發警報。html

與其餘監視系統相比,Prometheus的主要區別特徵是:node

  • 一個多維數據模型(時間序列由指標名稱定義和設置鍵/值尺寸)
  • 一個靈活的查詢語言來利用這一維度
  • 不依賴於分佈式存儲;單服務器節點是自治的
  • 時間序列收集經過HTTP 上的拉模型進行
  • 經過中間網關支持推送時間序列
  • 經過服務發現或靜態配置發現目標
  • 多種圖形和儀表板支持模式
  • 支持分層和水平聯合

其官方給出的架構示意圖:
docker容器部署Prometheus服務——雲平臺監控利器
部署該服務,包括四個組件:Prometheus Server、Node Exporter、cAdvrisor、Grafana。git

各個組件的做用以下:github

  • Prometheus Server:Prometheus服務的主服務器 ;
  • Node Exporter:收集Host硬件和操做系統的信息;
  • cAdvrisor:負責收集Host上運行的容器信息;
  • Grafana:用來展現Prometheus監控操做界面(給咱們提供一個友好的web界面)

以上四個組件的全部介紹,可到Github官網,直接搜索相應的docker鏡像名稱(在下面的部署過程當中,每運行一個服務的容器,都會指定其鏡像名稱,能夠參考命令中的鏡像名稱進行搜索),便可找到到關於組件的詳細介紹。
1、環境準備web

主機名 IP 運行服務
docker01 192.168.171.151 Prometheus Server、Node Exporter、cAdvrisor、Grafana
docker02 192.168.171.150 cAdvrisor、Node Exporter
docker03 192.168.171.152 cAdvrisor、Node Exporter

2、開始配置
一、運行Node Server容器
該組件須要運行在全部須要監控的主機上,也就是,我這裏三臺服務器都須要執行下面的命令,運行此容器組件docker

[root@docker01 ~]# docker run -d -p 9100:9100 -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host --restart=always prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
#基於「prom/node-exporter」鏡像運行容器,能夠去github官網搜索該鏡像,以便了解其主要功能
#注:每臺須要被監控的主機都須要執行上述命令以便運行容器,以便收集主機信息

每臺服務器運行上述命令後,瀏覽器訪問docker服務器的IP地址+9100端口,可以看到如下界面,即說明容器運行沒有問題。這些內容看不懂不要緊,這些信息原本就不是給咱們看的,咱們看的是最後給咱們提供的web界面。看到的網頁以下:
docker容器部署Prometheus服務——雲平臺監控利器
最好訪問一下全部運行上述容器的服務器的9100端口,確保能夠看到上面的頁面
二、運行cAdvisor容器
cAdvrisor是負責收集Host上運行的容器信息的,一樣,在全部須要監控的服務器上執行下面的命令運行cAdvisor容器便可:json

[root@docker01 ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor

每臺服務器運行上述命令後,瀏覽器訪問服務器的IP地址+8080端口,便可看到以下頁面:
docker容器部署Prometheus服務——雲平臺監控利器vim

三、docker01上運行Prometheus server容器
Prometheus Server是主服務器,因此只須要在其中一臺運行此容器便可。這裏我在docker01服務器上運行瀏覽器

[root@docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
#先基於prom/prometheus鏡像隨便運行一個容器,咱們須要將其主配置文件複製一份進行更改
[root@docker01 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml /root/
#複製prometheus容器中的主配置文件到宿主機本地
[root@docker01 ~]# docker rm -f prometheus 
[root@docker01 ~]# vim prometheus.yml 
#找到以下行並修改
    - targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.171.150:9100','192.168.171.150:8080','192.168.171.152:9100','192.168.171.152:8080']
#上述內容看似雜亂無章,其實無非就是指定了本機的9090、8080、9100這三個端口,
#還增長了另外兩臺被監控的服務器的8080端口和9100端口
#若須要監控更多的服務器,只需依次在上面指定添加便可,固然了,被監控端須要運行前面的兩個容器
[root@docker01 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus
#執行上述命令,運行新的prometheus容器,並將剛剛修改的主配置文件掛載到容器中的指定位置
#之後若要修改主配置文件,則直接修改本地的便可。
#掛載主配置文件後,本地的和容器內的至關於同一份,在本地修改內容的話,會同步到容器中

客戶端訪問docker01的9090端口,會看到如下頁面
docker容器部署Prometheus服務——雲平臺監控利器
而後單擊上方的「status」--->而後點擊「Targets」
docker容器部署Prometheus服務——雲平臺監控利器
看到下面的頁面,則表示至此的全部操做都沒有問題
docker容器部署Prometheus服務——雲平臺監控利器
四、docker01上運行grafana容器服務器

[root@docker01 ~]# mkdir grafana-storage
[root@docker01 ~]# chmod 777 -R grafana-storage/
[root@docker01 ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
#上述命令中的「-e」選項是爲了設置默認的登陸用戶admin,密碼爲「123.com」。
#若是啓動容器的過程當中,提示iptables等相關的錯誤信息,
#則須要執行命令systemctl restart docker,重啓docker服務,而後從新運行容器
#可是須要注意,若運行容器時沒有增長「--restart=always」選項的話,
#那麼在重啓docker服務後,還需將全部容器手動重啓。
#重啓全部容器命令「docker ps -a -q | xargs docker start」

容器運行後,便可使用客戶端訪問docker01IP地址+3000端口,能夠看到如下頁面
docker容器部署Prometheus服務——雲平臺監控利器
在上面的登陸頁面,輸入用戶名「admin」,密碼就是咱們運行時指定的密碼,我這裏是「123.com」。輸入後登陸,會看到如下界面,而後單擊添加數據源:
docker容器部署Prometheus服務——雲平臺監控利器
docker容器部署Prometheus服務——雲平臺監控利器
根據下圖給的提示進行修改配置
docker容器部署Prometheus服務——雲平臺監控利器
上述配置完成後,咱們就須要配置它以什麼樣的形式來給咱們展現了,能夠自定義,可是很麻煩,也選擇直接去grafana官網尋找現成的模板。
登陸grafana官網,點擊下面的選項
docker容器部署Prometheus服務——雲平臺監控利器
看圖
docker容器部署Prometheus服務——雲平臺監控利器
將這些模板導入到咱們grafana的web界面有兩種方式

方式1:
1)進入模板後,點擊「Download JSON」,以便下載
docker容器部署Prometheus服務——雲平臺監控利器
2)下載後,回到grafana界面,點擊以下
docker容器部署Prometheus服務——雲平臺監控利器
3)單擊「Upload.json file」,而後上傳咱們在grafana官網下載的模板
docker容器部署Prometheus服務——雲平臺監控利器
4)上傳後,請看下圖進行操做
docker容器部署Prometheus服務——雲平臺監控利器
5)至此,便可看到下面的監控頁面,說明導入成功了
docker容器部署Prometheus服務——雲平臺監控利器
可是注意看的話,會發現這個模板有些信息都檢測不到,因此這裏只是爲了展現這第一種導入模板的方式,第二種方式比較推薦
方式2
1)在進入官網提供的模板後,咱們須要記錄其ID號,以下
docker容器部署Prometheus服務——雲平臺監控利器
2)而後回到grafana的web界面,一樣點擊以下,進行導入操做
docker容器部署Prometheus服務——雲平臺監控利器
3)在下面的紅框中輸入咱們記錄的ID號便可
docker容器部署Prometheus服務——雲平臺監控利器
4)接下來的操做和方式1中的同樣
docker容器部署Prometheus服務——雲平臺監控利器
5)導入此模板後,會看到該模板給咱們提供的界面
docker容器部署Prometheus服務——雲平臺監控利器
至此,web界面的監控就部署完成了
五、設置Prometheus告警
Prometheus的告警方式有好幾種方式,郵箱、釘釘、微信等,我這裏選擇郵箱的告警方式
1)docker01服務器上運行alertmanager容器

[root@docker01 ~]# docker run --name alertmanager -d -p 9093:9093 prom/alertmanager            # 先簡單運行一個容器
[root@docker01 ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root           # 將容器中的配置文件複製到本地
[root@docker01 ~]# docker rm -f alertmanager           # 而後卸磨殺驢,把他給刪
[root@docker01 ~]# vim alertmanager.yml 
#配置文件中能夠分爲如下幾組:
#global:全局配置。設置報警策略,報警渠道等;
#route:分發策略;
#receivers:接收者,指定誰來接收你發送的這些信息;
#inhibit_rules:抑制策略。當存在於另外一組匹配的警報,抑制規則將禁用於一組匹配的警報

#將如下全部的郵箱帳號及auth_password更改成本身的帳戶便可
global:
  resolve_timeout: 5m
  smtp_from: '848369866@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '848369866@qq.com'
  smtp_auth_password: 'zorghltycnxqbfhf'
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '848369866@qq.com'
    send_resolved: true                   # 這行的做用是,當容器恢復正常後,也會發送一份郵件
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
[root@docker01 ~]# docker run -d --name alertmanger -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml --restart=always prom/alertmanager
#運行新的alertmanager容器,並掛載更改後的配置文件
#若是配置文件有錯誤,那麼這個容器是運行不了的。

2)設置alertmanager報警規則

[root@docker01 ~]# mkdir -p prometheus/rules
[root@docker01 ~]# cd prometheus/rules/
[root@docker01 rules]# vim node-up.rules
groups:
- name: node-up     #設置報警的名稱
  rules:
  - alert: node-up
    expr: up{job="prometheus"} == 0      #該job必須和Prometheus的配置文件中job_name徹底一致
    for: 15s
    labels:
      severity: 1           #一級警告
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已中止運行超過 15s!
"

若想本身編寫報警規則,能夠參考它的官方文檔,我這裏的報警規則是不太準確有些問題的,可是能夠湊活收到它的報警信息
3)關聯到Prometheus

[root@docker01 ~]# vim prometheus.yml 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - 192.168.171.151:9093                    # 改成alertmanager容器的IP+端口
rule_files:
  - "/usr/local/prometheus/rules/*.rules"
#必須格外注意配置文件的格式,注意縮進
[root@docker01 ~]# docker rm -f prometheus 
prometheus
[root@docker01 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
#從新運行此容器,掛載新的文件
[root@docker01 ~]# docker logs prometheus             # 若啓動遇到錯誤,能夠查看容器的日誌拍錯

至此,若是Prometheus頁面中的target有down掉的容器,那麼就會給你的郵箱發送報警信息。當容器正常後,它還會給你反饋

docker容器部署Prometheus服務——雲平臺監控利器
我收到的報警郵件以下
docker容器部署Prometheus服務——雲平臺監控利器
4)設置報警信息模板

[root@docker01 ~]# cd prometheus/
[root@docker01 prometheus]# mkdir alertmanager-tmpl
[root@docker01 prometheus]# cd alertmanager-tmpl/
[root@docker01 alertmanager-tmpl]# vim email.tmpl
{{ define "email.from" }}848369866@qq.com{{ end }}            # 將此改成本身的郵箱
{{ define "email.to" }}848369866@qq.com{{ end }}      # 將此改成本身的郵箱
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警級別: {{ .Labels.severity }} 級<br>
告警類型: {{ .Labels.alertname }}<br>
故障主機: {{ .Labels.instance }}<br>
告警主題: {{ .Annotations.summary }}<br>
觸發時間: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
[root@docker01 alertmanager-tmpl]# cd 
[root@docker01 ~]# vim alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_from: '848369866@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '848369866@qq.com'
  smtp_auth_password: 'zorghltycnxqbfhf'
  smtp_require_tls: false
  smtp_hello: 'qq.com'
templates:               # 添加此行
  - '/etc/alertmanager-tmpl/*.tmpl'     # 添加此行
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '{{ template "email.to" }}'                     # 必須和{{ define "email.to" }}916551516@qq.com{{ end }} 中的對應
    html: '{{ template "email.to.html" . }}'                 # 必須和{{ define "email.to.html" }} 中的名字對應
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

[root@docker01 ~]# docker rm -f alertmanger      # 刪除
[root@docker01 ~]# docker run -d --name alertmanger -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl  --restart=always prom/alertmanager           # 從新運行一個
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                    NAMES
59ec0b4faee4        prom/alertmanager    "/bin/alertmanager -…"   46 seconds ago      Up 45 seconds       0.0.0.0:9093->9093/tcp   alertmanger
4430baef7980        prom/prometheus      "/bin/prometheus --c…"   12 minutes ago      Up 12 minutes                                prometheus
d0bdab7731c8        grafana/grafana      "/run.sh"                About an hour ago   Up About an hour    0.0.0.0:3000->3000/tcp   grafana
264128b86127        google/cadvisor      "/usr/bin/cadvisor -…"   3 hours ago         Up About an hour                             cadvisor
5e275c848b03        prom/node-exporter   "/bin/node_exporter …"   4 hours ago         Up About an hour                             focused_mayer

至此,新的報警模板也生成了,若是如下容器有Down的,就會給你發送新的郵件,恢復正常後,也會發送郵件,一樣,郵件中的內容格式是有誤的,可是你能夠正常接收到報警信息,若想要更改其報警模板,能夠參考github官方文檔
我收到的報警信息以下
docker容器部署Prometheus服務——雲平臺監控利器

相關文章
相關標籤/搜索