TDinsight - 基于Grafana的TDengine零依賴監(jiān)控解決方案
語(yǔ)言: English 簡(jiǎn)體中文
TDinsight 是使用 TDengine 原生監(jiān)控?cái)?shù)據(jù)庫(kù)和 Grafana 對(duì) TDengine 進(jìn)行監(jiān)控的解決方案。
TDengine啟動(dòng)后,會(huì)自動(dòng)創(chuàng)建一個(gè)監(jiān)測(cè)數(shù)據(jù)庫(kù)log,并自動(dòng)將服務(wù)器的CPU、內(nèi)存、硬盤空間、帶寬、請(qǐng)求數(shù)、磁盤讀寫速度、慢查詢等信息定時(shí)寫入該數(shù)據(jù)庫(kù),并對(duì)重要的系統(tǒng)操作(比如登錄、創(chuàng)建、刪除數(shù)據(jù)庫(kù)等)以及各種錯(cuò)誤報(bào)警信息進(jìn)行記錄。通過(guò) Grafana 和 TDengine 數(shù)據(jù)源插件,TDinsight 將集群狀態(tài)、節(jié)點(diǎn)信息、插入及查詢請(qǐng)求、資源使用情況等進(jìn)行可視化展示,同時(shí)還支持vnode、dnode、mnode 節(jié)點(diǎn)狀態(tài)異常告警,為開發(fā)者實(shí)時(shí)監(jiān)控TDengine集群運(yùn)行狀態(tài)提供了便利。本文將指導(dǎo)用戶安裝 Grafana 服務(wù)器并通過(guò) TDinsight.sh 安裝腳本自動(dòng)安裝 TDengine 數(shù)據(jù)源插件及部署 TDinsight 可視化面板。
系統(tǒng)要求
要部署TDinsight,需要一個(gè)單節(jié)點(diǎn)的TDengine服務(wù)器或一個(gè)多節(jié)點(diǎn)的 TDengine 集群,以及一個(gè)Grafana服務(wù)器。此儀表盤需要 TDengine 2.3.3.0 及以上,并啟用 log 數(shù)據(jù)庫(kù)(monitor = 1)。
安裝 Grafana
我們建議在此處使用最新的Grafana 7 或 8 版本。您可以在任何支持的操作系統(tǒng)中,按照 Grafana 官方文檔安裝說(shuō)明 安裝 Grafana。
在 Debian 或 Ubuntu 上安裝 Grafana
對(duì)于 Debian 或 Ubuntu 操作系統(tǒng),建議使用 Grafana 鏡像倉(cāng)庫(kù)。使用如下命令從零開始安裝:
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key |\
sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" |\
sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
在 CentOS / RHEL 上安裝 Grafana
您可以從官方 YUM 鏡像倉(cāng)庫(kù)安裝。
sudo tee /etc/yum.repos.d/grafana.repo << EOF
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
sudo yum install grafana
或者用 RPM 安裝:
wget https://dl.grafana.com/oss/release/grafana-7.5.11-1.x86_64.rpm
sudo yum install grafana-7.5.11-1.x86_64.rpm
# or
sudo yum install \
https://dl.grafana.com/oss/release/grafana-7.5.11-1.x86_64.rpm
自動(dòng)部署 TDinsight
我們提供了一個(gè)自動(dòng)化安裝腳本 TDinsight.sh 腳本以便用戶快速進(jìn)行安裝配置。
您可以通過(guò) wget 或其他工具下載該腳本:
wget https://github.com/taosdata/grafanaplugin/releases/latest/download/TDinsight.sh
chmod +x TDinsight.sh
這個(gè)腳本會(huì)自動(dòng)下載最新的Grafana TDengine 數(shù)據(jù)源插件 和 TDinsight 儀表盤 ,將命令行選項(xiàng)中的可配置參數(shù)轉(zhuǎn)為 Grafana Provisioning 配置文件,以進(jìn)行自動(dòng)化部署及更新等操作。利用該腳本提供的告警設(shè)置選項(xiàng),你還可以獲得內(nèi)置的阿里云短信告警通知支持。
假設(shè)您在同一臺(tái)主機(jī)上使用 TDengine 和 Grafana 的默認(rèn)服務(wù)。運(yùn)行 ./TDinsight.sh 并打開 Grafana 瀏覽器窗口就可以看到 TDinsight 儀表盤了。
下面是 TDinsight.sh 的用法說(shuō)明:
Usage:
./TDinsight.sh
./TDinsight.sh -h|--help
./TDinsight.sh -n <ds-name> -a <api-url> -u <user> -p <password>
Install and configure TDinsight dashboard in Grafana on Ubuntu 18.04/20.04 system.
-h, -help, --help Display help
-V, -verbose, --verbose Run script in verbose mode. Will print out each step of execution.
-v, --plugin-version <version> TDengine datasource plugin version, [default: latest]
-P, --grafana-provisioning-dir <dir> Grafana provisioning directory, [default: /etc/grafana/provisioning/]
-G, --grafana-plugins-dir <dir> Grafana plugins directory, [default: /var/lib/grafana/plugins]
-O, --grafana-org-id <number> Grafana organization id. [default: 1]
-n, --tdengine-ds-name <string> TDengine datasource name, no space. [default: TDengine]
-a, --tdengine-api <url> TDengine REST API endpoint. [default: http://127.0.0.1:6041]
-u, --tdengine-user <string> TDengine user name. [default: root]
-p, --tdengine-password <string> TDengine password. [default: taosdata]
-i, --tdinsight-uid <string> Replace with a non-space ASCII code as the dashboard id. [default: tdinsight]
-t, --tdinsight-title <string> Dashboard title. [default: TDinsight]
-e, --tdinsight-editable If the provisioning dashboard could be editable. [default: false]
-E, --external-notifier <string> Apply external notifier uid to TDinsight dashboard.
Aliyun SMS as Notifier:
-s, --sms-enabled To enable tdengine-datasource plugin builtin Aliyun sms webhook.
-N, --sms-notifier-name <string> Provisioning notifier name.[default: TDinsight Builtin SMS]
-U, --sms-notifier-uid <string> Provisioning notifier uid, use lowercase notifier name by default.
-D, --sms-notifier-is-default Set notifier as default.
-I, --sms-access-key-id <string> Aliyun sms access key id
-K, --sms-access-key-secret <string> Aliyun sms access key secret
-S, --sms-sign-name <string> Sign name
-C, --sms-template-code <string> Template code
-T, --sms-template-param <string> Template param, a escaped json string like '{"alarm_level":"%s","time":"%s","name":"%s","content":"%s"}'
-B, --sms-phone-numbers <string> Comma-separated numbers list, eg "189xxxxxxxx,132xxxxxxxx"
-L, --sms-listen-addr <string> [default: 127.0.0.1:9100]
大多數(shù)命令行選項(xiàng)都可以通過(guò)環(huán)境變量獲得同樣的效果。
| 短選項(xiàng) | 長(zhǎng)選項(xiàng) | 環(huán)境變量 | 說(shuō)明 |
|---|---|---|---|
| -v | --plugin-version | TDENGINE_PLUGIN_VERSION | TDengine 數(shù)據(jù)源插件版本,默認(rèn)使用最新版。 |
| -P | --grafana-provisioning-dir | GF_PROVISIONING_DIR | Grafana 配置目錄,默認(rèn)為/etc/grafana/provisioning/ |
| -G | --grafana-plugins-dir | GF_PLUGINS_DIR | Grafana 插件目錄,默認(rèn)為/var/lib/grafana/plugins。 |
| -O | --grafana-org-id | GF_ORG_ID | Grafana 組織 ID,默認(rèn)為 1。 |
| -n | --tdengine-ds-name | TDENGINE_DS_NAME | TDengine 數(shù)據(jù)源名稱,默認(rèn)為TDengine。 |
| -a | --tdengine-api | TDENGINE_API | TDengine REST API 端點(diǎn)。默認(rèn)為http://127.0.0.1:6041。 |
| -u | --tdengine-user | TDENGINE_USER | TDengine 用戶名。 [默認(rèn)值:root] |
| -p | --tdengine-密碼 | TDENGINE_PASSWORD | TDengine密碼。 [默認(rèn):taosdata] |
| -i | --tdinsight-uid | TDINSIGHT_DASHBOARD_UID | TDinsight 儀表盤uid。 [默認(rèn)值:tdinsight] |
| -t | --tdinsight-title | TDINSIGHT_DASHBOARD_TITLE | TDinsight 儀表盤標(biāo)題。 [默認(rèn):TDinsight] |
| -e | --tdinsight-可編輯 | TDINSIGHT_DASHBOARD_EDITABLE | 如果配置儀表盤可以編輯。 [默認(rèn)值:false] |
| -E | --external-notifier | EXTERNAL_NOTIFIER | 將外部通知程序 uid 應(yīng)用于 TDinsight 儀表盤。 |
| -s | --sms-enabled | SMS_ENABLED | 啟用阿里云短信 webhook 內(nèi)置的 tdengine-datasource 插件。 |
| -N | --sms-notifier-name | SMS_NOTIFIER_NAME | 供應(yīng)通知程序名稱。[默認(rèn):TDinsight Builtin SMS] |
| -U | --sms-notifier-uid | SMS_NOTIFIER_UID | "Notification Channel" uid,默認(rèn)使用程序名稱的小寫,其他字符用 “-” 代替。 |
| -D | --sms-notifier-is-default | SMS_NOTIFIER_IS_DEFAULT | 將內(nèi)置短信通知設(shè)置為默認(rèn)值。 |
| -I | --sms-access-key-id | SMS_ACCESS_KEY_ID | 阿里云短信訪問密鑰id |
| -K | --sms-access-key-secret | SMS_ACCESS_KEY_SECRET | 阿里云短信訪問秘鑰 |
| -S | --sms-sign-name | SMS_SIGN_NAME | 簽名 |
| -C | --sms-template-code | SMS_TEMPLATE_CODE | 模板代碼 |
| -T | --sms-template-param | SMS_TEMPLATE_PARAM | 模板參數(shù)的 JSON 模板 |
| -B | --sms-phone-numbers | SMS_PHONE_NUMBERS | 逗號(hào)分隔的手機(jī)號(hào)列表,例如"189xxxxxxxx,132xxxxxxxx" |
| -L | --sms-listen-addr | SMS_LISTEN_ADDR | 內(nèi)置sms webhook監(jiān)聽地址,默認(rèn)為127.0.0.1:9100 |
假設(shè)您在主機(jī) tdengine 上啟動(dòng) TDengine 數(shù)據(jù)庫(kù),HTTP API 端口為 6041,用戶為 root1,密碼為 pass5ord。執(zhí)行腳本:
sudo ./TDinsight.sh -a http://tdengine:6041 -u root1 -p pass5ord
我們提供了一個(gè)“-E”選項(xiàng),用于從命令行配置 TDinsight 使用現(xiàn)有的通知通道(Notification Channel)。假設(shè)你的 Grafana 用戶和密碼是 admin:admin,使用以下命令獲取已有的通知通道的uid:
curl --no-progress-meter -u admin:admin http://localhost:3000/api/alert-notifications | jq
使用上面獲取的 uid 值作為 -E 輸入。
sudo ./TDinsight.sh -a http://tdengine:6041 -u root1 -p pass5ord -E existing-notifier
如果你想使用阿里云短信服務(wù)作為通知渠道,你應(yīng)該使用-s標(biāo)志啟用并添加以下參數(shù):
-N:Notification Channel 名,默認(rèn)為TDinsight Builtin SMS。-U:Channel uid,默認(rèn)是name的小寫,任何其他字符都替換為 - ,對(duì)于默認(rèn)的-N,其 uid 為tdinsight-builtin-sms。-I:阿里云短信訪問密鑰id。-K:阿里云短信訪問秘鑰。-S:阿里云短信簽名。-C:阿里云短信模板ID。-T:阿里云短信模板參數(shù),為JSON格式模板,示例如下'{"alarm_level":"%s","time":"%s","name":"%s","content":"%s "}'。有四個(gè)參數(shù):告警級(jí)別、時(shí)間、名稱和告警內(nèi)容。-B:電話號(hào)碼列表,以逗號(hào),分隔。
如果要監(jiān)控多個(gè) TDengine 集群,則需要設(shè)置多個(gè) TDinsight 儀表盤。設(shè)置非默認(rèn) TDinsight 需要進(jìn)行一些更改: -n -i -t 選項(xiàng)需要更改為非默認(rèn)名稱,如果使用 內(nèi)置短信告警功能,-N 和 -L 也應(yīng)該改變。
sudo ./TDengine.sh -n TDengine-Env1 -a http://another:6041 -u root -p taosdata -i tdinsight-env1 -t 'TDinsight Env1'
# 如果使用內(nèi)置短信通知
sudo ./TDengine.sh -n TDengine-Env1 -a http://another:6041 -u root -p taosdata -i tdinsight-env1 -t 'TDinsight Env1' \
-s -N 'Env1 SMS' -I xx -K xx -S xx -C SMS_XX -T '' -B 00000000000 -L 127.0.0.01:10611
請(qǐng)注意,配置數(shù)據(jù)源、通知Channel和儀表盤在前端是不可更改的。您應(yīng)該再次通過(guò)此腳本更新配置或手動(dòng)更改 /etc/grafana/provisioning 目錄(這是Grafana的默認(rèn)目錄,根據(jù)需要使用-P選項(xiàng)更改)中的配置文件。
特別地,當(dāng)您使用 Grafana Cloud 或其他組織時(shí),-O 可用于設(shè)置組織 ID。 -G 可指定 Grafana 插件安裝目錄。 -e 參數(shù)將儀表盤設(shè)置為可編輯。
手動(dòng)設(shè)置 TDinsight
安裝TDengine數(shù)據(jù)源插件
從 GitHub 安裝 TDengine 最新版數(shù)據(jù)源插件。
get_latest_release() {
curl --silent "https://api.github.com/repos/taosdata/grafanaplugin/releases/latest" |
grep '"tag_name":' |
sed -E 's/.*"v([^"]+)".*/\1/'
}
TDENGINE_PLUGIN_VERSION=$(get_latest_release)
sudo grafana-cli \
--pluginUrl https://github.com/taosdata/grafanaplugin/releases/download/v$TDENGINE_PLUGIN_VERSION/tdengine-datasource-$TDENGINE_PLUGIN_VERSION.zip \
plugins install tdengine-datasource
NOTE: 插件版本 3.1.7 以下,需要在配置文件 /etc/grafana/grafana.ini 中添加如下設(shè)置,以啟用未簽名插件。
[plugins]
allow_loading_unsigned_plugins = tdengine-datasource
啟動(dòng) Grafana 服務(wù)
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
登錄到 Grafana
在 Web 瀏覽器中打開默認(rèn)的 Grafana 網(wǎng)址:http://localhost:3000。
默認(rèn)用戶名/密碼都是 admin。Grafana 會(huì)要求在首次登錄后更改密碼。
添加TDengine數(shù)據(jù)源
指向 Configurations -> Data Sources 菜單,然后點(diǎn)擊 Add data source 按鈕。

搜索并選擇TDengine。

配置TDengine數(shù)據(jù)源。

保存并測(cè)試,正常情況下會(huì)報(bào)告 'TDengine Data source is working'。

導(dǎo)入儀表盤
指向 + / Create - import(或 /dashboard/import url)。

在 Import via grafana.com 位置鍵入儀表盤 ID 15167 并 Load。

導(dǎo)入完成后,TDinsight 的完整頁(yè)面視圖如下所示。

TDinsight 儀表盤詳細(xì)信息
TDinsight 儀表盤旨在提供TDengine 相關(guān)資源使用情況dnodes, mnodes, vnodes或數(shù)據(jù)庫(kù)的使用情況和狀態(tài)。
指標(biāo)詳情如下:
集群狀態(tài)

這部分包括集群當(dāng)前信息和狀態(tài),告警信息也在此處(從左到右,從上到下)。
- First EP:當(dāng)前TDengine集群中的
firstEp設(shè)置。 - Version:TDengine 服務(wù)器版本(master mnode)。
- Master Uptime: 當(dāng)前Master MNode 被選舉為 Master 后經(jīng)過(guò)的時(shí)間。
- Expire Time - 企業(yè)版過(guò)期時(shí)間。
- Used Measuring Points - 企業(yè)版已使用的測(cè)點(diǎn)數(shù)。
- Databases - 數(shù)據(jù)庫(kù)個(gè)數(shù)。
- Connections - 當(dāng)前連接個(gè)數(shù)。
- DNodes/MNodes/VGroups/VNodes:每種資源的總數(shù)和存活數(shù)。
- DNodes/MNodes/VGroups/VNodes Alive Percent:每種資源的存活數(shù)/總數(shù)的比例,啟用告警規(guī)則,并在資源存活率(1分鐘內(nèi)平均健康資源比例)不足100%時(shí)觸發(fā)。
- Measuring Points Used:?jiǎn)⒂酶婢?guī)則的測(cè)點(diǎn)數(shù)用量(社區(qū)版無(wú)數(shù)據(jù),默認(rèn)情況下是健康的)。
- Grants Expire Time:?jiǎn)⒂酶婢?guī)則的企業(yè)版過(guò)期時(shí)間(社區(qū)版無(wú)數(shù)據(jù),默認(rèn)情況是健康的)。
- Error Rate:?jiǎn)⒂镁瘓?bào)的集群總合錯(cuò)誤率(每秒平均錯(cuò)誤數(shù))。
- Variables:
show variables表格展示。
DNodes 狀態(tài)

