圖文結合丨Prometheus+Grafana+GreatSQL性能監控系統搭建指南(下)

来源:https://www.cnblogs.com/greatsql/archive/2023/10/18/17771492.html
-Advertisement-
Play Games

一、環境介紹 本文環境,以及本文所採用資料庫為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-11 ...


一、環境介紹

本文環境,以及本文所採用資料庫為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性能監控系統搭建指南(上)]中介紹瞭如何搭建監控系統,本文將介紹如何使用Grafana平臺以及AlertManager模塊的告警功能

二、Grafana之郵件告警

這裡我們以郵件告警並使用QQ郵箱為例

1.開啟郵件服務

登錄QQ郵箱後,點擊設置->賬號->開啟POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務

file

我已經開啟了,若沒有開啟可以開啟一下,接著點擊生成授權碼,記得保存好授權碼,接下來修改grafana郵箱配置

$ vim /usr/local/prometheus/grafana-10.1.1/conf/defaults.ini 

使用/smtp找到郵件設置的區域,按下圖示例修改

file

重啟Grafana服務

$ systemctl restart grafana-server.service

接下來登錄Grafana網頁http://172.17.137.104:3000/,添加郵件告警

file

填寫NameAddresses等信息後點擊Test測試下

file

可以看到已經收到郵件,測試成功

file

2.添加告警規則

可以在Grafana中添加告警規則,例如我創建了一個GreatSQL連接情況,它監測是的mysql_up這個值,若為0則連接不上GreatSQL了

file

進入編輯面板,可以看到有一個Alert的告警選項,隨後我們點擊Create alert rule from this panel

file

這時候就會進入告警規則設置面板

首先我們來介紹下第一部分設置警報規則名稱,就是設置告警的規則名字

file

(第一部分)

第二個部分就是我們在外面展示的數據情況,在Expressions往下就是設置告警條件

file

(第二部分)

第一項last()表示最新數據,還有很多其他選項如max()表示最大值,一般我們選擇last()

file

第二項就是表示我們來自哪個查詢,因為我們只有一個所以選擇A

第三項則標識我們要監控的值達到多少觸發,觸發判斷是前面的選項,如圖中的IS ABOVE則表示在這之上,還有其他幾個選項如IS BELOW在這之下、IS OUTSIDE RANGE超出範圍、IS WITHIN RANGE在範圍內、HAS NO VALPUE無值。此處我們選擇IS ABOVE,表達式綜合就是:當mysql_up值小於1則觸發。

第三部分是創建要儲存規則的文件夾Folder以及評估的組Evaluation group同一組中的規則將在同一時間間隔內按順序進行評估

file

(第三部分)

其中Pending period表示觸發告警後延遲多長時間

第四部分用於添加註釋Summary摘要對發生的事情和原因的簡短總結,Description說明警報規則功能的說明,Runbook URL運行手冊網址用於保存警報運行手冊的網頁

file

第五部分配置通知,用於添加自定義標簽以更改通知的路由方式,如果沒有設置匹配策略的話,則所有警報實例都由預設策略處理

file

點擊右上角保存規則後,可以在頁面中看到剛剛設定的告警規則

file

3.測試郵件告警

現在模擬GreatSQL宕機,看看會不會觸發告警規則從而發送郵件報警

$ systemctl stop greatsql

因為我們設置的是1分鐘,所以要1分鐘以後才會再次檢測GreatSQL的連接狀況

下圖可以看到,已經檢測到GreatSQL連接不上了,進入待定狀態

file

過了設定的延遲時間,顯示Firing表示已經發送郵件

file

可以看到QQ郵箱中已經收到了告警郵件

file

接著我們把GreatSQL再次啟動起來

$ systemctl start greatsql

當你解決完成以後,還會收到一封已解決的郵件1 resolved instances

file

三、Grafana之釘釘告警

在之前的文章中已經提到了使用釘釘告警Prometheus+Grafana+釘釘部署一個單機的MySQL監控告警系統,但是使用的是Alertmanager是普米的告警模塊,並不是Grafana,所以這裡在介紹下如何用Grafana配置釘釘告警。

