您好,登錄后才能下訂單哦!
博文大綱:
- 一、部署Weave-Scope
- 二、開始配置
- 1、運行Node Server容器
- 2、運行cAdvisor容器
- 3、docker01上運行Prometheus server容器
- 4、docker01上運行grafana容器
- 5、設置Prometheus告警
Prometheus是一個系統和服務監視系統。它以給定的時間間隔從已配置的目標收集指標,評估規則表達式,顯示結果,并在發現某些情況為真時觸發警報。
與其他監視系統相比,Prometheus的主要區別特征是:
- 一個多維數據模型(時間序列由指標名稱定義和設置鍵/值尺寸)
- 一個靈活的查詢語言來利用這一維度
- 不依賴于分布式存儲;單服務器節點是自治的
- 時間序列收集通過HTTP 上的拉模型進行
- 通過中間網關支持推送時間序列
- 通過服務發現或靜態配置發現目標
- 多種圖形和儀表板支持模式
- 支持分層和水平聯合
其官方給出的架構示意圖如下:
部署該服務,包括四個組件:Prometheus Server、Node Exporter、cAdvrisor、Grafana。
各個組件的作用如下:
- Prometheus Server:Prometheus服務的主服務器 ;
- Node Exporter:收集Host硬件和操作系統的信息;
- cAdvrisor:負責收集Host上運行的容器信息;
- Grafana:用來展示Prometheus監控操作界面(給我們提供一個友好的web界面)。
以上四個組件的所有介紹,還請移步到Github官網,直接搜索相應的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界面。看到的網頁如下:
最好訪問一下所有運行上述容器的服務器的9100端口,確保可以看到上面的頁面。
cAdvrisor是負責收集Host上運行的容器信息的,同樣,在所有需要監控的服務器上執行下面的命令運行cAdvisor容器即可:
[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端口,即可看到如下頁面:
同樣,最好訪問每一臺服務器的8080端口,以便確認成功。
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.20.7:9100','192.168.20.7:8080','192.168.20.8:9100','192.168.20.8: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端口,會看到以下頁面:
然后單擊上方的“status”,然后點擊“Targets”,如下圖所示:
看到下面的頁面,則表示至此的所有操作都沒有問題:
此容器是為我們提供一個友好的web展示頁面。
[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端口,可以看到以下頁面:
在上面的登錄頁面,輸入用戶名“admin”,密碼就是我們運行時指定的密碼,我這里是“123.com”。輸入后登錄,會看到以下界面,然后單擊添加數據源:
看到下面的界面,找到Prometheus,并點擊“select”選擇它:
根據下圖給的提示進行修改配置:
上述配置完成后,我們就需要配置它以什么樣的形式來給我們展示了,可以自定義,但是很麻煩,我選擇直接去grafana官網尋找現成的模板。
登錄grafana官網,點擊下面的選項:
看圖操作:
將這些模板導入到我們grafana的web界面有兩種方式:
1)進入模板后,點擊“Download JSON”,以便下載:
2)下載后,回到grafana界面,點擊如下:
3)單擊“Upload.json file”,然后上傳我們在grafana官網下載的模板:
4)上傳后,請看下圖進行操作:
5)至此,即可看到下面的監控頁面,說明導入成功了:
但是注意看的話,會發現這個模板有些信息都檢測不到,所以這里只是為了展示這第一種導入模板的方式,我更推薦使用方式2進行導入。
1)在進入官網提供的模板后,我們需要記錄其ID號,如下:
2)然后回到grafana的web界面,同樣點擊如下,進行導入操作:
3)在下面的紅框中輸入我們記錄的ID號即可:
4)接下來的操作和方式1中的一樣,如下:
5)導入此模板后,會看到該模板給我們提供的界面,如下:
至此,web界面的監控就部署完成了。
Prometheus的告警方式有好幾種方式,郵箱、釘釘、微信等,我這里選擇郵箱的告警方式。
[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:抑制策略。當存在于另一組匹配的警報,抑制規則將禁用于一組匹配的警報。
我這里更改后的配置文件如下:
[root@docker01 ~]# vim alertmanager.yml #編輯復制出來的配置文件
#將以下所有的郵箱賬號及auth_password更改為自己的賬戶即可
global:
resolve_timeout: 5m
smtp_from: '916551516@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '916551516@qq.com'
smtp_auth_password: 'abdgwyaxickabccb0'
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: '916551516@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容器,并掛載更改后的配置文件
#如果配置文件有錯誤,那么這個容器是運行不了的。
[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!
"
#定義完成后,保存退出即可。
若想自己編寫報警規則,可以參考它的官方文檔,我這里的報警規則是有些問題的,但是可以收到它的報警信息
[root@docker01 ~]# vim prometheus.yml #更改以下內容
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.20.6:9093 #將此行的注釋去掉,改為alertmanager容器的IP+端口
rule_files:
- "/usr/local/prometheus/rules/*.rules" #注意,這個路徑是容器內的路徑
#必須格外注意配置文件的格式,注意縮進。更改完成后,保存退出即可。
為了防止格式錯誤,我這里附一個配置文件的截圖:
[root@docker01 ~]# docker rm -f 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掉的容器,那么就會給你的郵箱發送報警信息。當容器正常后,它還會給你反饋
我收到的報警郵件如下:
[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" }}916551516@qq.com{{ end }} #將此改為自己的郵箱
{{ define "email.to" }}916551516@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 ~]# cd
[root@docker01 ~]# vim alertmanager.yml #編輯alertmanager配置文件,修改以下有注釋的行即可
global:
resolve_timeout: 5m
smtp_from: '916551516@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '916551516@qq.com'
smtp_auth_password: 'abdgwyaxickabccb0'
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 #確定9093端口運行映射正常
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9d718071d4d prom/alertmanager "/bin/alertmanager -…" 7 seconds ago Up 6 seconds 0.0.0.0:9093->9093/tcp alertmanger
1b1379e3e12a prom/prometheus "/bin/prometheus --c…" 11 minutes ago Up 11 minutes prometheus
65240a28e383 grafana/grafana "/run.sh" 2 hours ago Up 2 hours 0.0.0.0:3000->3000/tcp grafana
3bd83eb145e2 google/cadvisor "/usr/bin/cadvisor -…" 2 hours ago Up 2 hours cadvisor
a57b77a33e79 prom/node-exporter "/bin/node_exporter …" 2 hours ago Up 2 hours eloquent_wescoff
至此,新的報警模板也生成了,如果以下容器有Down的,就會給你發送新的郵件,恢復正常后,也會發送郵件,同樣,郵件中的內容格式是有誤的,但是你可以正常接收到報警信息,若想要更改其報警模板,可以參考github官方文檔
我郵箱收到的報警信息如下:
———————— 本文至此結束,感謝閱讀 ————————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。