在數(shu)字化(hua)轉(zhuan)型的過程中,監控(kong)與告(gao)警(jing)功(gong)(gong)能的優化(hua)對(dui)保(bao)障系統的穩定運行至關重(zhong)要。本篇文章是“2024,我想和 TDengine 談談”征(zheng)文活動的三等獎作品(pin)之一,作者張世偉詳細介紹(shao)了如(ru)(ru)何(he)利用 TDengine、taosKeeper 和 TDinsight 實現對(dui) TDengine 服務(wu)的狀態監控(kong)與告(gao)警(jing)功(gong)(gong)能。他通過容器化(hua)安(an)裝 TDengine 和 Grafana,演示了如(ru)(ru)何(he)配置(zhi) Grafana 數(shu)據源、導入 TDinsight 儀表(biao)板、以及如(ru)(ru)何(he)設(she)置(zhi)告(gao)警(jing)規則和通知策略。歡迎大家閱讀(du)。
如(ru)果(guo)沒有監(jian)控(kong),那(nei)么最(zui)好的情(qing)況(kuang)是沒有問題(ti)發生,最(zui)糟糕的情(qing)況(kuang)則是問題(ti)發生了但沒有被發現。——《Prometheus監(jian)控(kong)實戰》
在(zai)今年的 10 月 10 日我收到了(le) TDengine 官(guan)方微信公眾號的一條推送,摘要如下:
今(jin)天我(wo)們(men)非(fei)常高興(xing)地(di)宣(xuan)布,TDengine 3.3.3.0 版本正式發布。本次更(geng)新引入(ru)了(le)多項重(zhong)要功能(neng)(neng)和(he)性能(neng)(neng)優化(hua),旨在(zai)為用戶提供(gong)更(geng)高效、更(geng)靈(ling)活的數(shu)據(ju)(ju)解(jie)決方案。在(zai) 3.3.3.0 版本中(zhong),我(wo)們(men)著重(zhong)優化(hua)了(le)監控和(he)告(gao)警功能(neng)(neng),新增了(le)多種常見的 MySQL 函數(shu),并增強了(le)對 MongoDB 數(shu)據(ju)(ju)源的支(zhi)持。這些改進將為用戶在(zai)物聯網(wang)和(he)大(da)數(shu)據(ju)(ju)應用中(zhong)提供(gong)更(geng)強大(da)的功能(neng)(neng),助力大(da)家(jia)在(zai)數(shu)字化(hua)轉型過程中(zhong)實現更(geng)大(da)的成功。
時(shi)(shi)序數(shu)據庫(ku)作為(wei)軟件項(xiang)目的核心基礎設施(shi),其運行狀態(tai)的實時(shi)(shi)監(jian)控(kong)至(zhi)關重要。今天(tian),我們(men)將體驗一下(xia)經過重優化(hua)(hua)的監(jian)控(kong)和告警功(gong)能(neng)。早在 TDengine 2.1.2.0 發布(bu)時(shi)(shi),就可(ke)以將 TDengine 的日志(zhi)數(shu)據表(biao)內(nei)容可(ke)視化(hua)(hua)展示(shi)在 Grafana 儀表(biao)盤(pan)上;隨(sui)著官方不(bu)斷增強監(jian)控(kong)能(neng)力,TDinsight 應運而(er)生,成(cheng)為(wei)與 Grafana 深度(du)集成(cheng)的可(ke)視化(hua)(hua)工(gong)具。這篇文章(zhang)將演示(shi)如何通過容器化(hua)(hua)安裝 TDengine 與 TDinsight 監(jian)控(kong)大盤(pan),并結(jie)合 taosKeeper 和 TDinsight 實現對 TDengine 服務狀態(tai)的監(jian)測(ce),以及如何通過釘釘推(tui)送告警消息。
虛擬資源
在(zai)這次實踐中,我共用到了 2 臺(tai)虛機,1 臺(tai)作為(wei)應用服務(wu)節點,1 臺(tai)作為(wei)運(yun)維監控節點。

