自定義prometheus exporter實現監控阿里云RDS

# 自定義 Prometheus Exporter 實現多 RDS 數據采集## 背景1. Prometheus 官網提供的 MySQL Exporter 對于 MySQL 實例只能一個進程監控一個實例,數據庫實例很多的情況下,不方便管理。
2. 內部有定制化監控需求,RDS 默認無法實現,比如對數據庫增長的監控。
3. 默認 Prometheus 官網提供的 MySQL Exporter 采集 MySQL 幾乎所有的指標,但實際用到的卻不多,浪費存儲空間。## 思路> 先了解對于數據庫的監控需求:- 一個 Exporter 可以采集所有 RDS 實例數據。
- RDS 實例采集指標不用全部采集,按需即可。
- 定制化需求:- 數據庫磁盤使用率,默認 MySQL 的 status/variables 中沒有該指標。- 統計數據庫、表的總大小(數據大小+索引大小)。### 針對第一個需求之前在使用 Prometheus 監控 Redis 的時候,有個 Exporter 實現了可以同時監控多個實例的情況,大概的思路是:把實例名稱或者地址作為 target 參數傳遞給一個 URL,這個 URL 就是一個 Exporter,然后根據傳遞的不同 `target` 采集相同指標。### 針對第二個需求做過監控的人都知道 MySQL 的監控指標其實都是采集的 `show global status` 和 `show global variables` 的結果然后做相關匯總或者計算。所以我們很容易就可以通過這兩個 SQL 的結果帥選出需要的選項保存在一個配置文件,采集的時候讀取該配置文件選項,按需采集即可。### 針對第三個需求數據庫磁盤使用率 / 統計數據庫、表的總大小都不是從 status/variables 能獲取到的。所以了解 Prometheus 架構的就知道,可以使用 Pushgateway 來實現。## 自定義 Exporter 介紹```bash
cws-mysql-exporter
├── aliyunapi.py
├── config.py
├── generate-instance-yml.py
├── instance.yml
├── metrics.yml
├── utils.py
├── pushgateway.py
├── push_cron_dbsize.py
├── push_cron_rds_cpumemiops.py
└── rds-exporter.py
  • aliyunapi.py 是封裝的阿里云相關的 API 接口,因為磁盤和 CPU 只能從阿里云獲取,它和主機有關系。
  • config.py 里面定義阿里云 API 的 ak/sk,以及 Exporter 連接數據庫用到的賬號和密碼,這個賬號密碼是所有實例共用的。
  • generate-instance-yml.py 這個是首次需要執行的腳本,生成 instance.yml 配置文件,主要是獲取所有 RDS 的實例名稱和連接地址,及 instance_id(因為有些接口入參必須是 instance_id)。
rds-xxxx:host: rm-xxxxxx.mysql.rds.aliyuncs.comid: rm-xxxxxxrds-yyyyy:host: rm-yyyyy.mysql.rds.aliyuncs.comid: rm-yyyyy
  • metrics.yml 是需要采集的監控指標,分 variablesstatus,格式如下:
variables:max_connections: ""max_user_connections: ""... ...
status:Aborted_connects: ""Aborted_clients: ""... ...
  • utils.py 是封裝的公共函數。
  • pushgateway.py 是封裝的需要推送的 Pushgateway 的監控指標。
  • push_cron_dbsize.pypush_cron_rds_cpumemiops.py 是包裝的不同維度需要推送到 Pushgateway 的腳本,最終需要在 crontab 中定時去執行。
  • rds-exporter.py 是 Exporter 的入口,這里借助了 Flask 來運行 server。

Exporter 開源地址詳見: 自定義 Exporter 實現多 RDS 數據采集

啟動 rds-exporter,默認端口在 5005。

Prometheus 及組件安裝

這里介紹簡單的安裝和配置,具體的 Prometheus 及其架構介紹網上有很多資料,大家自行查閱即可。

1. 安裝 Prometheus