- DNodes Status:
show dnodes的簡(jiǎn)單表格視圖。 - DNodes Lifetime:從創(chuàng)建 dnode 開始經(jīng)過(guò)的時(shí)間。
- DNodes Number:DNodes 數(shù)量變化。
- Offline Reason:如果有任何 dnode 狀態(tài)為離線,則以餅圖形式展示離線原因。
MNode 概述

- MNodes Status:
show mnodes的簡(jiǎn)單表格視圖。 - MNodes Number:類似于
DNodes Number,MNodes 數(shù)量變化。
請(qǐng)求

- Requests Rate(Inserts per Second):平均每秒插入次數(shù)。
- Requests (Selects):查詢請(qǐng)求數(shù)及變化率(count of second)。
- Requests (HTTP):HTTP 請(qǐng)求數(shù)和請(qǐng)求速率(count of second)。
數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)使用情況,對(duì)變量 $database 的每個(gè)值即每個(gè)數(shù)據(jù)庫(kù)進(jìn)行重復(fù)多行展示。
- STables:超級(jí)表數(shù)量。
- Total Tables:所有表數(shù)量。
- Sub Tables:所有超級(jí)表子表的數(shù)量。
- Tables:所有普通表數(shù)量隨時(shí)間變化圖。
- Tables Number Foreach VGroups:每個(gè)VGroups包含的表數(shù)量。
DNode 資源使用情況

