本次監控將採用Prometheus、Grafana可視化工具以及postgres_exporter對OpenTenBase進行全面監控和優化。首先,通過Docker安裝了Prometheus,配置了必要的文件形式進行服務發現,實現了系統正常監控。接著,使用Docker啟動Grafana,並配置數據源... ...
本次監控將採用Prometheus、Grafana可視化工具以及postgres_exporter對OpenTenBase進行全面監控和優化。
安裝監控
Docker安裝
1、Docker要求 CentOs 系統的內核版本高於 3.10
通過 uname-r命令查看你當前的內核版本
uname -r
2、使用 root 許可權登錄 Centos。確保 yum 包更新到最新。
yum -y update
3、卸載舊版本(如果安裝過舊版本的話)
sudo yum remove -y docker*
4、安裝需要的軟體包,yum-utl 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
yum install -y yum-utils
5、設置yum源,並更新yum 的包索引
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
6、安裝docker
yum install -y docker-ce
8、啟動並加入開機啟動
systemctl start docker && systemctl enable docker
9、驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了)
docker version
10、配置docker鏡像
cd /etc/docker
然後編輯vim daemon.json
{
"registry-mirrors": ["https://jbw52uwf.mirror.aliyuncs.com"]
}
保存退出。
重啟docker服務
systemctl daemon-reload
systemctl restart docker
下載Prometheus
在進行監控優化時,您可以從Prometheus官方網站下載最新版:https://prometheus.io/download/
您可以選擇下載源代碼並解壓使用,也可以通過Docker直接啟動。本教程將重點介紹使用Docker進行快速部署。
執行命令:
docker run -d -p 9090:9090 -v /etc/prometheus:/etc/prometheus prom/prometheus
完成掛載後,請對配置文件進行必要的修改以確保系統正常監控。
vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["192.168.56.10:9090"]
# 主要修改這裡,添加文件形式的掃描
- job_name: "node"
file_sd_configs:
- refresh_interval: 10s
files:
- "/etc/prometheus/conf/node*.yaml"
當前Prometheus的配置採用文件形式進行服務發現。在修改配置時,無需重新啟動,系統將自動更新並生效,更新間隔為10秒。
為了修改相關配置文件,首先創建一個名為conf的目錄(mkdir conf
)然後通過cd命令進入目錄(cd /etc/prometheus/conf
)接著使用vim編輯器來修改文件(vim node-ms.yaml
)
- targets:
- "ip:port"
labels:
hostname: pg
為了自定義配置信息,請將相應的IP地址和主機名修改為您自己的信息。完成修改後,啟動Prometheus服務,然後您可以通過訪問http://您的IP地址:9090/ 來查看Prometheus的監控數據。
下載Grafana
為了確保配置的持久性,我們可以通過Docker容器以持久化形式啟動Grafana。您可以使用以下命令來啟動Grafana容器,併在容器重啟後保留配置信息:
docker run -d -p 3000:3000 --name=grafana --volume grafana-storage:/var/lib/grafana grafana/grafana-enterprise
啟動後,您可以在瀏覽器中輸入http://您的IP地址:3000/
使用預設的用戶名和密碼admin/admin登錄,以查看Grafana監控界面。
配置數據源
在這裡,您只需填寫URL(http://ip:9090/ )即可保存配置。這個URL指向Prometheus的地址,Grafana將通過該地址與Prometheus建立連接,從而獲取數據用於展示監控面板。
下載Exporter
Prometheus官方提供了豐富的Exporter,您可以在https://prometheus.io/docs/instrumenting/exporters/ 找到相關信息。
我們可以安裝postgres_exporter來監控資料庫,官方地址為https://github.com/prometheus-community/postgres_exporter。
同樣可以以Docker啟動:
docker run --net=host -e DATA_SOURCE_NAME="postgresql://opentenbase:@ip:port/postgres?sslmode=disable" quay.io/prometheuscommunity/postgres-exporter
ip和host修改為自己的信息即可,官方示例中對opentenbase用戶並沒有設置登錄密碼,我們也不設置密碼進行登錄。
啟動後,我們首先登錄到資料庫中,然後進行資料庫用戶的相關設置。
CREATE OR REPLACE FUNCTION __tmp_create_user() returns void as $$
BEGIN
IF NOT EXISTS (
SELECT -- SELECT list can stay empty for this
FROM pg_catalog.pg_user
WHERE usename = 'postgres_exporter') THEN
CREATE USER postgres_exporter;
END IF;
END;
$$ language plpgsql;
SELECT __tmp_create_user();
DROP FUNCTION __tmp_create_user();
ALTER USER postgres_exporter WITH PASSWORD 'password';
ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;
GRANT CONNECT ON DATABASE postgres TO postgres_exporter;
-- OpenTenBase中集成的PostgreSQL版本是10,所以可以執行以下語句,歷史版本可前往開源地址進行查看。
GRANT pg_monitor to postgres_exporter;
postgres_exporter啟動報錯修複
panic: Error converting setting "session_memory_size" value "3M" to float: strconv.ParseFloat: parsing "3M": invalid syntax
goroutine 42 [running]:
main.(*pgSetting).metric(0xc000081720, 0xc0000d5c50?)
/app/cmd/postgres_exporter/pg_setting.go:87 +0x325
main.querySettings(0x0?, 0xc00010d290)
/app/cmd/postgres_exporter/pg_setting.go:56 +0x287
main.(*Server).Scrape(0xc00010d290, 0xc000028011?, 0x90?)
/app/cmd/postgres_exporter/server.go:121 +0xcb
main.(*Exporter).scrapeDSN(0xc0000000c0, 0x44d406?, {0xc000028011, 0x46})
/app/cmd/postgres_exporter/datasource.go:115 +0x1c5
main.(*Exporter).scrape(0xc0000000c0, 0x0?)
/app/cmd/postgres_exporter/postgres_exporter.go:679 +0x16c
main.(*Exporter).Collect(0xc0000000c0, 0xc00003ff60?)
/app/cmd/postgres_exporter/postgres_exporter.go:568 +0x25
github.com/prometheus/client_golang/prometheus.(*Registry).Gather.func1()
/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:457 +0xe7
created by github.com/prometheus/client_golang/prometheus.(*Registry).Gather in goroutine 18
/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:547 +0xbab
查看postgres_exporter其源碼發現端倪:
SELECT name, setting, COALESCE(unit, ''), short_desc, vartype FROM pg_settings WHERE vartype IN ('bool', 'integer', 'real') AND name != 'sync_commit_cancel_wait';
確實是因為session_memory_size的顯示問題,不過我已經提交了PR修複,官方修複後即可成功。
配置監控面板
一旦所有組件都成功啟動,接下來我們需要前往市場尋找我們想要的監控面板。你可以訪問Grafana的官方儀錶板市場:https://grafana.com/grafana/dashboards/?search=postgresql
一旦找到您喜歡的面板,請點擊此處進行導入。以下以ID:9628為示例進行導入操作。
這裡選擇我們的數據源。
讓我們來看一下效果如何:
總結
本次監控將採用Prometheus、Grafana可視化工具以及postgres_exporter對OpenTenBase進行全面監控和優化。首先,通過Docker安裝了Prometheus,配置了必要的文件形式進行服務發現,實現了系統正常監控。接著,使用Docker啟動Grafana,並配置數據源連接到Prometheus,展示監控面板。最後,安裝了postgres_exporter以監控資料庫,並解決了啟動報錯問題。在配置監控面板時,通過Grafana的儀錶板市場找到了適合的監控面板,併成功導入使用。