#!/usr/bin/env bash
# encoding: utf-8
# Author: Eagle
# Desc: 自動化安裝 Prometheus
# version="2.36.1"
if [ $# -eq 1 ]
thenversion="$1"
fiecho "Will install prometheus ${version} version"# download
wget "https://github.com/prometheus/prometheus/releases/download/v${version}/prometheus-${version}.linux-amd64.tar.gz"# untar and set link
tar -zxf prometheus-${version}.linux-amd64.tar.gz -C /opt/app
ln -s /opt/app/prometheus-${version}.linux-amd64 /opt/app/prometheus

2. 安裝 Pushgateway

#!/usr/bin/env bash
# encoding: utf-8
# Author: Eagle
# Desc: 自動化安裝 Prometheus Pushgateway 
# version="1.4.3"
if [ $# -eq 1 ]
thenversion="$1"
fiecho "Will install prometheus pushgatewa ${version} version"
wget "https://github.com/prometheus/pushgateway/releases/download/v${version}/pushgateway-${version}.linux-amd64.tar.gz"# untar and set link
tar -zxf pushgateway-${version}.linux-amd64.tar.gz -C /opt/app
ln -s /opt/app/pushgateway-${version}.linux-amd64 /opt/app/pushgateway

3. 啟動 Pushgateway

配置 systemd service,文件位置 /usr/lib/systemd/system/pushgateway.service

Description=Prometheus Pushgateway Service
Requires=network-online.target
After=network-online.target[Service]
Restart=on-failure
ExecStart=/opt/app/pushgateway/bin/pushgateway[Install]
WantedBy=multi-user.target
  • 配置開啟自啟動 systemctl enable pushgateway
  • 啟動/停止/重啟 systemctl start/stop/restart pushgateway

Pushgateway 不需要額外的配置,默認是在 9091 端口。

4. 配置 Prometheus 并啟動

配置 systemd service,文件位置 /usr/lib/systemd/system/prometheus.service

Description=Prometheus Server
Requires=network-online.target
After=network-online.target[Service]
Restart=on-failure
ExecStart=/opt/app/prometheus/bin/prometheus --config.file=/opt/app/prometheus/prometheus.yml --storage.tsdb.retention=60d --web.enable-lifecycle --web.enable-admin-api --storage.tsdb.path=/data/prometheus-data[Install]
WantedBy=multi-user.target

注意提前創建 Prometheus 數據目錄。

  • 配置開啟自啟動 systemctl enable prometheus
  • 啟動/停止/重啟 systemctl start/stop/restart prometheus

配置 Prometheus

# 這里是全局變量的配置
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, Prometheus會根據 rules 規則把告警信息發送給 alertmanager 組件,alertmanager 負責實際告警信息的發送
alerting:alertmanagers:- static_configs:- targets: ['192.168.xx.yyy:9093']# 這里是配置告警規則,本次不是講解重點先忽略
# rule_files:
#   - "rules/rds_rules.yml"# 配置Prometheus從那些 endpoint 或者叫 exporter 采集監控數據
scrape_configs:# 默認監控 Prometheus服務本身- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]labels:instance: prometheus# 自定義的mysql targets ,這里的targets是通過直接配置的方式# 另外還有通過文件的方式、通過consul等自動發現的方式,# 這兩種方式這里不展開介紹,感興趣的關注后續文章- job_name: 'mysql_targets'scrape_interval: 60sscrape_timeout: 12smetrics_path: /scrapestatic_configs:- targets:- rds-xxx- rds-yyy# relabel_configs 是通過label重寫實現我們最終需要的標簽# 另外這里是通過重寫target,重新定義了 endpoint 地址relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 192.168.3.108:5005# pushgateway - job_name: 'pushgateway'scrape_interval: 60sstatic_configs:- targets:- 192.168.3.108:9091# 這里是對自定義的 mysql-exporter 做監控- job_name: 'rds-exporter'scrape_interval: 60sstatic_configs:- targets:- 192.168.3.108:5005

重啟 Prometheus 或者執行 reload 操作 curl -XPUT http://192.168.3.108:9090/-/reload 使配置生效。

最終在 Prometheus 的 WebUI 界面的 Status -> Targets 里面看到如下:

Prometheus MySQL Targets


Grafana 配置 MySQL 監控大盤

具體的 Grafana 安裝和配置請參考教程 或者網上自動查閱。

打開 Grafana 界面進行 Dashboard 的導入,如下圖所示:

Grafana Import Dashboard

點擊左側 + 選擇 import,然后通過三種不同的方式導入 Dashboard 模板:

  1. 在 Grafana 官網找到合適的模板之后,記住 ID,輸入該 ID 然后點擊 Load。
  2. 通過右上角的 Upload .json file 上傳本地的模板 JSON 文件。
  3. 直接把本地的模板 JSON 文件內容 copy 到 Or paste JSON 下方的框中即可。

這里提供自定義的模板 JSON 文件 下載地址

最終的效果如下:

Aliyun RDS Grafana Dashboard

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82763.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開放原子大賽石油軟件賽道參賽經驗分享

億級以上網格油藏模型三維可視化 一、賽項背景 油藏數值模擬是油氣田開發中至關重要的一環。油藏數值模擬將儲層與井的數學模型離散求解,預測地下流體、能量等的動態變化,廣泛應用于油田產量評估、開發方案優化等。隨著計算機技術特別是并行技術的發展…

學習方法討論——正論科舉精神的內核

世界不存在絕對的善,可以很善,但很難找到絕對的善,總帶些副作用;世界上也不存在絕對的惡,可以很惡,但很難找到絕對的惡,可以嘗試舉例; 再者,物極必反,當對一個…

網絡不再神秘:如何有效利用服務器網絡流量探針進行監控?

目錄 一、流量探針到底是個啥? 二、別只是“部署了”,關鍵在“用得好” 1. 做到“最小粒度”數據采集 2. 結合時間窗口,構建行為基線 3. 利用標簽化管理,提升可讀性 4. 把探針輸出對接安全告警系統 三、那如何部署才合理&a…

uniapp(微信小程序)>關于父子組件的樣式傳遞問題(自定義組件樣式穿透)

在父組件中給子組件添加類名,子組件的樣式由父組件決定 由于"微信小程序"存在【樣式隔離機制】&#xff0c;且默認設置為isolated(啟用樣式隔離)&#xff0c;因此這里給出以下兩種解決方案&#xff1a; // 小程序編譯機制 1. 當 <style scoped> 存在時&#…

基于FastAPI框架的日志模塊設計

以下是一個基于FastAPI框架設計的日志模塊&#xff0c;結合SQLite數據庫實現增刪改查功能的完整實現方案&#xff1a; 1. 項目結構 your_project/ ├── app/ │ ├── logs/ # 日志模塊目錄 │ │ ├── models.py # 數據庫模型定義 │ │ …

面試題:C++虛函數可以是內聯函數嗎?

目錄 1.引言 2.示例 3.總結 1.引言 為什么C的虛函數和內聯函數這兩個看似矛盾的特性能否共存&#xff1f;這個問題實際上觸及了C編譯期優化與運行時多態性之間的微妙平衡。我發現這個問題不僅是面試中的常見陷阱&#xff0c;更是理解C深層機制很好的一個點。 虛函數可以被聲…

用python清除PDF文件中的水印(Adobe Acrobat 無法刪除)

學校老師發的資料&#xff0c;有時候會帶水印&#xff0c;有點強迫癥的都想給它去掉。用Adobe Acrobat試了下&#xff0c;檢測不到水印&#xff0c;無法刪除&#xff01;分析發現原來這類PDF文件是用word編輯的&#xff0c;其中的水印是加在了頁眉中&#xff01; 自己動手想辦法…

Oracle中自定義異常內置異常嵌套異常的捕獲處理

一、異常類型分類 類型說明示例內置預定義異常Oracle已命名異常&#xff08;如NO_DATA_FOUND&#xff09;查詢無數據時觸發內置非預定義異常未命名的Oracle錯誤&#xff08;需用PRAGMA EXCEPTION_INIT關聯&#xff09;ORA-02290&#xff08;違反檢查約束&#xff09;自定義異常…

《Flutter社交應用暗黑奧秘:模式適配與色彩的藝術》

暗黑模式已從一種新奇的功能演變為用戶體驗中不可或缺的一環。對于Flutter開發者而言&#xff0c;如何在社交應用中完美實現暗黑模式適配與色彩對比度優化&#xff0c;是一場充滿挑戰與驚喜的技術探索之旅。 暗黑模式&#xff0c;絕非僅僅是將界面顏色反轉這么簡單。從用戶體驗…

【kubernetes】通過Sealos 命令行工具一鍵部署k8s集群

一、前言 1、sealos安裝k8s集群官網&#xff1a;K8s > Quick-start > Deploy-kubernetes | Sealos Docs 2、本文安裝的k8s版本為v1.28.9 3、以下是一些基本的安裝要求&#xff1a; 每個集群節點應該有不同的主機名。主機名不要帶下劃線。所有節點的時間需要同步。需要…

視覺-語言-動作模型:概念、進展、應用與挑戰(上)

25年5月來自 Cornell 大學、香港科大和希臘 U Peloponnese 的論文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 視覺-語言-動作 (VLA) 模型標志著人工智能的變革性進步&#xff0c;旨在將感知、自然語言理解和具體動作統一在一個計…

Java筆記4

第一章 static關鍵字 2.1 概述 以前我們定義過如下類&#xff1a; public class Student {// 成員變量public String name;public char sex; // 男 女public int age;// 無參數構造方法public Student() {}// 有參數構造方法public Student(String a) {} }我們已經知道面向…

記一次redis未授權被種挖礦

#挖礦程序 /etc/httpgd /etc/nnt.sh #大小問 #定時任務名為root /var/spool/cron/root 內容&#xff1a;*/50 * * * * sh /etc/nnt.sh >/dev/null 2>&1 定時任務只有所有者可以寫&#xff0c;且chmod修改權限失敗。 #先查看定時任務的拓展屬性&#xff0c;不可變(i…

Excel分組計算求和的兩種實現方案

文章目錄 背景樣例數據方案一、函數求和實現步驟缺點 方案二、數據透視表實現步驟優點 背景 在Excel文檔中&#xff0c;經常會進行數據的求和計算&#xff0c;可使用不同的方式實現&#xff0c;記錄下來&#xff0c;方便備查。 樣例數據 已有商品銷量信息&#xff0c;包含銷…

如何應對網站被爬蟲和采集?綜合防護策略與實用方案

在互聯網時代&#xff0c;網站內容被惡意爬蟲或采集工具竊取已成為常見問題。這不僅侵犯原創權益&#xff0c;還可能影響網站性能和SEO排名。以下是結合技術、策略與法律的綜合解決方案&#xff0c;幫助網站構建有效防護體系。 一、技術防護&#xff1a;阻斷爬蟲的“技術防線”…

網卡網孔速率的協商是如何進行的?

網卡與交換機等網絡設備之間的速率協商主要通過**自動協商&#xff08;Auto-Negotiation&#xff09;**機制實現&#xff0c;其核心是物理層&#xff08;PHY&#xff09;芯片之間的信息交互。以下是協商過程的詳細解析&#xff1a; 一、自動協商的核心流程 1. 發送配置幀&am…

FastExcel 本地開發和Linux上上傳Resource文件的差異性

不能直接通過路徑來獲取 這個是一個下載導出文件的操作 GetMapping(value "/export/all") public void exportAll(HttpServletResponse response, LaylineListReq req) throws IOException {// 從類路徑下獲取 Excel 文件資源ClassPathResource classPathResource…

【RAG】Milvus、Pinecone、PgVector向量數據庫索引參數優化

Milvus 、PgVector 索引參數優化 IVF類索引關鍵參數&#xff08;基于聚類算法&#xff09; nlist (倒排列表數量): 決定將向量空間劃分為多少個聚類中心值越大搜索越精確但耗時越長推薦值: 通常設置為數據量的4√n到n/1000之間例如: 1百萬數據量可設nlist1000到4000 nprobe (搜…

5月12日信息差

一、國際政治與安全:俄烏沖突與中美博弈 1. 烏克蘭戰場信息分化 俄方戰報: 俄羅斯國防部宣稱在頓巴斯地區摧毀烏軍12輛坦克及3套美制“海馬斯”火箭系統,稱烏軍反攻受阻。 信息特點:強調裝備摧毀數量,淡化前線實際控制變化。 烏方通報: 烏克蘭總參謀部表示已奪回巴赫穆特…

Python如何使用進行風險管理和投資組合優化

文章目錄 前言python3.13 環境配置風險管理投資組合優化 前言 在 Python 中&#xff0c;可以使用多個庫來進行風險管理和投資組合優化&#xff0c;以下是一些常見的方法和庫。 python3.13 環境配置 python3.13安裝教程&#xff1a;https://blog.csdn.net/2501_91538706/artic…