數(shù)據(jù)節(jié)點(diǎn)資源使用情況展示,對(duì)變量 $fqdn 即每個(gè)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行重復(fù)多行展示。包括:
- Uptime:從創(chuàng)建 dnode 開始經(jīng)過(guò)的時(shí)間。
- Has MNodes?:當(dāng)前 dnode 是否為 mnode。
- CPU Cores:CPU 核數(shù)。
- VNodes Number:當(dāng)前dnode的VNodes數(shù)量。
- VNodes Masters:處于master角色的vnode數(shù)量。
- Current CPU Usage of taosd:taosd進(jìn)程的CPU使用率。
- Current Memory Usage of taosd:taosd進(jìn)程的內(nèi)存使用情況。
- Disk Used:taosd數(shù)據(jù)目錄的總磁盤使用百分比。
- CPU Usage:進(jìn)程和系統(tǒng) CPU 使用率。
- RAM Usage:RAM 使用指標(biāo)時(shí)間序列視圖。
- Disk Used:多級(jí)存儲(chǔ)下每個(gè)級(jí)別使用的磁盤(默認(rèn)為 level0 級(jí))。
- Disk Increasing Rate per Minute:每分鐘磁盤用量增加或減少的百分比。
- Disk IO:磁盤IO速率。
- Net IO:網(wǎng)絡(luò)IO,除本機(jī)網(wǎng)絡(luò)之外的總合網(wǎng)絡(luò)IO速率。
登錄歷史

