久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何搭建Prometheus監控報警及自定義郵件模板

209次閱讀
沒有評論

共計 8308 個字符,預計需要花費 21 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下如何搭建 Prometheus 監控報警及自定義郵件模板,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、Prometheus AlertManager 介紹

Prometheus 是一套開源的系統監控、報警、時間序列數據庫的組合,最初有 SoundCloud 開發的,后來隨著越來越多公司使用,于是便獨立成開源項目。Alertmanager 主要用于接收 Prometheus 發送的告警信息,它支持豐富的告警通知渠道,例如郵件、微信、釘釘、Slack 等常用溝通工具,而且很容易做到告警信息進行去重,降噪,分組等,是一款很好用的告警通知系統。

二、基本概念

Prometheus
官網(https://prometheus.io/)
是一套開源的監控和報警系統,也是一個時序數據庫。
架構圖
如何搭建 Prometheus 監控報警及自定義郵件模板

基本原理

Prometheus 的基本原理是通過 HTTP 協議周期性抓取被監控組件的狀態,任意組件只要提供對應的 HTTP 接口就可以接入監控。不需要任何 SDK 或者其他的集成過程。這樣做非常適合做虛擬化環境監控系統,比如 VM、Docker、Kubernetes 等。輸出被監控組件信息的 HTTP 接口被叫做 exporter。目前互聯網公司常用的組件大部分都有 exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系統信息(包括磁盤、內存、CPU、網絡等等)。

服務過程

Prometheus Daemon 負責定時去目標上抓取 metrics(指標)數據,每個抓取目標需要暴露一個 http 服務的接口給它定時抓取。Prometheus 支持通過配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup 等方式指定抓取目標。Prometheus 采用 PULL 的方式進行監控,即服務器可以直接通過目標 PULL 數據或者間接地通過中間網關來 Push 數據。
2.Prometheus 在本地存儲抓取的所有數據,并通過一定規則進行清理和整理數據,并把得到的結果存儲到新的時間序列中。
3.Prometheus 通過 PromQL 和其他 API 可視化地展示收集的數據。Prometheus 支持很多方式的圖表可視化,例如 Grafana、自帶的 Promdash 以及自身提供的模版引擎等等。Prometheus 還提供 HTTP API 的查詢方式,自定義所需要的輸出。
4.PushGateway 支持 Client 主動推送 metrics 到 PushGateway,而 Prometheus 只是定時去 Gateway 上抓取數據。

Alertmanager 是獨立于 Prometheus 的一個組件,可以支持 Prometheus 的查詢語句,提供十分靈活的報警方式。

工作流程

通過 exporters 從數據源主動拉取數據(metrics),保存到時序數據庫(TSDB)中,可以通過 HTTP Server 訪問,同時可以發起報警,對于數據庫中的時序數據,提供 PromeQL 進行查詢,提供給 web UI 或者可視化系統 Grafana 等展示。

Grafana

官網(https://grafana.com/)
開源的數據分析和監控平臺
有不同的 dashboards 支持不同類型的數據可視化

Exporters

數據采集
Prometheus 從不同的 exorters 中拉取數據,有不同的 exporter 支持不同的數據源
node-exporter 支持機器基本的數據 比如 cpu mem 網絡 等

三、實驗環境 docker01docker02docker03192.168.1.11192.168.1.13192.168.1.20NodeEXporterNodeEXporterNodeEXportercAdvisorcAdvisorcAdvisorPrometheus Server 空空 Grafana 空空

全部關閉防火墻,禁用 selinux

四、設置 prometheus 監控報警

接下來,我們需要啟動 AlertManager 來接受 Prometheus 發送過來的報警信息,并執行各種方式的告警。同樣以 Docker 方式啟動 AlertManager,最簡單的啟動命令如下:

$ docker run –name alertmanager -d -p 9093:9093 prom/alertmanager:latest
這里 AlertManager 默認啟動的端口為 9093,啟動完成后,瀏覽器訪問 http:// IP :9093 可以看到默認提供的 UI 頁面,不過現在是沒有任何告警信息的,因為我們還沒有配置報警規則來觸發報警。
如何搭建 Prometheus 監控報警及自定義郵件模板

配置 AlertManager

AlertManager:用來接收 prometheus 發送來的報警信息,并且執行設置好的報警方式、報警內容。

下載鏡像

[root@docker01 ~]# docker pull alertmanager
// 下載 alertmanager 鏡像

基于 alertmanager 運行一臺容器

[root@docker01 ~]# docker run -d --name alertmanager -p 9093:9093 prom/alertmanager:latest

配置路由轉發

[root@docker01 ~]# echo net.ipv4.ip_forward = 1   /etc/sysctl.conf 
[root@docker01 ~]# sysctl -p

在部署 alertmanager 之前,我們需要對它的配置文件進行修改, 所以我們先運行一個容器,先將其配置文件拷貝出來。

[root@docker01 ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml ./
// 拷貝 alertmanager 的配置文件到本地

修改 alertmanager 的配置文件配置文件簡單介紹

AlertManager:用來接收 Prometheus 發送的報警信息,并且執行設置好的報警方式,報警內容。

AlertManager.yml 配置文件:

global:全局配置,包括報警解決后的超時時間、SMTP 相關配置、各種渠道通知的 API 地址等消息。

route:用來設置報警的分發策略。

receivers:配置報警信息接收者信息。

inhibit_rules:抑制規則配置,當存在與另一個匹配的報警時,抑制規則將禁用用于有匹配的警報。

修改配置文件

[root@docker01 ~]# vim alertmanager.yml 
// 修改 alertmanager 配置文件
global:
 resolve_timeout: 5m
 smtp_from:  2877364346@qq.com  # 自己郵箱地址
 smtp_smarthost:  smtp.qq.com:465  #qq 的郵箱地址及端口
 smtp_auth_username:  2877364346@qq.com  
 smtp_auth_password:  osjppnjkbuhcdfff  # 需要在 qq 郵箱獲取授權碼
 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:  2877364346@qq.com 
 send_resolved: true
 inhibit_rules:
 - source_match:
 severity:  critical 
 target_match:
 severity:  warning 
 equal: [alertname ,  dev ,  instance]

以上配置我反復試驗后,發現不同的環境參數配置也不一樣,調試期間出現了各種報錯問題,將其中幾個關鍵的配置說明一下:

1.smtp_smarthost: 這里為 QQ 郵箱 SMTP 服務地址,官方地址為 smtp.qq.com 端口為 465 或 587,同時要設置開啟 POP3/SMTP 服務。

smtp_auth_password: 這里為第三方登錄 QQ 郵箱的授權碼,非 QQ 賬戶登錄密碼,否則會報錯,獲取方式在 QQ 郵箱服務端設置開啟 POP3/SMTP 服務時會提示。
3.smtp_require_tls: 是否使用 tls,根據環境不同,來選擇開啟和關閉。如果提示報錯 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要設置為 true。著重說明一下,如果開啟了 tls,提示報錯 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 來跳過 tls 驗證。

重新運行 alertmanager 容器

[root@docker01 ~]# docker rm -f alertmanager
// 刪除 alertmanager 容器
[root@docker01 ~]# docker run -d --name alertmanager -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -p 9093:9093 prom/alertmanager:latest 
// 運行一臺新的 alertmanager 容器,記得掛載配置文件

Prometheus 配置和 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}中的 prometheus 需要和 prometheus 配置文件 23 行的相同
 for: 15s
 labels:
 severity: 1
 team: node
 annotations:
 summary:  {{ $labels.instance }}  已停止運行超過  15s!

說明一下:該 rules 目的是監測 node 是否存活,expr 為 PromQL 表達式驗證特定節點 job= node-exporter 是否活著,for 表示報警狀態為 Pending 后等待 15s 變成 Firing 狀態,一旦變成 Firing 狀態則將報警發送到 AlertManager,labels 和 annotations 對該 alert 添加更多的標識說明信息,所有添加的標簽注解信息,以及 prometheus.yml 中該 job 已添加 label 都會自動添加到郵件內容中,更多關于 rule 詳細配置可以參考 這里。

修改 prometheus 配置文件

[root@docker01 ~]# vim prometheus.yml 
# Alertmanager configuration #7
alerting:
 alertmanagers:
 - static_configs:
 - targets:
 - 192.168.1.11:9093 # 去注釋修改
# Load rules once and periodically evaluate them according to the global  evaluation_interval . #14 行
rule_files:
 -  /usr/local/prometheus/rules/*.rules  # 添加(這個路徑是 prometheus 容器內的路徑)

注意: 這里 rulefiles 為容器內路徑,需要將本地 node-up.rules 文件掛載到容器內指定路徑,修改 Prometheus 啟動命令如下,并重啟服務。

重新運行 prometheus 容器

[root@docker01 ~]# docker rm -f prometheus 
// 刪除 prometheus 容器
[root@docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules/node-up.rules:/usr/local/prometheus/rules/node-up.rules prom/prometheus
// 運行一臺新的 alertmanager 容器,記得掛載規則文件

瀏覽器驗證一下 http://192.168.1.11:9090/rules

如何搭建 Prometheus 監控報警及自定義郵件模板

這里說明一下 Prometheus Alert 告警狀態有三種狀態:Inactive、Pending、Firing。

Inactive:非活動狀態,表示正在監控,但是還未有任何警報觸發。
Pending:表示這個警報必須被觸發。由于警報可以被分組、壓抑 / 抑制或靜默 / 靜音,所以等待驗證,一旦所有的驗證都通過,則將轉到 Firing 狀態。
Firing:將警報發送到 AlertManager,它將按照配置將警報的發送給所有接收者。一旦警報解除,則將狀態轉到 Inactive,如此循環。

掛起 docker02

如何搭建 Prometheus 監控報警及自定義郵件模板

會收到郵件
如何搭建 Prometheus 監控報警及自定義郵件模板

這里有幾個地方需要解釋一下:

每次停止 / 恢復服務后,15s 之后才會發現 Alert 狀態變化,是因為 prometheus.yml 中 global – scrape_interval: 15s 配置決定的,如果覺得等待 15s 時間太長,可以修改小一些,可以全局修改,也可以局部修改。例如局部修改 node-exporter 等待時間為 5s。
… – job_name: node-exporter     scrape_interval: 5s     file_sd_configs:       – files: [/usr/local/prometheus/groups/nodegroups/*.json]

Alert 狀態變化時會等待 15s 才發生改變,是因為 node-up.rules 中配置了 for: 15s 狀態變化等待時間。

報警觸發后,每隔 5m 會自動發送報警郵件(服務未恢復正常期間),是因為 alertmanager.yml 中 route – repeat_interval: 5m 配置決定的。

五、AlertManager 自定義郵件模板創建模板目錄

[root@docker01 ~]# cd prometheus
// 進入之前創建的 prometheus 目錄
[root@docker01 prometheus]# mkdir alertmanager-tmpl
// 創建 AlertManager 模板目錄

看到上邊默認發送的郵件模板,雖然所有核心的信息已經包含了,但是郵件格式內容可以更優雅直觀一些,那么,AlertManager 也是支持自定義郵件模板配置的,首先新建一個模板文件

編寫模板規則

[root@docker01 prometheus]# vim email.tmpl 
{{ define  email.from  }}2877364346@qq.com{{ end }}
{{ define  email.to  }}2877364346@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  2019-08-04 16:58:15  }}  br 
=========end========== br 
{{ end }}
{{ end }}

簡單說明一下,上邊模板文件配置了 email.from、email.to、email.to.html 三種模板變量,可以在 alertmanager.yml 文件中直接配置引用。這里 email.to.html 就是要發送的郵件內容,支持 Html 和 Text 格式,這里為了顯示好看,采用 Html 格式簡單顯示信息。下邊 {{range .Alerts}} 是個循環語法,用于循環獲取匹配的 Alerts 的信息,下邊的告警信息跟上邊默認郵件顯示信息一樣,只是提取了部分核心值來展示。然后,需要增加 alertmanager.yml 文件 templates 配置如下:

修改 alertmanager 的配置文件

[root@docker01 ~]# vim alertmanager.yml 
global:
 resolve_timeout: 5m
 smtp_from:  2877364346@qq.com 
 smtp_smarthost:  smtp.qq.com:465 
 smtp_auth_username:  2877364346@qq.com 
 smtp_auth_password:  evjmqipqezlbdfij 
 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  }}  # 修改
 html:  {{ template  email.to.html  .}}  # 添加
 send_resolved: true # 刪除
 inhibit_rules:
 - source_match:
 severity:  critical 
 target_match:
 severity:  warning 
 equal: [alertname ,  dev ,  instance]

重新運行 alertmanager 容器

[root@docker01 ~]# docker rm -f alertmanager
// 刪除 alertmanager 容器
[root@docker01 ~]# docker run -itd --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager:latest
// 運行一臺新的 alertmanager 容器,記得掛載配置文件

掛起 docker02

如何搭建 Prometheus 監控報警及自定義郵件模板

收到郵件

如何搭建 Prometheus 監控報警及自定義郵件模板

當然我們還可以配置郵件標題,這里就不在演示了,詳細配置可參考 這里。這里除了監控節點是否存活外,還可以監控很多很多指標,例如 CPU 負載告警、Mem 使用量告警、Disk 存儲空間告警、Network 負載告警等等,這些都可以通過自定義 PromQL 表達式驗證值來定義一些列的告警規則,來豐富日常工作中需要的各種告警。

以上是“如何搭建 Prometheus 監控報警及自定義郵件模板”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計8308字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 德兴市| 富平县| 云林县| 牡丹江市| 富锦市| 深圳市| 扶余县| 登封市| 龙川县| 灵璧县| 镇赉县| 岳池县| 湘阴县| 婺源县| 甘谷县| 鹤山市| 稷山县| 阜康市| 建始县| 章丘市| 成安县| 南丰县| 山丹县| 马边| 杨浦区| 通江县| 鞍山市| 合川市| 客服| 霞浦县| 岑溪市| 咸宁市| 荔浦县| 德兴市| 托克托县| 大庆市| 扎鲁特旗| 乌兰县| 灵山县| 黄石市| 方山县|