基本(ben)選(xuan)用(yong)當前最新(xin)版本(ben),即將安裝(zhuang)的 Grafana 及組件版本(ben)信(xin)息如下:
- Grafana 版本:11.2.0
- TDengine 版本:3.3.3.0(自帶了 taosAdapter 與 taosKeeper)
系統環境
[root@ops ~]# uname -a
Linux ops 5.10.0-182.0.0.95.oe2203sp3.x86_64 #1 SMP Sat Dec 30 13:10:36 CST 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@ops ~]# cat /proc/version
Linux version 5.10.0-182.0.0.95.oe2203sp3.x86_64 (root@dc-64g.compass-ci) (gcc_old (GCC) 10.3.1, GNU ld (GNU Binutils) 2.37) #1 SMP Sat Dec 30 13:10:36 CST 2023
svc 節點:使用 Docker 安裝 TDengine 3.3.3.0
通過 Docker 安裝 TDengine 3.3.3.0,創建名為 tdengine 的容器(qi),并掛載數據與日志卷目錄(lu)。
[root@svc opt]# docker pull tdengine/tdengine:3.3.3.0
[root@svc opt]# docker run -d --name tdengine -v /opt/tdengine/data:/var/lib/taos \
-v /opt/tdengine/log:/var/log/taos \
-p 6030:6030 -p 6041:6041 -p 6043-6060:6043-6060 -p 6043-6060:6043-6060/udp tdengine/tdengine:3.3.3.0
0b9e36feac54d787114e5eed8b5dc7fa132dcd29d736b7489733194a27f28cab
使用客戶端工具驗證 TDengine 安裝效果

- 通過瀏覽器驗證 metrics 端點
在瀏覽器中訪問 //192.168.44.168:6043/metrics,即可查看 TDengine 的監控指標。這些指標默認會被寫入 TDengine 的 log 數據庫,Grafana 則通過讀取該數據庫中(zhong)的數據表來(lai)實現監控數據的可視化展示(shi)。
注:taosKeeper 是(shi) TDengine 3.0 版本的監(jian)控指(zhi)標(biao)導(dao)出工(gong)具,通過簡(jian)單配置即可(ke)獲取 TDengine 的運行狀(zhuang)態(tai)(這些指(zhi)標(biao)可(ke)以導(dao)入到(dao) Prometheus,本文直接使(shi)用 TDengine 存儲(chu))。
ops 節點:使用 Docker Compose 安裝 Grafana
參考文章:《云(yun)原生之運維監(jian)控(kong)實踐-OpenEuler22.03SP3上安裝Prometheus與Grafana實現主(zhu)機(ji)狀態(tai)監(jian)測》
在安裝 Grafana 的主機上(shang),首(shou)先需要(yao)安裝 TDinsight,之后才能在 Grafana 數(shu)據(ju)源(yuan)中(zhong)添加 TDengine 數(shu)據(ju)源(yuan)。
# 編輯TDinsight下載腳本
[root@ops monitoring]# vi tdinsight-plugin.sh
get_latest_release() {
curl --silent "//api.github.com/repos/taosdata/grafanaplugin/releases/latest" |
grep '"tag_name":' |
sed -E 's/.*"v([^"]+)".*/\1/'
}
TDENGINE_PLUGIN_VERSION=$(get_latest_release)
grafana-cli \
--pluginUrl //github.com/taosdata/grafanaplugin/releases/download/v$TDENGINE_PLUGIN_VERSION/tdengine-datasource-$TDENGINE_PLUGIN_VERSION.zip \
plugins install tdengine-datasource
# 復制下載腳本到Grafana容器中
[root@ops monitoring]# docker cp tdinsight-plugin.sh ops-grafana:/usr/share/grafana
Successfully copied 2.05kB to ops-grafana:/usr/share/grafana
# 下載并安裝TDinsight插件
[root@ops monitoring]# docker exec ops-grafana bash tdinsight-plugin.sh
Deprecation warning: The standalone 'grafana-cli' program is deprecated and will be removed in the future. Please update all uses of 'grafana-cli' to 'grafana cli'
? Downloaded and extracted tdengine-datasource v3.6.0 zip successfully to /var/lib/grafana/plugins/tdengine-datasource
Please restart Grafana after installing or removing plugins. Refer to Grafana documentation for instructions if necessary.
# 重啟Grafana容器
[root@ops monitoring]# docker restart ops-grafana
ops-grafana
TDinsight 監控實戰
通過瀏覽器訪問 進(jin)入 Grafana。
配置數據源:
- 在左側菜單中點擊 “Add new connection”。
- 選擇或搜索 “Data Sources”。
- 點擊 “Add data source”,然后選擇 “TDengine Datasource”。
- 在 “HTTP” 部分,輸入 TDengine 的地址,例如:
//192.168.44.168:6041。 - 點擊 “Save & Test”,確認連接成功。