不過釘釘在2023年9月1日起,非內部群內部群均不再支持創建自定義機器人,你需要登錄釘釘開發者後臺,申請開發者許可權後,創建企業內部應用機器人,具體方法這邊就不介紹了,需要的可以去釘釘上看詳細介紹

Prometheus+Grafana+釘釘部署一個單機的MySQL監控告警系統中的方法,先創建好釘釘機器人,接著到Grafana中添加Contact points聯絡點

file

接下來填入NameIntegration下拉框中找到DingDingURL中填入釘釘機器人的Webhook:

file

Message Type有兩個選項,一個是卡片的模式,一個是鏈接的模式,以及Title標題和Message消息,接著點擊Test測試一下,看看是否可以發送告警信息,這時候釘釘機器人就會發送告警測試,沒問題就點擊下方藍色的Save contact point

file

如果要選擇釘釘告警,可以在選項Notification policies中選擇Edit

file

Default contact point修改為釘釘告警的方式,修改好點擊Update default policy

file

接下來測試下,我們把GreatSQL模擬關閉,看看是否會發送告警信息

$ systemctl stop greatsql

file

沒問題,成功接收到了告警信息

四、Alertmanager之郵件告警

還記得我們上篇文章安裝的Alertmanager嗎,其實也具有告警功能。Prometheus 包含一個報警模塊,就是我們的 AlertManager,Alertmanager 主要用於接收 Prometheus 發送的告警信息,它支持豐富的告警通知渠道,而且很容易做到告警信息進行去重,降噪,分組等。在上篇中我們也往這裡面添加了一些規則,忘記的可以在復讀一次上篇,Alertmanager也可以釘釘告警,在Prometheus+Grafana+釘釘部署一個單機的MySQL監控告警系統有介紹,這裡就來介紹下Alertmanager之郵件告警

Prometheus觸發一條告警的過程

file

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對縮進有要求,請仔細檢查

對重點參數做詳細介紹:

global

全局配置,主要配置告警方式,如郵件、webhook等。

  • resolve_timeout:超時,預設5min

  • smtp_auth_password:切記QQ郵箱的授權碼,非QQ賬戶登錄密碼

  • 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 驗證。

route

用來設置報警的分發策略

  • group_by:用於分組聚合,對告警通知按標簽(label)進行分組,將具有相同標簽或相同告警名稱(alertname)的告警通知聚合在一個組,然後作為一個通知發送。如果想完全禁用聚合,可以設置為group_by: [...]
  • group_wait:當一個新的告警組被創建時,需要等待'group_wait'後才發送初始通知。這樣可以確保在發送等待前能聚合更多具有相同標簽的告警,最後合併為一個通知發送。
  • group_interval:當第一次告警通知發出後,在新的評估周期內又收到了該分組最新的告警,則需等待'group_interval'時間後,開始發送為該組觸發的新告警,可以簡單理解為,group就相當於一個通道(channel)。
  • repeat_interval:告警通知成功發送後,若問題一直未恢復,需再次重覆發送的間隔。
  • receiver:配置告警消息接收者,與下麵配置的對應。例如常用的 email、wechat、slack、webhook 等消息通知方式。

receivers

配置報警信息接收者信息

  • to:接收警報的Email
  • send_resolved:故障恢復後通知

inhibit_rules

抑制規則配置,當存在與另一組匹配的警報(源)時,抑制規則將禁用與一組匹配的警報(目標)

配置完成後重啟即可systemctl restart alertmanager.service

若啟動失敗可自行排查journalctl -u alertmanager.service -f,註意檢查縮進問題!

接下來就可以配置AlertManager的告警規則,這個我們也在上篇提到,並且也創建rules文件夾存放規則,所以按上篇方法做即可

2.測試郵件告警

接下來我們登錄到http://172.17.137.104:9090/rulesPrometheus的Rules中查看,是不是有添加完成幾個告警

file

這裡說明一下 Prometheus Alert 告警狀態有三種狀態:InactivePendingFiring

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

file

接下來我們關閉GreatSQL,使得mysql_up = 0觸發告警規則,看看是否會發送告警郵件

$ systemctl stop greatsql

停止服務後,alert 頁面由綠色 Inactive 狀態變成了黃色 Pending 狀態繼續等待變成紅色 Firing狀態,從而向 AlertManager 發送報警信息,此時 AlertManager 則按照配置規則向接受者發送郵件告警