目前只報(bào)告每分鐘登錄次數(shù)。
taosAdapter

包含 taosAdapter 請(qǐng)求統(tǒng)計(jì)和狀態(tài)詳情。包括:
- http_request: 包含總請(qǐng)求數(shù),請(qǐng)求失敗數(shù)以及正在處理的請(qǐng)求數(shù)
- top 3 request endpoint: 按終端分組,請(qǐng)求排名前三的數(shù)據(jù)
- Memory Used: taosAdapter 內(nèi)存使用情況
- latency_quantile(ms): (1, 2, 5, 9, 99)階段的分位數(shù)
- top 3 failed request endpoint: 按終端分組,請(qǐng)求失敗排名前三的數(shù)據(jù)
- CPU Used: taosAdapter cpu 使用情況
升級(jí)
通過(guò) TDinsight.sh 腳本安裝的 TDinsight,可以通過(guò)重新運(yùn)行該腳本就可以升級(jí)到最新的Grafana插件和TDinsight Dashboard。
手動(dòng)安裝的情況下,可按照上述步驟自行安裝新的Grafana插件和Dashboard。
卸載
通過(guò) TDinsight.sh 腳本安裝的 TDinsight,可以使用命令行 TDinsight.sh -R 清理相關(guān)資源。
手動(dòng)安裝時(shí),要完全卸載TDinsight,需要清理以下內(nèi)容:
- Grafana 中的 TDinsight Dashboard。
- Grafana 中的 Data Source 數(shù)據(jù)源。
- 從插件安裝目錄刪除
tdengine-datasource插件。
整合的Docker示例
git clone --depth 1 https://github.com/taosdata/grafanaplugin.git
cd grafanaplugin
根據(jù)需要在 docker-compose.yml 文件中修改:
version: "3.7"
services:
grafana:
image: grafana/grafana:7.5.10
volumes:
- ./dist:/var/lib/grafana/plugins/tdengine-datasource
- ./grafana/grafana.ini:/etc/grafana/grafana.ini
- ./grafana/provisioning/:/etc/grafana/provisioning/
- grafana-data:/var/lib/grafana
environment:
TDENGINE_API: ${TDENGINE_API}
TDENGINE_USER: ${TDENGINE_USER}
TDENGINE_PASS: ${TDENGINE_PASS}
SMS_ACCESS_KEY_ID: ${SMS_ACCESS_KEY_ID}
SMS_ACCESS_KEY_SECRET: ${SMS_ACCESS_KEY_SECRET}
SMS_SIGN_NAME: ${SMS_SIGN_NAME}
SMS_TEMPLATE_CODE: ${SMS_TEMPLATE_CODE}
SMS_TEMPLATE_PARAM: "${SMS_TEMPLATE_PARAM}"
SMS_PHONE_NUMBERS: $SMS_PHONE_NUMBERS
SMS_LISTEN_ADDR: ${SMS_LISTEN_ADDR}
ports:
- 3000:3000
volumes:
grafana-data:
替換docker-compose.yml中的環(huán)境變量或保存環(huán)境變量到.env文件,然后用docker-compose up啟動(dòng)Grafana。docker-compose 工具的具體用法參見 Docker Compose Reference
docker-compose up -d
TDinsight 已經(jīng)通過(guò) Provisioning 部署完畢,請(qǐng)到 http://localhost:3000/d/tdinsight/ 查看儀表盤。

