一、環(huán)境介紹
本文環(huán)境,以及本文所采用數(shù)據(jù)庫為GreatSQL 8.0.32-24
$ cat /etc/system-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
$ uname -a
Linux gip 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
$ ldd --version
ldd (GNU libc) 2.17
在上篇[圖文結合丨Prometheus+Grafana+GreatSQL性能監(jiān)控系統(tǒng)搭建指南(上)]中介紹了如何搭建監(jiān)控系統(tǒng),本文將介紹如何使用Grafana平臺以及AlertManager模塊的告警功能
二、Grafana之郵件告警
這里我們以郵件告警并使用QQ郵箱為例
1.開啟郵件服務
登錄QQ郵箱后,點擊設置->賬號->開啟POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務
我已經(jīng)開啟了,若沒有開啟可以開啟一下,接著點擊生成授權碼
,記得保存好授權碼,接下來修改grafana郵箱配置
$ vim /usr/local/prometheus/grafana-10.1.1/conf/defaults.ini
使用/smtp
找到郵件設置的區(qū)域,按下圖示例修改
重啟Grafana服務
$ systemctl restart grafana-server.service
接下來登錄Grafana網(wǎng)頁http://172.17.137.104:3000/
,添加郵件告警
填寫Name
,Addresses
等信息后點擊Test
測試下
可以看到已經(jīng)收到郵件,測試成功
2.添加告警規(guī)則
可以在Grafana中添加告警規(guī)則,例如我創(chuàng)建了一個GreatSQL連接情況,它監(jiān)測是的mysql_up
這個值,若為0則連接不上GreatSQL了
進入編輯面板,可以看到有一個Alert
的告警選項,隨后我們點擊Create alert rule from this panel
這時候就會進入告警規(guī)則設置面板
首先我們來介紹下第一部分設置警報規(guī)則名稱
,就是設置告警的規(guī)則名字
(第一部分)
第二個部分就是我們在外面展示的數(shù)據(jù)情況,在Expressions
往下就是設置告警條件
(第二部分)
第一項last()
表示最新數(shù)據(jù),還有很多其他選項如max()
表示最大值,一般我們選擇last()
第二項就是表示我們來自哪個查詢,因為我們只有一個所以選擇A
第三項則標識我們要監(jiān)控的值達到多少觸發(fā),觸發(fā)判斷是前面的選項,如圖中的IS ABOVE
則表示在這之上,還有其他幾個選項如IS BELOW
在這之下、IS OUTSIDE RANGE
超出范圍、IS WITHIN RANGE
在范圍內、HAS NO VALPUE
無值。此處我們選擇IS ABOVE
,表達式綜合就是:當mysql_up
值小于1則觸發(fā)。
第三部分是創(chuàng)建要儲存規(guī)則的文件夾Folder
以及評估的組Evaluation group
同一組中的規(guī)則將在同一時間間隔內按順序進行評估
(第三部分)
其中Pending period
表示觸發(fā)告警后延遲多長時間
第四部分用于添加注釋Summary
摘要對發(fā)生的事情和原因的簡短總結,Description
說明警報規(guī)則功能的說明,Runbook URL
運行手冊網(wǎng)址用于保存警報運行手冊的網(wǎng)頁
第五部分配置通知,用于添加自定義標簽以更改通知的路由方式,如果沒有設置匹配策略的話,則所有警報實例都由默認策略處理
點擊右上角保存規(guī)則后,可以在頁面中看到剛剛設定的告警規(guī)則
3.測試郵件告警
現(xiàn)在模擬GreatSQL宕機,看看會不會觸發(fā)告警規(guī)則從而發(fā)送郵件報警
$ systemctl stop greatsql
因為我們設置的是1分鐘,所以要1分鐘以后才會再次檢測GreatSQL的連接狀況
下圖可以看到,已經(jīng)檢測到GreatSQL連接不上了,進入待定狀態(tài)
過了設定的延遲時間,顯示Firing
表示已經(jīng)發(fā)送郵件
可以看到QQ郵箱中已經(jīng)收到了告警郵件
接著我們把GreatSQL再次啟動起來
$ systemctl start greatsql
當你解決完成以后,還會收到一封已解決的郵件1 resolved instances
三、Grafana之釘釘告警
在之前的文章中已經(jīng)提到了使用釘釘告警Prometheus+Grafana+釘釘部署一個單機的MySQL監(jiān)控告警系統(tǒng),但是使用的是Alertmanager是普米的告警模塊,并不是Grafana,所以這里在介紹下如何用Grafana配置釘釘告警。
不過釘釘在2023年9月1日起,非內部群和內部群均不再支持創(chuàng)建自定義機器人,你需要登錄釘釘開發(fā)者后臺,申請開發(fā)者權限后,創(chuàng)建企業(yè)內部應用機器人,具體方法這邊就不介紹了,需要的可以去釘釘上看詳細介紹
按Prometheus+Grafana+釘釘部署一個單機的MySQL監(jiān)控告警系統(tǒng)中的方法,先創(chuàng)建好釘釘機器人,接著到Grafana中添加Contact points
聯(lián)絡點
接下來填入Name
、Integration
下拉框中找到DingDing
URL中填入釘釘機器人的Webhook:
Message Type
有兩個選項,一個是卡片的模式,一個是鏈接的模式,以及Title標題和Message消息,接著點擊Test測試一下,看看是否可以發(fā)送告警信息,這時候釘釘機器人就會發(fā)送告警測試,沒問題就點擊下方藍色的Save contact point
如果要選擇釘釘告警,可以在選項Notification policies
中選擇Edit
把Default contact point
修改為釘釘告警的方式,修改好點擊Update default policy
接下來測試下,我們把GreatSQL模擬關閉,看看是否會發(fā)送告警信息
$ systemctl stop greatsql
沒問題,成功接收到了告警信息
四、Alertmanager之郵件告警
還記得我們上篇文章安裝的Alertmanager嗎,其實也具有告警功能。Prometheus 包含一個報警模塊,就是我們的 AlertManager,Alertmanager 主要用于接收 Prometheus 發(fā)送的告警信息,它支持豐富的告警通知渠道,而且很容易做到告警信息進行去重,降噪,分組等。在上篇中我們也往這里面添加了一些規(guī)則,忘記的可以在復讀一次上篇,Alertmanager也可以釘釘告警,在Prometheus+Grafana+釘釘部署一個單機的MySQL監(jiān)控告警系統(tǒng)有介紹,這里就來介紹下Alertmanager之郵件告警
Prometheus觸發(fā)一條告警的過程
1.配置AlertManager
AlertManager 默認配置文件為 alertmanager.yml
,路徑為 /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
那么,我們就來配置一下使用 Email 方式通知報警信息,這里以 QQ 郵箱為例,配置如下:
global:
resolve_timeout: 5m
smtp_from: '填寫郵箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填寫郵箱@qq.com'
smtp_auth_password: '填寫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: '填寫郵箱@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
yml對縮進有要求,請仔細檢查
對重點參數(shù)做詳細介紹:
global
全局配置,主要配置告警方式,如郵件、webhook等。
-
resolve_timeout
:超時,默認5min -
smtp_auth_password
:切記QQ郵箱的授權碼,非QQ賬戶登錄密碼 -
smtp_require_tls
:是否使用tls,根據(jù)環(huán)境不同,來選擇開啟和關閉。如果提示報錯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 驗證。
route
用來設置報警的分發(fā)策略
-
group_by
:用于分組聚合,對告警通知按標簽(label)進行分組,將具有相同標簽或相同告警名稱(alertname)的告警通知聚合在一個組,然后作為一個通知發(fā)送。如果想完全禁用聚合,可以設置為group_by: [...] -
group_wait
:當一個新的告警組被創(chuàng)建時,需要等待'group_wait'后才發(fā)送初始通知。這樣可以確保在發(fā)送等待前能聚合更多具有相同標簽的告警,最后合并為一個通知發(fā)送。 -
group_interval
:當?shù)谝淮胃婢ㄖl(fā)出后,在新的評估周期內又收到了該分組最新的告警,則需等待'group_interval'時間后,開始發(fā)送為該組觸發(fā)的新告警,可以簡單理解為,group就相當于一個通道(channel)。 -
repeat_interval
:告警通知成功發(fā)送后,若問題一直未恢復,需再次重復發(fā)送的間隔。 -
receiver
:配置告警消息接收者,與下面配置的對應。例如常用的 email、wechat、slack、webhook 等消息通知方式。
receivers
配置報警信息接收者信息
-
to
:接收警報的Email -
send_resolved
:故障恢復后通知
inhibit_rules
抑制規(guī)則配置,當存在與另一組匹配的警報(源)時,抑制規(guī)則將禁用與一組匹配的警報(目標)
配置完成后重啟即可systemctl restart alertmanager.service
若啟動失敗可自行排查
journalctl -u alertmanager.service -f
,注意檢查縮進問題!
接下來就可以配置AlertManager的告警規(guī)則,這個我們也在上篇提到,并且也創(chuàng)建rules文件夾存放規(guī)則,所以按上篇方法做即可
2.測試郵件告警
接下來我們登錄到http://172.17.137.104:9090/rules
Prometheus的Rules中查看,是不是有添加完成幾個告警
這里說明一下 Prometheus Alert 告警狀態(tài)有三種狀態(tài):Inactive
、Pending
、Firing
-
Inactive
:非活動狀態(tài),表示正在監(jiān)控,但是還未有任何警報觸發(fā)。 -
Pending
:表示這個警報必須被觸發(fā)。由于警報可以被分組、壓抑/抑制或靜默/靜音,所以等待驗證,一旦所有的驗證都通過,則將轉到 Firing 狀態(tài)。 -
Firing
:將警報發(fā)送到 AlertManager,它將按照配置將警報的發(fā)送給所有接收者。一旦警報解除,則將狀態(tài)轉到 Inactive,如此循環(huán)。
接下來我們關閉GreatSQL,使得mysql_up = 0
觸發(fā)告警規(guī)則,看看是否會發(fā)送告警郵件
$ systemctl stop greatsql
停止服務后,alert 頁面由綠色 Inactive
狀態(tài)變成了黃色 Pending
狀態(tài)繼續(xù)等待變成紅色 Firing
狀態(tài),從而向 AlertManager 發(fā)送報警信息,此時 AlertManager 則按照配置規(guī)則向接受者發(fā)送郵件告警
黃色 Pending
紅色 Firing
然后我們就收到了告警郵件
從上圖可以看到,默認郵件模板 Title 及 Body 會將之前配置的 Labels 及 Annotations 信息均包含在內,而且每隔 5m 會自動發(fā)送,直到服務恢復正常,報警解除為止,同時會發(fā)送一封報警解除郵件。
報警觸發(fā)后,每隔 5m 會自動發(fā)送報警郵件(服務未恢復正常期間),是因為 alertmanager.yml
中 route -> repeat_interval: 5m
配置決定的
3.更改AlertManager郵件內容
此步驟非必要,想要郵件內容更優(yōu)雅直觀的可以參考
雖然所有核心的信息已經(jīng)包含了,但是郵件格式內容可以更優(yōu)雅直觀一些,AlertManager也是支持修改自定義郵件模板配置的
我們需要新建一個模板文件,就叫做email.tmpl
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp
寫入以下內容
{{ define "email.from" }}填入郵箱@qq.com{{ end }}
{{ define "email.to" }}填入郵箱@qq.com{{ end }}
{{ define "email.to.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警級別: {{ .Labels.severity }} 級 <br>
告警類型: {{ .Labels.alertname }} <br>
故障主機: {{ .Labels.instance }} <br>
告警主題: {{ .Annotations.summary }} <br>
告警詳情: {{ .Annotations.description }} <br>
觸發(fā)時間: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
<h2>@告警恢復</h2>
告警程序: prometheus_alert <br>
故障主機: {{ .Labels.instance }}<br>
故障主題: {{ .Annotations.summary }}<br>
告警詳情: {{ .Annotations.description }}<br>
告警時間: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
恢復時間: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
{{ end }}{{ end -}}
{{- end }}
上邊模板文件配置了 email.from
、email.to
、email.to.html
三種模板變量,可以在 alertmanager.yml
文件中直接配置引用。
這里 email.to.html
就是要發(fā)送的郵件內容,支持 Html 和 Text 格式,這里為了顯示好看,采用 Html 格式簡單顯示信息。下邊{{ range .Alerts }}
是個循環(huán)語法,用于循環(huán)獲取匹配的 Alerts 的信息,下邊的告警信息跟上邊默認郵件顯示信息一樣,只是提取了部分核心值來展示。然后,需要增加 alertmanager.yml
文件 templates
配置如下:
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '填入郵箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填入郵箱@qq.com'
smtp_auth_password: '填寫QQ郵箱授權碼'
smtp_require_tls: false
smtp_hello: 'qq.com'
templates:
- '/usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp'
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']
接著我們模擬GreatSQL宕機,使其觸發(fā)告警規(guī)則,看看是否發(fā)送告警郵件
沒問題已經(jīng)成功收到了告警郵件
好啦,Prometheus+Grafana+GreatSQL性能監(jiān)控系統(tǒng)搭建指南就到此結束,快動手搭建操作下吧~
Enjoy GreatSQL ??
關于 GreatSQL
GreatSQL是適用于金融級應用的國內自主開源數(shù)據(jù)庫,具備高性能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用于線上生產(chǎn)環(huán)境,且完全免費并兼容MySQL或Percona Server。
相關鏈接: GreatSQL社區(qū) Gitee GitHub Bilibili
GreatSQL社區(qū):
社區(qū)博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html
技術交流群:
微信:掃碼添加
GreatSQL社區(qū)助手
微信好友,發(fā)送驗證信息加群
。文章來源:http://www.zghlxwxcb.cn/news/detail-710835.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-710835.html
到了這里,關于圖文結合丨Prometheus+Grafana+GreatSQL性能監(jiān)控系統(tǒng)搭建指南(下)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!