💫《博主主頁》:奈斯DB-CSDN博客
🔥《擅長領域》:擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控;并對SQLserver、NoSQL(MongoDB)有了解
💖如果覺得文章對你有所幫助,歡迎點贊收藏加關注💖
? ? 在當今復雜的系統架構中,監控平臺如同系統的"神經系統",能夠第一時間感知系統異常,為運維人員提供關鍵的診斷線索。面對市面上眾多的監控解決方案——從老牌穩定的Zabbix、新興的夜鶯監控,到企業級的騰訊藍鯨平臺——我們不禁要問:是否存在一款既開源免費,又能提供強大可視化能力的監控平臺?
? ? 答案是肯定的!Prometheus+Grafana?這對黃金組合正是滿足這一需求的完美解決方案。作為一名長期在生產環境中使用這套工具監控各類系統的實踐者,我將通過本系列文章,詳細分享如何利用prometheus+Grafana監控多種數據庫?💫?!
? ? 無論是剛開始接觸系統監控,還是希望優化現有的監控體系,這個系列都將為各位提供實用的參考。讓我們開始這段監控實踐之旅,掌握這套云原生時代最流行的監控方案!
? ? 對于這個系列,博主主要還是分享關于prometheus+Grafana如何監控多種數據庫的文章,對于需要監控其他系統或者學習prometheus其他相關內容的可以在B站上搜索“林哥Linux”UP主,這位大佬詳細介紹了prometheus+Grafana,并且課程是完全免費的,免費是情誼,收費是本分,感謝大佬為愛發電?💞?,為我們帶來了如此寶貴的學習資源。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
特別說明💥:本篇文章部分知識點均來源于 prometheus、Grafana 公開可查的官方文檔手冊和大模型DeepSeek-V3 的見解,并結合了我個人的理解和案例演示。如有沖突,請聯系,會立即處理。轉載請標明出處😄
? ? ? ? ? ? ? ? ? ? ? ?
prometheus官網文檔手冊:
Overview | Prometheus
? ? ? ? ? ? ? ? ? ? ? ??
Grafana 官網:
Grafana: The open and composable observability platform | Grafana Labs
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
prometheus+Grafana全系列文章(實時更新?🔥?):
【prometheus+Grafana篇】Prometheus與Grafana:深入了解監控架構與數據可視化分析平臺-CSDN博客
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
目錄
一、Prometheus
1.1?Prometheus Server(核心服務)
1.2 Exporters(指標暴露器)
1.3 Pushgateway(臨時任務指標網關)
1.4 Alertmanager(告警管理器)
1.5 Client Libraries(客戶端庫)
1.6?Service Discovery(服務發現)
1.7?PromQL(查詢語言)
二、Grafana
2.1?Grafana Server(后端服務)
2.2?Grafana UI(前端界面)
2.3?數據源插件(Data Source Plugins)
2.4?面板插件(Panel Plugins)
2.5?告警系統(Alerting)
2.6?用戶與權限管理
? ? ? ? ? ? ? ??
一、Prometheus
? ? Prometheus 是一個 開源 的系統監控和告警工具,靈感來源于 Google 的 Borgmon 監控系統(類似地,Kubernetes 也是從 Google 的 Borg 系統演變而來)。該項目從 2012 年開始由前 Google 工程師在 Soundcloud 開發,并于 2015 年早期發布了早期版本。2016 年 5 月,Prometheus 成為繼 Kubernetes 之后第二個正式加入 CNCF 基金會的項目,并于同年 6 月發布了 1.0 版本。2017 年底,Prometheus 發布了基于全新存儲層的 2.0 版本,進一步增強了與容器平臺和云平臺的兼容性。
? ? 在官網上截一張prometheus的基礎架構圖,從這個架構圖,可以看出Prometheus的主要模塊包含:Prometheus Server、Exporters、Pushgateway、Alertmanager、Client Libraries、Service Discovery、PromQL、WebUI等。
組件 核心功能 適用場景 Prometheus Server 數據采集、存儲、查詢和告警評估 所有監控場景 Exporters 轉換第三方系統指標 數據庫、中間件、硬件監控 Pushgateway 接收短期任務指標 Cron Job、批處理任務 Alertmanager 告警管理和通知 異常告警通知 Client Libraries 應用內直接暴露指標 自定義業務監控 Service Discovery 動態發現監控目標 Kubernetes、云環境 PromQL
查詢、聚合和分析時間序列數據 所有查詢場景 ? ? 通過以上組件的協同工作,Prometheus 實現了從數據采集、存儲到告警和可視化的完整監控閉環。
? ? ? ? ? ??
? ? ? ? ? ? ??
普羅米修斯使用邏輯:
- Prometheus server定期從靜態配置的targets或者服務發現的targets拉取數據(Targets是Prometheus采集Agent需要抓取的采集目標)
- 當新拉取的數據大于配置內存緩存區的時候,Prometheus會將數據持久化到磁盤(如果使用remote storage將持久化到云端)。
- Prometheus可以配置rules,然后定時査詢數據,當條件觸發的時候,會將alerts推送到配置的Alertmanager。
- Alertmanager收到警告的時候,可以根據配置(163,釘釘等),聚合,去重,降噪,最后發送警告。
- 可以使用APl,Prometheus Console或者Grafana查詢和聚合數據。
? ? ? ? ??
? ? ? ? ? ??
普羅米修斯的主要特點:
- 支持多維數據模型由指標名稱和鍵值對標識的時間序列數據
- 內置時間序列庫TSDB(Time Serices Database)
- 支持PromQL(Promethues Query Language,普羅米修斯的專屬查詢語言),對數據的查詢和分析、圖形展示和監控告警。對于監控告警也使用的是PromQL(Promethues Query Language,普羅米修斯的專屬查詢語言)。
- 不依賴分布式存儲,單個服務器節點是自治的。
- 支持HTTP的拉取(pull)方式收集時間序列數據。
- 通過中間網關Pushgateway推送時間序列。
- 通過服務發現或靜態配置2種方式發現目標。
- 支持多種可視化和儀表盤,如:grafana。
? ? ? ? ? ? ? ? ??
1.1?Prometheus Server(核心服務)
? ? ? ? ? ? ? ? ? ? ? ?
作用:
??數據抓取(Scraping):定期從配置的目標(如 Exporters、應用程序)拉取(Pull)指標數據。
??數據存儲:將采集的指標存儲在本地時間序列數據庫(TSDB)中。
??數據查詢:提供 PromQL 查詢語言,支持實時分析和聚合數據。
??告警規則評估:根據配置的告警規則(alert.rules
)觸發告警。? ? ? ? ? ? ? ? ? ? ?
工作流程:
從?
scrape_configs
?定義的目標(如?node_exporter:9100
)拉取?/metrics
?數據。將數據壓縮后寫入 TSDB(時間序列數據庫)。
提供 HTTP API 供 Grafana 或其他工具查詢數據。
? ? ? ? ? ? ? ? ? ? ? ?
1.2 Exporters(指標暴露器)
? ? ? ? ? ??
作用:
??將非 Prometheus 原生指標轉換為 Prometheus 可讀格式。
? 適用于無法直接暴露?/metrics
?的系統(如 MySQL、Redis、Nginx)。? Prometheus社區提供了豐富的Exporter實現,涵蓋了從基礎設施,中間件以及網絡等各個方面的監控功能。這些Exporter可以實現大部分通用的監控需求。進入到官網,然后選擇download,然后點擊“Exporters and integrations”
? ? ? ? ? ? ? ? ? ? ? ? ??
常見 Exporters:
范圍
常用exporter
數據庫
MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等
硬件
Apcupsd Exporter, IoT Edison Exporter, IPMI Exporter, Node Exporter等
消息隊列
Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等
存儲
ceph Exporter, Gluster Exporter, HDFS Exporter, ScalelO Exporter等
HTTP服務
Apache Exporter, HAProxy Exporter, Nginx Exporter等
API服務
AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等
日志
Fluentd Exporter, Grok Exporter等
監控系統
Collectd Exporter, Graphite Exporter, influxDB Exporter, Nagios Exporter, SNMP Exporter等
其它
Blockbox Exporter, liRA Exporter, lenkins Exporter, Confluence Exporter等
? ? ? ? ? ? ? ? ? ? ?
1.3 Pushgateway(臨時任務指標網關)
? ? ? ? ? ? ? ? ? ?
作用:
??接收短期任務(如 Cron Job)推送的指標。
? 解決 Prometheus Pull 模型無法監控短暫存活服務的問題。? ? ? ? ? ? ? ?
適用場景:
批處理任務(如每日數據備份)
無法長期運行的服務
? ? ? ? ? ? ?
工作流程:
任務運行完成后,將指標推送到 Pushgateway。
Prometheus 從 Pushgateway 拉取數據。
? ? ? ? ??
示例:
# 使用 curl 推送指標到 Pushgateway echo "my_metric 3.14" | curl --data-binary @- http://pushgateway:9091/metrics/job/my_job
? ? ? ? ? ? ? ?
1.4 Alertmanager(告警管理器)
? ? ? ? ? ? ? ? ? ? ? ? ? ?
作用:
??接收 Prometheus 的告警通知,并進行去重、分組和路由。
? 支持多種告警通知方式(郵件、Slack、Webhook 等)。? ? ? ? ? ? ? ?
核心功能:
去重(Deduplication):合并相同告警,避免轟炸。
分組(Grouping):將相關告警合并為一條通知(如同一服務的多個實例)。
靜默(Silencing):臨時屏蔽特定告警。
? ? ? ? ? ? ? ??
1.5 Client Libraries(客戶端庫)
作用:
??在應用程序中直接暴露 Prometheus 格式的指標,無需額外 Exporter。? ? ? ? ? ? ? ? ? ? ?
支持語言:
Go (
prometheus/client_golang
)Java (
io.prometheus
)Python (
prometheus_client
)Ruby (
prometheus-client
)? ? ? ? ? ? ??
示例(Go 語言):
import "github.com/prometheus/client_golang/prometheus"// 定義一個計數器 var requestCount = prometheus.NewCounter(prometheus.CounterOpts{Name: "http_requests_total",Help: "Total HTTP requests",}, )// 注冊指標 prometheus.MustRegister(requestCount)// 在 HTTP 處理函數中遞增 requestCount.Inc()
? ? ? ? ? ? ? ? ?
1.6?Service Discovery(服務發現)
?? ? ? ? ? ? ? ? ? ? ? ? ??
作用:
??動態發現監控目標(如 Kubernetes Pods、云服務器)。? ? ? ? ? ? ??
支持的服務發現機制:
Kubernetes:自動發現 Pods、Services。
Consul:通過 Consul 注冊中心獲取服務列表。
文件靜態配置:通過?
file_sd_configs
?加載目標列表。? ? ? ? ? ??
示例(Kubernetes 發現):
scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]action: keepregex: true
? ? ? ? ? ?
1.7?PromQL(查詢語言)
??? ? ? ? ? ? ??
作用:
??查詢、聚合和分析時間序列數據。? ? ? ? ? ? ?
常用查詢示例:
# 計算 CPU 使用率 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)# 統計 HTTP 請求錯誤率 sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ??
二、Grafana
? ? Grafana 是一個開源的?數據可視化與分析平臺,專注于監控數據的展示和告警管理。它的架構設計靈活,支持多種數據源,并提供強大的儀表盤功能。
? ? Grafana 采用?前后端分離?的設計,主要分為:
- 后端(Server):處理數據查詢、用戶認證、告警等邏輯。
前端(UI):基于 React 的交互式儀表盤。
數據源插件:支持 Prometheus、MySQL、Elasticsearch 等 30+ 數據源。
組件 核心功能 關鍵用途 Grafana Server 數據處理、告警、權限管理 后端邏輯處理 Grafana UI 儀表盤編輯和展示 用戶交互界面 Data Sources 連接外部數據存儲 統一查詢不同數據庫 Panel Plugins 提供圖表類型(折線圖、表格等) 數據可視化 Alerting 基于查詢結果的告警管理 異常通知 User Management 權限控制和多租戶支持 團隊協作與安全 ? ? Grafana 通過靈活的插件架構和強大的可視化能力,成為監控領域的事實標準工具。結合 Prometheus 使用時,能構建從數據采集、存儲到分析和告警的完整監控體系。
? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ??
Grafana的主要特點:
- 跨平臺性:Grafana是一個跨平臺的開源的分析和可視化工具,支持多種操作系統,包括Linux、Windows、MacOS等。
- 豐富的數據源支持:Grafana支持多種數據源,如Graphite、InfluxDB、OpenTSDB、Prometheus、Elasticsearch等,使得用戶可以方便地整合各種數據來源進行可視化分析。
- 強大的可視化功能:Grafana具有快速靈活的客戶端圖表,提供了豐富的儀表盤插件和面板插件,支持多種展示方式,如折線圖、柱狀圖、餅圖、點狀圖等,可以滿足用戶不同的可視化需求。
- 警報功能:Grafana允許用戶設置警報規則,當數據達到設定閾值時,會通過郵件、釘釘、企業微信等方式發送通知,及時提醒用戶關注數據異常。
? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
?Grafana的基本功能:
- 數據查詢與可視化:用戶可以通過Grafana查詢各種數據源中的數據,并將其以圖表的形式展示出來,便于用戶進行數據分析和監控。
- 儀表盤創建與編輯:Grafana提供了靈活的儀表盤創建和編輯功能,用戶可以根據自己的需求自定義儀表盤,添加或刪除面板,調整面板的布局和樣式等。
- 用戶管理與權限控制:Grafana支持用戶管理和權限控制功能,管理員可以為不同用戶設置不同的權限,確保數據的安全性和私密性。
- 插件擴展:Grafana支持插件擴展功能,用戶可以通過安裝插件來增強Grafana的功能和可視化效果。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.1?Grafana Server(后端服務)
作用:
??處理用戶請求(如儀表盤渲染、數據查詢)。
??管理數據源(配置連接信息、認證)。
??告警引擎(評估告警規則并觸發通知)。
??用戶權限控制(RBAC 權限管理)。? ? ? ? ? ??
關鍵子模塊:
模塊 功能 HTTP API 提供 RESTful 接口供前端調用(如創建儀表盤、查詢數據)。 Data Proxy 代理查詢請求到不同數據源,統一返回格式。 Alerting Engine 定時檢查告警規則,觸發通知(需配置? alertmanager
?或內置告警)。Plugin Loader 加載和管理數據源、面板等插件。
? ? ? ? ? ??
2.2?Grafana UI(前端界面)
作用:
??可視化儀表盤:拖拽式編輯圖表、表格等面板。
??交互式查詢:通過 UI 構建查詢語句(如 PromQL、SQL)。
??告警管理:配置和查看告警狀態。? ? ? ? ? ??
核心功能:
Dashboard:由多個 Panel(面板)組成的可視化頁面。
Explore:直接查詢和探索數據的交互模式。
Alerting:告警規則配置和狀態查看。
??
2.3?數據源插件(Data Source Plugins)
作用:
??連接外部數據存儲(如 Prometheus、MySQL、InfluxDB)。
??轉換數據格式:將不同數據源的返回結果統一為 Grafana 可識別的結構。? ? ? ? ??
常見數據源:
數據源 適用場景 查詢語言 Prometheus 監控指標分析 PromQL MySQL 業務數據可視化 SQL Elasticsearch 日志分析 Lucene Query Loki 日志聚合(Grafana 原生方案) LogQL
? ??
2.4?面板插件(Panel Plugins)
作用:
??提供不同類型的可視化圖表(如折線圖、儀表盤、熱力圖)。
??支持自定義插件開發(社區提供 100+ 面板插件)。? ? ? ? ? ? ??
常用內置面板:
面板類型 用途 示例 Graph 時間序列數據趨勢圖 CPU 使用率曲線 Gauge 單值儀表盤 磁盤剩余空間百分比 Table 表格展示 慢查詢日志列表 Heatmap 密度分布圖 請求延遲分布
? ? ? ? ? ?
2.5?告警系統(Alerting)
作用:
??基于數據源查詢結果觸發告警(如 CPU 使用率 > 90%)。
??支持多通知渠道(郵件、Slack、PagerDuty)。? ? ? ? ? ?
工作流程:
定義告警規則:在儀表盤中配置條件(如?
avg(cpu_usage) > 90
)。評估規則:Grafana 定時執行查詢并檢查條件。
觸發通知:通過配置的渠道發送告警。
? ? ? ? ? ? ?
告警規則示例:
- name: HighCPUinterval: 1mrules:- alert: CPUOverloadexpr: avg(rate(node_cpu_seconds_total[5m])) > 0.9for: 5mannotations:summary: "High CPU usage on {{ $labels.instance }}"
? ? ? ? ? ? ? ?
2.6?用戶與權限管理
作用:
??控制用戶訪問權限(如只讀用戶、管理員)。
??組織(Organization)隔離:支持多租戶場景。? ? ? ??
權限模型:
角色 權限范圍 Viewer 僅查看儀表盤 Editor 編輯儀表盤,但不能修改數據源 Admin 管理數據源、用戶和全局設置
? ? 關于Prometheus和Grafana的基礎介紹就到這里。只有深入了解了它們的基礎知識和體系架構,才能更好地進行后續的安裝與部署工作。那么我們下篇安裝部署見💓!!!