💫《博主主頁》:
? ? ? ? ? ?🔎?CSDN主頁__奈斯DB
? ? ? ? ? ?🔎?IF Club社區主頁__奈斯、
🔥《擅長領域》:擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控;并對SQLserver、NoSQL(MongoDB)有了解
💖如果覺得文章對你有所幫助,歡迎點贊收藏加關注💖
?
? ? 如期而至,今天繼續給大家分享監控系列的文章——?使用Prometheus+Grafana打造專業的postgreSQL監控系統 。Prometheus抓指標?🔍?+ Grafana畫大屏?📈?+ Alertmanager拍電報?📢,跟著三步走,打造PostgreSQL監控天網🚀。
? ? ? ? ? ? ? ? ?
特別說明💥:
📌 開源儀表盤引用
- 本文采用的postgreSQL數據庫監控儀表盤直接使用了Grafana官網開源項目(Dashboard ID: 9628),非常感謝原作者(Lucas Estienne)的無私分享。關于Grafana的所有配置步驟均基于該開源儀表盤并驗證通過,各位可一鍵導入快速搭建專業級的可視化監控。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? 原創告警規則實現
關于告警部分為博主獨立開發完成,針對postgreSQL數據庫實現了如下告警:
? postgreSQL 實例不可用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
🔗?Prometheus+Grafana監控postgreSQL全流程
? ? ?
? ? ? ?
prometheus+Grafana全系列文章(實時更新🔥):
序號 文章 1 【prometheus+Grafana篇】Prometheus與Grafana:深入了解監控架構與數據可視化分析平臺-CSDN博客 2 【prometheus+Grafana篇】從零開始:Linux 7.6 上二進制安裝 Prometheus、Grafana 和 Node Exporter_grafana二進制部署-CSDN博客 3 【prometheus+Grafana篇】Prometheus告警規則參數全解析 + Alertmanager實現多平臺告警(含電子郵件/企業微信群/飛書群/釘釘群接受方式)_grafana做飛書機器人報警-CSDN博客 4 【prometheus+Grafana篇】基于Prometheus+Grafana實現Linux操作系統的監控與可視化-CSDN博客 5 【prometheus+Grafana篇】基于Prometheus+Grafana實現windows操作系統的監控與可視化_grafana 監控 windows-CSDN博客 6 【prometheus+Grafana篇】基于Prometheus+Grafana實現Oracle數據庫的監控與可視化-CSDN博客 7 【prometheus+Grafana篇】基于Prometheus+Grafana實現MySQL數據庫的監控與可視化-CSDN博客 8 【prometheus+Grafana篇】基于Prometheus+Grafana實現MongoDB數據庫的監控與可視化-CSDN博客 9 【prometheus+Grafana篇】基于Prometheus+Grafana實現Redis數據庫的監控與可視化-CSDN博客
? ? ? ? ? ? ? ? ? ? ? ?
目錄
一、在postgresql 5432實例上的操作
二、安裝postgres_exporter(postgres_exporter:是prometheus的一個插件,抓取和收集postgresql數據庫的各種運行指標用于分析。postgres_exporter插件是GitHub開源組織提供的,通過GitHub官網下載postgres_exporter)
1)下載postgres_exporter安裝包,選擇download,然后點擊“Exporters and integrations”,選擇postgres_exporter
2)跳轉到了gitHub,點擊postgres_exporter的版本集,選擇最新的postgres_exporter下載
3)目前postgres_exporter最新版本為0.17.1。
4)解壓二進制postgres_exporter包
5)移動并重命名postgres_exporter解壓出來的目錄
6)創建prometheus用戶
7)賦權
8)寫入linux啟動服務項
9)登錄postgres_exporter界面管理,默認端口為9187
三、將當前postgresql 5432實例加入到prometheus監控,并通過Grafana展示
1)將postgres_exporter的信息加入到prometheus監控的配置文件prometheus.yml中
2)配置告警規則文件
3)檢查配置文件
4)prometheus.yml文件添加了信息,所以重啟prometheus進程或者重新加載配置文件(二選一)
5)在prometheus查看是否可以看到監控信息
6)登錄Grafana界面管理,將當前主機的監控信息做展示
一、下載一個儀表盤:Grafana官網“http://www.grafana.com”—Dashboards,然后選擇一個下載量高的自己喜歡的postgres_exporter(postgresql監控)
二、將儀表盤添加到Grafana上:Dashboards—New—Import—點擊“Upload dashboard JSON file”
三、儀表盤展示:Dashboards—查看到已經定義好的儀表盤,并且數據源是prometheus監控,點擊進去
? ? ? ? ? ? ? ? ? ? ? ??
監控postgreSQL信息如下:
主機名 | IP地址 | 配置 | 系統 | 描述 |
postgresql | 10.2.4.98 | 4C 8G | Red Hat Linux 7.6 | 安裝postgres_exporter對這臺服務器進行監控 |
postgres_exporter:默認端口9187。抓取和收集postgresql數據庫的各種運行指標用于分析
? ? ? ? ? ? ? ? ??
一、在postgresql 5432實例上的操作
1)創建專屬監控用戶(不建議使用postgres用戶,postgres用戶權限太高)
SQL> CREATE USER postgres_exporter WITH PASSWORD 'nX5sA4iC';-- 授予連接權限 GRANT CONNECT ON DATABASE postgres TO postgres_exporter;-- 授予訪問必要視圖的權限 GRANT USAGE ON SCHEMA public TO postgres_exporter; GRANT SELECT ON pg_stat_activity TO postgres_exporter; GRANT SELECT ON pg_stat_database TO postgres_exporter; GRANT SELECT ON pg_stat_user_tables TO postgres_exporter; GRANT SELECT ON pg_stat_user_indexes TO postgres_exporter; GRANT SELECT ON pg_statio_user_tables TO postgres_exporter; GRANT SELECT ON pg_statio_user_indexes TO postgres_exporter; GRANT SELECT ON pg_stat_bgwriter TO postgres_exporter; GRANT SELECT ON pg_stat_wal_receiver TO postgres_exporter;
? ? ? ??
二、安裝postgres_exporter(postgres_exporter:是prometheus的一個插件,抓取和收集postgresql數據庫的各種運行指標用于分析。postgres_exporter插件是GitHub開源組織提供的,通過GitHub官網下載postgres_exporter)
1)下載postgres_exporter安裝包,選擇download,然后點擊“Exporters and integrations”,選擇postgres_exporter
?
?
?
? ? ? ? ?
2)跳轉到了gitHub,點擊postgres_exporter的版本集,選擇最新的postgres_exporter下載
? ? ? ? ? ? ? ? ? ??
PS:也可以直接在gitHub官網下載
一、通過gitHub(官網地址:https://github.com/)下載postgres_exporter安裝包,在gitHub搜索“postgres_exporter”。因為是開源,所以大家都是有時間才會開發,所以選擇一個最近更新的
? ? ? ??
二、點擊postgres_exporter的版本集,選擇最新的postgres_exporter下載
?? ? ? ? ? ? ? ? ? ?
3)目前postgres_exporter最新版本為0.17.1。
386:這是 Intel 80386 處理器架構,也被稱為 x86。它是早期的32位處理器架構。
amd64:也稱為 x86-64 或 x64,這是一種64位的處理器架構,由 AMD 公司推出。它是基于 x86 架構的64位擴展,現在廣泛用于桌面和服務器系統。
arm64:這是 ARMv8-A 的64位處理器架構,主要應用于 ARM 架構的64位處理器,包括用于服務器、移動設備和嵌入式系統的處理器。
armv5 和 armv6:這兩者都屬于 ARM 架構的32位處理器架構,分別對應于較舊的 ARM 處理器。它們通常用于嵌入式系統和一些較老的移動設備。
............
?? ? ? ? ? ? ? ??
4)解壓二進制postgres_exporter包
[root@postgresql ~]# tar -zxvf postgres_exporter-0.17.1.linux-amd64.tar.gz
? ? ? ? ? ? ??
5)移動并重命名postgres_exporter解壓出來的目錄
[root@postgresql ~]# mkdir -p /opt/prometheus [root@postgresql ~]# mv postgres_exporter-0.17.1.linux-amd64 /opt/prometheus/ [root@postgresql ~]# mv /opt/prometheus/postgres_exporter-0.17.1.linux-amd64 /opt/prometheus/postgres_exporter
? ? ? ??
6)創建prometheus用戶
[root@postgresql ~]# groupadd prometheus [root@postgresql ~]# useradd -g prometheus -M -s /usr/sbin/nologin prometheus ---創建一個名為prometheus的系統賬號,該賬號沒有家目錄并且不能登錄Shell。這種設置適用于需要運行服務或任務而不需要用戶交互的情況。 -M:不為用戶創建家目錄。對于系統服務賬號來說,通常不需要家目錄,因此使用 -M 可以跳過家目錄的創建步驟。 -s /usr/sbin/nologin:指定用戶登錄時使用的Shell。將用戶prometheus的登錄Shell設置為/usr/sbin/nologin。nologin Shell的作用是阻止用戶登錄系統,但允許該用戶擁有有效的系統賬號。這通常用于服務賬號,因為它們不需要交互式Shell訪問,僅用于執行特定服務或任務。[root@postgresql ~]# passwd prometheus [root@postgresql ~]# id prometheus
? ? ? ? ? ??
7)賦權
[root@postgresql ~]# chown -R prometheus:prometheus /opt/prometheus/postgres_exporter
? ? ? ? ?
8)寫入linux啟動服務項
[root@postgresql ~]# cd /usr/lib/systemd/system [root@postgresql ~]# vi postgres5432_exporter.service [Unit] Description=postgres_exporter After=network.target[Service] Type=simple User=prometheus Group=prometheus Restart=on-failure Environment="DATA_SOURCE_NAME=postgresql://postgres_exporter:nX5sA4iC@10.2.4.98:5432/postgres?sslmode=disable" ExecStart=/opt/prometheus/postgres_exporter/postgres_exporter --web.listen-address=0.0.0.0:9187[Install] WantedBy=multi-user.target [root@postgresql ~]# systemctl daemon-reload [root@postgresql ~]# systemctl start postgres5432_exporter.service [root@postgresql ~]# systemctl enable postgres5432_exporter.service [root@postgresql ~]# systemctl status postgres5432_exporter.service
###postgres_exporter不同于其他數據庫,其他數據庫連接數據庫的用戶、密碼、IP等信息都可以在exporter插件中指定,但postgresql的exporter插件就不行,需要定義環境變量指定
###--web.listen-address=<address>:<port>:指定服務端口。Postgresql的抓取默認通過9187端口訪問postgres_exporter管理界面,可以修改成其他端口用于訪問postgres_exporter管理界面(如果沒有修改端口的需求可以不設置這個參數)。此參數只能在postgres_exporter命令啟動時指定,不可以在配置文件prometheus.yml中指定。如果服務器上有多個實例,比如還有5433實例,那么需要再寫一個linux啟動項,并且通過DATA_SOURCE_NAME變量指定postgresql數據源
? ? ? ? ??
9)登錄postgres_exporter界面管理,默認端口為9187
http://10.2.4.98:9187/metrics
? ? ? ? ? ? ?
三、將當前postgresql 5432實例加入到prometheus監控,并通過Grafana展示
注意:如下操作是在安裝了prometheus和Grafana的主機上進行操作
? ? ? ? ? ?
1)將postgres_exporter的信息加入到prometheus監控的配置文件prometheus.yml中
[root@prometheus ~]# vi /opt/prometheus/prometheus.yml 在scrape_configs下面新增如下內容:# postgres_exporter配置- job_name: "postgreSQL監控" ###job_name 用來唯一標識一個監控任務。在同一個 prometheus.yml 文件中,不同的 scrape_config可以有不同的job_name,以便 Prometheus 能夠區分和管理不同的監控目標和配置,用來將不同的監控目標分組。單位為監控postgreSQL數據庫設置一個獨立的job_namescrape_interval: 15s ###指定這個job_name每隔多久從每個目標(如 Exporter、應用端點)拉取一次指標數據。優先級:會覆蓋全局的 global:scrape_interval(如果存在)。file_sd_configs:- files:- /data/prometheus/conf.d/postgreSQL_targets.json # postgreSQL需要監控的實例都單獨寫在了mysqld_targets.json文件中,是為了避免prometheus.yml內容過多,看起來更簡潔[root@prometheus ~]# vi /data/prometheus/conf.d/postgreSQL_targets.json ###寫成linux或者MySQL通用的targets、labels的話,Prometheus可以獲取到數據,但grafna獲取不到數據。如下是deepseek推薦的寫法,因為使用的9628 json模版沒有告訴怎么定義格式 [{"targets": ["10.2.4.98:9187"],"labels": {"instance": "10.2.4.98:9187","business_name": "postgreSQL數據庫主庫(IP:10.2.4.98,端口:5432)"}} ]
? ? ? ? ??
2)配置告警規則文件
? ? 除了如下告警規則之外,還需要單獨配置一個Targets目標不可達(up)的相關規則,因為up 是一個布爾值指標,表示 Prometheus 是否能夠成功地 scrape(抓取)到指定的目標(targets)數據,用于判斷目標node-exporter相關進程是否在目標主機存活。關于up的規則文件參考:【prometheus+Grafana篇】從零開始:Linux 7.6 上二進制安裝 Prometheus、Grafana 和 Node Exporter_grafana二進制部署-CSDN博客
[root@prometheus ~]# cd /opt/prometheus/rules/ ###在prometheus.yml文件中定義了告警規則文件rule_files參數 [root@prometheus rules]# vi postgreSQL_targets.yml
? ? ? ? ?
3)檢查配置文件
[root@prometheus ~]# cd /opt/prometheus/ [root@prometheus ~]# ./promtool check config prometheus.yml ###用于檢查 Prometheus 配置文件(prometheus.yml)的語法和格式是否正確。
執行這條命令會執行以下操作:
- 驗證配置文件的語法:檢查 prometheus.yml 文件是否符合 Prometheus 配置格式規范。
- 檢測潛在的錯誤或警告:如果配置文件中存在拼寫錯誤、格式問題、無效的配置項等問題,它會提供相關的錯誤信息或警告。比如告警規則寫的不對,就會有提示
- 輸出有用的診斷信息:如果配置文件存在問題,promtool 會輸出詳細的錯誤信息。
? ? ? ? ? ? ? ?
4)prometheus.yml文件添加了信息,所以重啟prometheus進程或者重新加載配置文件(二選一)
#重載:前提是在prometheus.service啟動服務項中加了--web.enable-lifecycle參數:--web.enable-lifecycle:###啟用Prometheus的生命周期接口,允許通過HTTP請求來動態重新加載配置等操作。這對于在運行時更新配置或執行其他管理操作非常有用,當修改了prometheus的配置后,可以通過curl命令來重新加載配置文件,而不需要重啟prometheus(推薦方式)
[root@prometheus ~]# curl -X POST http://localhost:9090/-/reload
#重啟
[root@prometheus ~]# systemctl restart prometheus.service
?? ? ? ? ??
5)在prometheus查看是否可以看到監控信息
網址:http://110.120.100.21:9090
菜單欄:Status—Targets
? ? ? ? ? ? ? ??
6)登錄Grafana界面管理,將當前主機的監控信息做展示
地址:http://110.120.100.21:3000
默認用戶:admin
默認密碼:admin
? ? ? ??
? ? ? ?
一、下載一個儀表盤:Grafana官網“http://www.grafana.com”—Dashboards,然后選擇一個下載量高的自己喜歡的postgres_exporter(postgresql監控)
注意:不需要再增加數據源了。因為在第一次搭建prometheus+Grafana的時候就已經加好了,在添加數據源時,有個配置項是Connection,這里添加的是prometheus的地址,指的是prometheus監控服務器的地址,而不是node-exporter的地址
? ? ? ? ? ?
?以9628為例(PostgreSQL Database),新增了多個指標,比較全面
? ? ? ??
二、將儀表盤添加到Grafana上:Dashboards—New—Import—點擊“Upload dashboard JSON file”
Name:定義名稱,最好定義為主機ip加用途
Prometheus:選擇prometheus源
....
然后import
? ? ? ? ? ? ? ? ? ? ??
三、儀表盤展示:Dashboards—查看到已經定義好的儀表盤,并且數據源是prometheus監控,點擊進去
儀表盤Name:postgresql數據庫監控
數據源Name:prometheus監控
instance:這里其實就是當時已經在配置prometheus.yml時,定義的instance,也就是說Grafana會自動識別到
? ? 完結,撒花。如果你覺得這篇文章有用,歡迎分享給你的隊友/老板/隔壁工位的同事——畢竟,獨樂樂不如眾樂樂,獨 debug 不如眾 debug。