導入儀表板
- 查看現成的儀表板
Grafana 官方儀表板目錄:,在這個頁面上,用戶可以找到并共享各種現成的 Grafana 儀表板,涵蓋系統性能、應用監控、網絡流量等多種監控需求。根據需求,用戶可以搜索并導入適合的儀表板,提升監控效率和可視化效果。比如,搜索 “TDengine” 后,可以找到 TDinsight for 3.x 儀表(biao)板,點擊查看詳細 UI 效果,并復(fu)制儀表(biao)板 ID(如:18180)。
導入現成的儀表板:
- 在 Grafana 右側菜單中點擊 “New” 按鈕,選擇 “Import”。
- 在輸入框中,直接輸入儀表板 ID【常用的主機監控儀表板 ID 是 18180(TDinsight for 3.x)】,或者上傳 JSON 文件。
- 點擊 “Load”,然后選擇已配置好的數據源。
- 點擊 “Import” 完成導入。


TDinsight 監控效果
TDinsight 是一款結合(he)監控(kong)數據(ju)庫(ku)和(he) Grafana 的(de)(de) TDengine 監控(kong)解(jie)決方案。它可以實時可視化集(ji)群(qun)狀態、節點信息、插入(ru)與查(cha)詢請求、資(zi)源使(shi)用情況等關鍵指標,同時支持(chi)對 vnode、dnode 和(he) mnode 節點的(de)(de)狀態進(jin)行異常告警。


TDinsight 告警實戰
一(yi)個好警報的(de)關鍵是能夠在(zai)正(zheng)確(que)(que)(que)的(de)時(shi)間、以正(zheng)確(que)(que)(que)的(de)理由和正(zheng)確(que)(que)(que)的(de)速度發送,并在(zai)其中放入有用的(de)信息(xi)。
告警原理說明:
- Grafana 定期查詢數據源并評估告警規則中定義的條件。
- 當條件被觸發時,則會觸發告警實例。
- 生成的告警實例根據標簽匹配規則,路由至相應的通知策略。
- 通知會發送到策略中指定的聯系點。

配置告警規則
這里我們(men)使(shi)用 TDinsight 默認提供的(de)(de)告警規則。要建立(li)一個(ge)出色(se)的(de)(de)通知(zhi)系統,我們(men)需要考慮(lv)以(yi)下基礎(chu)信(xin)息,而基于(yu) Grafana 的(de)(de) TDinsight 監控方案做到了:
- 哪些問題需要通知;
- 誰需要被告知;
- 如何告知他們;
- 多久告知他們一次。

配置推送方式
TDengine 支持多種推送方式,這里選擇釘釘推送。首先,從釘釘中獲取機器人的 access_token,然后將推送方式命名為 DingDingPush。在配置中,將消息類型(Message Type)更改為 ActionCard。


配置通知策略
默(mo)認的通知策略是郵(you)件(jian)方式(shi),這里直接調(diao)整為我(wo)們的 DingDingPush 。

模擬壓力告警
進入 TDengine 容器內部,執行 taosBenchmark 命令。為了觸發告警,我們在 test 數(shu)(shu)據庫中(zhong)創建了(le) 10000 張(zhang)表,每張(zhang)表插入(ru) 200 萬(wan)條(tiao)數(shu)(shu)據。由于容(rong)器磁盤空間的限制,這將導(dao)致磁盤告警的觸(chu)發,進而(er)導(dao)致 DNodes 和 VNodes 停止工作,從(cong)而(er)觸(chu)發相應(ying)的告警。
[root@ops monitoring]# docker exec -it tdengine /bin/bash
root@9118ddbfa74b:~# taosBenchmark -I stmt -n 2000000 -t 10000
在 TDinsight 的儀表(biao)板上可以看(kan)到磁(ci)盤使用率已到達 95%,根據報警規(gui)則設(she)置,即將(jiang)觸(chu)發告警。