file

黃色 Pending

file

紅色 Firing

然後我們就收到了告警郵件

file

從上圖可以看到,預設郵件模板 Title 及 Body 會將之前配置的 Labels 及 Annotations 信息均包含在內,而且每隔 5m 會自動發送,直到服務恢復正常,報警解除為止,同時會發送一封報警解除郵件。

file

報警觸發後,每隔 5m 會自動發送報警郵件(服務未恢復正常期間),是因為 alertmanager.ymlroute -> repeat_interval: 5m 配置決定的

3.更改AlertManager郵件內容

此步驟非必要,想要郵件內容更優雅直觀的可以參考

雖然所有核心的信息已經包含了,但是郵件格式內容可以更優雅直觀一些,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>
觸發時間: {{ .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.fromemail.toemail.to.html 三種模板變數,可以在 alertmanager.yml 文件中直接配置引用。

這裡 email.to.html 就是要發送的郵件內容,支持 Html 和 Text 格式,這裡為了顯示好看,採用 Html 格式簡單顯示信息。下邊{{ range .Alerts }}是個迴圈語法,用於迴圈獲取匹配的 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宕機,使其觸發告警規則,看看是否發送告警郵件

file

沒問題已經成功收到了告警郵件

好啦,Prometheus+Grafana+GreatSQL性能監控系統搭建指南就到此結束,快動手搭建操作下吧~


Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 哈嘍大家好,我是鹹魚 不知道大家在日常學習或者工作當中用 dig 命令多不多 dig 是 Domain Information Groper 的縮寫,對於網路管理員和在功能變數名稱系統(DNS)領域工作的小伙伴來說,它是一個非常常見且有用的工具。 無論是簡單的 DNS 解析查找還是更高級的故障排除和分析,d ...
  • 背景及需求 之前提到我們模型驅動的實現選擇的是解釋型,需要模型的元數據信息,在接到請求後動態處理邏輯. 此外,應用的通用能力中還包括:頁面dsl查詢,菜單查詢等. 而且後期加入觸發器,用戶自定義api後,這些元數據也需要提供查詢服務. 所以我們需要一個元數據模塊,需要提供兩個基礎功能:載入元數據和提 ...
  • Linux系統中,DBA一般使用oracle用戶登陸/訪問Linux操作系統,然後使用sqlplus命令登陸資料庫進行一些維護操作,如果由於某些特殊原因,系統管理員創建了一個db_support用戶,如果使用dba_support這個普通賬號登陸了Linux操作系統,如何使用sqlplus訪問資料庫 ...
  • 下載jdk-8u361-linux-x64.tar.gz https://www.oracle.com/java/technologies/downloads 上傳jdk-8u361-linux-x64.tar.gz 到node1 以下命令都是在node1上執行 解壓 tar -zxvf jdk-8 ...
  • 2023金融業資料庫技術大會上,華為雲資料庫服務產品部總經理蘇光牛、華為雲資料庫服務產品部CTO莊乾鋒受邀出席,分享了關於華為雲GaussDB資料庫的設計思考和關鍵技術能力。 ...
  • 在上篇文章中,我們向大家解釋了為什麼實時湖倉是當前企業數字化轉型過程中的解決之道,介紹了實時計算和數據湖結合的應用場景。(“數據驅動”時代,企業為什麼需要實時湖倉?) 在這篇文章中,我們將詳細介紹在數棧實時開發平臺內,實時湖倉的功能架構設計和具體實操案例。 功能架構介紹 實時湖倉並不是一個獨立的產品 ...
  • 使用Base克隆集群節點 先把Base關機,然後右鍵 - 管理 - 克隆 選擇完整克隆 克隆名字這裡叫node1 重覆步驟,克隆node2/node3 為了分類,創建了一個大數據集群文件夾 以下命令全是root許可權執行 配置固定IP # 修改主機名 hostnamectl set-hostname ...
  • mtools是一個基於Python實現的MongoDB工具集,旨在提供一系列功能,包括MongoDB日誌分析、報表生成以及簡易的資料庫安裝等。它由MongoDB原生的工程師單獨發起併進行開源維護。mtools包含了一些常用的組件,如mlaunch、mlogfilter、mplotqueries和ml... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...