摘要:本文為你帶來如何使用華為雲數據庫GaussDB(for Influx) + Grafana搭建億級時間線數據的監控系統。
隨着雲計算規模越來越大,以及物聯網應用逐漸普及,在物聯網(AIoT)以及運維監控(AIOps)領域,存在海量的時序數據需要存儲管理。我們日常在生活中經常見到城市的空氣質量、風力和溫度等數據,都需要用到時序數據庫,再通過監控系統和大數據處理系統利用時序數據庫的數據查詢和計算分析功能將業務監控和分析結果實時展現出來。讀完本文你將很快學會使用華為雲數據庫GaussDB(for Influx) + Grafana搭建億級時間線數據的監控系統。
在真實的場景中,監控系統主要負責監控指標的采集、展示、分析和告警,其作用在於監控業務整體的運行情況。系統采集的指標通常和業務運維是強相關的,比如通用指標有服務器資源數據(CPU,內存,磁盤空間,帶寬,網絡時延),比如業務相關指標,以視頻會議的應用為例,包括創建會議事件相關信息,會議接入相關信息,接口調用狀態信息等。
指標數據采集與存儲
指標數據是典型的時序數據,適合采用時序數據庫進行存儲。GaussDB(for Influx)為華為雲時序數據庫服務,購買即可使用,無需安裝部署。
采集業務相關指標數據通常有寫時序數據庫和寫日志兩種方法,其中寫時序數據庫最為直接,適合於中小型應用。大型企業級應用通常采用寫日志的方式,由Kafka對日志進行收集和聚合,再利用Telegraf取出Kafka數據並寫入時序數據庫。
Telegraf采集Kafka數據的簡單配置如下:
[[inputs.kafka_consumer]] ## Kafka brokers. ## 這里設置Kafka brokers的IP地址 brokers = ["192.168.100.10:9092"] ## Topics to consume. topics = ["telegraf"] ...... ## Data format to consume. ## Each data format has its own unique set of configuration options, read ## more about them here: ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md ## 這里設置數據格式,其他格式參考 DATA_FORMAT_INPUT.md,Logfmt為日志格式。 data_format = "Logfmt"
Telegraf寫入時序數據庫的配置如下:
# Configuration for sending metrics to InfluxDB [[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] ## 這里設置華為雲GaussDB(for Influx)的配置的ELB IP地址或者節點內網IP地址 urls=[“https://rwuser:password@IP:8635”] ## The target database for metrics; will be created as needed. ## For UDP url endpoint database needs to be configured on server side. ## 設置數據庫名稱(默認telegraf) database = "telegraf" ... ... ## HTTP Basic Auth ## 這里設置GaussDB(for Influx)數據庫用戶名和密碼,實際密碼替換password username = "rwuser" password = "password" ## HTTP User-Agent # user_agent = "telegraf" ## UDP payload size is the maximum packet size to send. # udp_payload = "512B" ## Optional TLS Config for use on HTTP connections. # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification ## 這里設置跳過ssl驗證 # insecure_skip_verify = true
以上配置中,中文注釋的部分是必須設置的。GaussDB(for Influx)的用戶名默認為rwuser,不可更改。配置時,選擇時序數據庫的其中一個節點內網ip或者ELB ip替換urls中的IP,用GaussDB(for Influx)實例的密碼替換password,如果密碼包含如下特殊字符,需換成 ASIIC 碼形式輸入。
~ : %7E,! : %21,@ : %40,# : %23,$ : %24
% : %25,^ : %5E,& : %26,* : %2A,? : %3F
例如密碼:“Huawei@123”,轉換后為 “Huawei%40123”。
在應用程序中直接寫入GaussDB(for Influx)有所不同,需要借助驅動程序幫助完成。以Python為例:
第一步:安裝數據庫驅動
pip install influxdb # Debian Or Ubuntu系統上使用如下命令 sudo apt-get install python-influxdb
第二步:連接GaussDB(for Influx)
# Python from influxdb import InfluxDBClient ## 使用GaussDB(for Influx)的ELB IP或者實例節點的IP替換填寫host,用戶密碼填寫password, ## 並指定連接數據庫database。 client = InfluxDBClient(host='localhost', port=8635, username='rwuser', password='password', database='telegraf', ssl=True, verify_ssl=False)
第三步:數據寫入
json_body = [ { "measurement": "my_tab", "tags": { "host": "server01", "region": "us-west" }, "time": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.localtime()), "fields": { "used_cpu": cpu_used_rate, "used_mem": mem_used_rate } }] client.write_points(json_body)
Java語言的驅動程序,可以參考https://github.com/influxdata/influxdb-java
Grafana數據展示
Grafana是一個跨平台、開源的數據可視化平台。用戶配置連接的數據源之后,Grafana可以在網絡瀏覽器里顯示數據圖表和警告。
服務端啟動Grafana后,通過瀏覽器訪問:
## 這里的IP可以是雲上服務器的彈性IP,也可以是本地自建服務器的Ip地址。 http://IP:3000
登陸Grafana的首頁如下圖所示。
1.展示數據第一步:創建數據源,點擊如下圖中的紅框位置。
選擇InfluxDB,因為GaussDB(For Influx)完全兼容InfluxDB
填寫如下參數:
- URL:https://rwuser:password@IP:8635 。IP為數據庫實例的內網ip(參考2.1步驟(1)), 用rwuser密碼替換password(參考1.1步驟(6)),如果密碼包含如下特殊字符,需換成 ASIIC 碼形式輸入。
~ : %7E,! : %21,@ : %40,# : %23,$ : %24
% : %25,^ : %5E,& : %26,* : %2A,? : %3F
例如密碼:“Huawei@123”,轉換后為 “Huawei%40123”。
- Auth:打開選項Basic auth 和skip TSL Verify。
- Basic Auth Details:
User:rwuser
Password:購買數據庫實例時設置(參考1.1步驟(6)),如“nJa#w7f3”。
- InfluxDB Details:
Database:telegraf(也可以填寫其他自己創建的數據庫)。
User:rwuser
Password:購買數據庫實例時設置(參考1.1步驟(6)),如“nJa#w7f3”。
- 點擊“保存”(save)。
數據展示第二步:創建數據看板
點擊首頁DASHBOARDS創建看板,或者側邊“+”快捷按鈕。
重點配置項(詳細參見截圖紅框部分):
- Visualization:Graph
- 展示時間范圍:last 1 hour
- 數據更新時間間隔:1m
- 數據源名稱:InfluxDB-DataSource
查詢語句配置如下(以展示服務器CPU利用率為例,從時序數據庫的表cpu中查詢usage_user,按1m的分組時間間隔求平均值,時間線是cpu=cpu-total):
FROM autogen cpu Where cpu = cpu-total SELECT field (usage_user) mean () GROUP BY time (1m) fill (0)
面板中的每個圖都是可以編輯的,也可以設置告警。
總結
隨着雲計算和物聯網的發展,數據規模急劇增加,監控系統的核心在於時序數據庫,一個高可用、高性能、企業級的時序數據庫對監控系統的穩定起決定性作用。
GaussDB(for Influx)是一個雲原生存儲與計算分離架構的時序數據庫,支持億級時間線,具備高可靠、高性能,非常適合DevOps場景下的海量時間線數據的存儲,是監控系統最佳的選擇。
作為華為ICT基礎設施業務面向全球開發者的年度盛會,華為開發者大會2021(Cloud)將於2021年4月24日-26日在深圳舉行。本屆大會以#每一個開發者都了不起#為主題,將匯聚業界大咖、華為科學家、頂級技術專家、天才少年和眾多開發者,共同探討和分享雲、計算、人工智能等最新ICT技術在行業的深度創新和應用。智能時代,每一個開發者都在創造一往無前的奔騰時代。世界有你,了不起!
點擊鏈接,了解大會詳細信息:https://developer.huaweicloud.com/HDC.Cloud2021.html
本文分享自華為雲社區《HDC.Cloud2021|如何使用華為雲GaussDB(for Influx) + Grafana搭建億級時間線數據的監控系統》,原文作者:心機胖 。