告警觸發推送與告警解除推送
當 taosBenchmark 寫入數據逐(zhu)漸將磁(ci)盤空間耗盡時,會(hui)觸(chu)發告警,進而會(hui)通(tong)(tong)過我們(men)配置的告警方(fang)式(shi)和策略(lve)進行推(tui)送(song),本文中(zhong)我們(men)將通(tong)(tong)過釘釘接收(shou)到推(tui)送(song)消息:

當我在 taos 命令行中執行 drop database test; 刪除 test 數據庫后,TDengine 服務恢復正(zheng)常。經過一段時間(jian)(一個告警(jing)監測周期),釘釘上會(hui)自動收(shou)到各(ge)類告警(jing)解除的通知。
[root@localhost monitoring]# docker exec -it tdengine /bin/bash
root@9118ddbfa74b:~# taos
Welcome to the TDengine Command Line Interface, Client Version:3.3.3.0
Copyright (c) 2023 by TDengine, all rights reserved.
********************************* Tab Completion *************************************
* The TDengine CLI supports tab completion for a variety of items, *
* including database names, table names, function names and keywords. *
* The full list of shortcut keys is as follows: *
* [ TAB ] ...... complete the current word *
* ...... if used on a blank line, display all supported commands *
* [ Ctrl + A ] ...... move cursor to the st[A]rt of the line *
* [ Ctrl + E ] ...... move cursor to the [E]nd of the line *
* [ Ctrl + W ] ...... move cursor to the middle of the line *
* [ Ctrl + L ] ...... clear the entire screen *
* [ Ctrl + K ] ...... clear the screen after the cursor *
* [ Ctrl + U ] ...... clear the screen before the cursor *
****************************************************************************************
Server is TDengine Community Edition, ver:3.3.3.0 and will never expire.
taos> drop database test;
Drop OK, 0 row(s) affected (1.476353s)

注意:在 Prometheus 和 AlertManager 的生態中,alertstate 字段表(biao)示報警的狀態,可能有以下幾種取(qu)值:
- Firing:表示報警已觸發。當報警規則條件滿足時,報警狀態會變為 Firing,表示觸發了報警。通常情況下,報警會發送給相關的接收器或通知渠道,以便進行處理。
- Resolved:表示報警已解決。當報警條件不再滿足時,報警狀態會變為 Resolved,表示報警已經解決。這意味著報警規則所監控的指標已經恢復到正常狀態,不再需要進一步的處理。
- Pending:表示報警處于等待狀態。當報警規則的條件滿足時,報警狀態會從 Firing 變為 Pending,表示報警處于等待狀態。在報警狀態從 Firing 到 Resolved 之間的過渡期間,報警可能會處于 Pending 狀態,這通常是因為報警規則定義了一些延遲或滯后的條件。
結語
If you can’t measure it, you can’t improve it!
沒有度量就沒有改進。本文介紹(shao)了如何(he)利用 TDengine、taosKeeper 和(he) TDinsight 實(shi)現(xian)對 TDengine 服(fu)務的(de)(de)(de)狀態(tai)監測與告(gao)警功(gong)能(neng),詳細記錄了在兩臺虛擬機上進行的(de)(de)(de)安(an)裝(zhuang)過(guo)程,包括在服(fu)務節點上使用 Docker 安(an)裝(zhuang)最新(xin)版的(de)(de)(de) TDengine 3.3.3.0,以及在監控節點上配置(zhi) Grafana 和(he) TDinsight 插件(jian)。此(ci)外(wai),文章還展示(shi)了如何(he)配置(zhi) Grafana 數(shu)據源、導(dao)入(ru) TDinsight 儀表(biao)板、設置(zhi)告(gao)警規則和(he)通(tong)知策略。最后(hou),通(tong)過(guo)模擬壓力(li)測試,演(yan)示(shi)了如何(he)觸發磁盤空間(jian)不足的(de)(de)(de)告(gao)警,并(bing)通(tong)過(guo)釘釘接收告(gao)警推送與解除通(tong)知。
本(ben)實(shi)踐充(chong)分展(zhan)示了 TDengine 生態(tai)系(xi)統在監控(kong)和告(gao)警方面(mian)的強大(da)功能,為數(shu)據庫管理員和運維工(gong)程師提供了高效、可(ke)靠的監控(kong)解決方案。


























