快速搭建企業(yè)級(jí)監(jiān)控系統(tǒng):Prometheus + Grafana 全攻略
一站式掌握云原生監(jiān)控體系搭建,從零到一構(gòu)建生產(chǎn)級(jí)監(jiān)控平臺(tái)
引言
在微服務(wù)和云原生時(shí)代,系統(tǒng)監(jiān)控已成為保障業(yè)務(wù)穩(wěn)定運(yùn)行的基石。今天我們將手把手教你如何基于 Prometheus 和 Grafana 構(gòu)建一套功能完備的企業(yè)級(jí)監(jiān)控系統(tǒng),涵蓋Linux服務(wù)器、MySQL、Redis、Docker容器和JVM微服務(wù)等核心組件的監(jiān)控。
一、監(jiān)控系統(tǒng)架構(gòu)概述
核心組件介紹
Prometheus:開源的監(jiān)控解決方案,采用 Pull 模式采集指標(biāo),內(nèi)置時(shí)序數(shù)據(jù)庫,支持強(qiáng)大的 PromQL 查詢語言。用于監(jiān)控主服務(wù)器,負(fù)責(zé)數(shù)據(jù)采集和存儲(chǔ);
Grafana:功能強(qiáng)大的數(shù)據(jù)可視化工具,支持多種數(shù)據(jù)源,可創(chuàng)建豐富的監(jiān)控儀表盤。
Exporters:數(shù)據(jù)采集代理,負(fù)責(zé)暴露各組件監(jiān)控指標(biāo):
- node_exporter:收集Host硬件和操作系統(tǒng)信息
- mysqld_exporter:MySQL 數(shù)據(jù)庫監(jiān)控
- redis_exporter:Redis 監(jiān)控
- cadvisor:Docker容器監(jiān)控
- jmx_exporter:JVM 應(yīng)用監(jiān)控
核心組件頁面展示
Prometheus:

Grafana:



二、環(huán)境準(zhǔn)備與部署
1. 部署 Prometheus Server
# 創(chuàng)建配置目錄
mkdir -p /home/dockerdata/prometheus/
# 啟動(dòng)Prometheus
docker run -d --name prometheus --net=host -p 9090:9090 \
-v /home/dockerdata/prometheus/:/etc/prometheus/ \
prom/prometheus
2. 部署 Grafana
# 創(chuàng)建數(shù)據(jù)目錄
mkdir -p /home/dockerdata/grafana/{conf,data,log,plugins}
# 啟動(dòng)Grafana
# 考慮到一旦docker容器停止,其存儲(chǔ)的數(shù)據(jù)就會(huì)丟失,因此還需要進(jìn)行數(shù)據(jù)的持久化工作
# 需要把容器內(nèi)的 /etc/grafana、/var/lib/grafana、/var/log/grafana 三個(gè)目錄掛載到宿主機(jī)上,以確保數(shù)據(jù)不隨容器的停止而消失
docker run -d --name grafana -p 3000:3000 \
-v /home/dockerdata/grafana/conf:/etc/grafana \
-v /home/dockerdata/grafana/data:/var/lib/grafana \
-v /home/dockerdata/grafana/log:/var/log/grafana \
-v /home/dockerdata/grafana/plugins:/var/lib/grafana/plugins \
grafana/grafana
# 復(fù)制默認(rèn)配置
docker cp grafana:/etc/grafana/. /home/dockerdata/grafana/conf
docker cp grafana:/var/lib/grafana/. /home/dockerdata/grafana/data
docker cp grafana:/var/log/grafana/. /home/dockerdata/grafana/log
# 修改宿主機(jī)新建目錄的所有者為 grafana
# 新增用戶grafana
useradd grafana
# 修改uid為472
vi /etc/passwd
...
grafana:x:472:472::/home/grafana:/bin/bash
# 修改gid為0
vi /etc/group
...
grafana:x:0:
# 修改 grafana 目錄所有者為 grafana
chown -R grafana:grafana grafana
關(guān)鍵點(diǎn):必須創(chuàng)建 grafana 用戶并正確設(shè)置目錄權(quán)限,否則會(huì)出現(xiàn)權(quán)限錯(cuò)誤。
三、各類監(jiān)控組件部署
1. 主機(jī)監(jiān)控 - node_exporter
# 二進(jìn)制部署(推薦用于主機(jī)監(jiān)控)
nohup ./node_exporter --web.listen-address=":9100" &
2. MySQL 監(jiān)控 - mysqld_exporter
# 創(chuàng)建systemd服務(wù)
vim /usr/lib/systemd/system/mysqld_exporter.service
# 輸入服務(wù)內(nèi)容:
./mysqld_exporter --web.listen-address=:9038 --config.my-cnf=./my.cnf &
PS:mysqld_exporter用docker安裝會(huì)報(bào)my.cnf文件找不到錯(cuò)誤,應(yīng)該是啟動(dòng)命令需要指定掛載my.cnf文件;
3. Redis 監(jiān)控 - redis_exporter
docker run -d --name redis_exporter -p 9121:9121 \
oliver006/redis_exporter \
--redis.addr redis://your-redis-host:6379 \
--redis.password 'your-password'
4. 容器監(jiān)控 - cadvisor
docker run --name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
google/cadvisor
5. JVM 監(jiān)控 - jmx_exporter
# 下載JMX exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.15.0/jmx_prometheus_javaagent-0.15.0.jar
# 啟動(dòng)Java應(yīng)用時(shí)添加javaagent參數(shù)
java -javaagent:/path/to/jmx_prometheus_javaagent-0.15.0.jar=9041:/path/to/jmx_exporter.yml \
-jar your-application.jar
四、配置整合
1. Prometheus 配置
編輯 /home/dockerdata/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['your-host-ip:9100']
scrape_interval: 10s
- job_name: 'mysql'
static_configs:
- targets: ['your-host-ip:9104']
- job_name: 'redis'
static_configs:
- targets: ['your-host-ip:9121']
- job_name: 'cadvisor'
static_configs:
- targets: ['your-host-ip:8080']
- job_name: 'jvm'
static_configs:
- targets: ['your-app-ip:9041']
2. 重啟 Prometheus 使配置生效
docker restart prometheus
五、Grafana 配置與儀表盤
1. 數(shù)據(jù)源配置
- 訪問
http://your-host-ip:3000登錄 Grafana(初始賬號(hào)/密碼:admin/admin) - 添加 Prometheus 數(shù)據(jù)源
- 配置 URL:
http://your-prometheus-host:9090
2. 導(dǎo)入監(jiān)控儀表盤
推薦使用的 Dashboard ID:
|
監(jiān)控類型 |
Dashboard ID |
特點(diǎn) |
|
Linux主機(jī) |
8919 |
Node Exporter 中文版,監(jiān)控全面 |
|
MySQL |
7362 |
專業(yè)的數(shù)據(jù)庫性能監(jiān)控 |
|
Redis |
763 |
Redis 關(guān)鍵指標(biāo)監(jiān)控 |
|
Docker容器 |
11277 |
容器資源使用情況 |
|
JVM |
4701 |
按服務(wù)名顯示,推薦使用 |
|
JVM |
9568 |
按IP端口顯示,簡(jiǎn)潔明了 |
|
Spring Boot |
10280 |
應(yīng)用級(jí)監(jiān)控,含日志變化 |
導(dǎo)入方法:左側(cè)菜單 → Dashboards → Import → 輸入 ID → 選擇數(shù)據(jù)源 → Import
六、告警配置
1. 配置郵件告警
編輯 Grafana 配置文件 grafana.ini:
[smtp]
enabled = true
host = smtp.qq.com:465
user = your-email@qq.com
password = your-smtp-password
from_address = your-email@qq.com
from_name = Grafana
[alerting]
enabled = true
2. 配置告警規(guī)則
在 Dashboard 面板中配置告警:
- 進(jìn)入需要告警的面板
- 點(diǎn)擊面板標(biāo)題 → Edit
- 選擇 Alert 標(biāo)簽頁 → Create Alert
- 設(shè)置告警條件、評(píng)估時(shí)間等
- 配置通知渠道
七、常見問題排查
1. Grafana 權(quán)限錯(cuò)誤
# 錯(cuò)誤信息:
logger=migrator level=error msg="alert migration failure" error="failed to check table existence: unable to open database file: permission denied"
# 解決方案:
執(zhí)行上述新增用戶grafana命令
2. 時(shí)間同步問題
# 第一種方法:?jiǎn)?dòng)時(shí)進(jìn)行映射
docker run -d -p 8080:80 -v /etc/localtime:/etc/localtime nginx
# 第二種:復(fù)制時(shí)區(qū)信息到容器
# 如果本機(jī)時(shí)區(qū)正確直接:
docker cp /etc/localtime nginx:/etc/localtime
docker cp /etc/localtime [容器ID或名字]:/etc/localtime
# 如果本機(jī)時(shí)區(qū)不正確:
docker cp /usr/share/zoneinfo/Asia/Shanghai nginx:/etc/localtime
3. 磁盤空間影響
現(xiàn)象:磁盤占滿后,監(jiān)控?cái)?shù)據(jù)出現(xiàn)斷層,服務(wù)健康檢查失敗
解決:及時(shí)清理磁盤空間,監(jiān)控系統(tǒng)會(huì)自動(dòng)恢復(fù)


八、生產(chǎn)環(huán)境建議
- 數(shù)據(jù)持久化:所有組件都要配置數(shù)據(jù)持久化,防止容器重啟數(shù)據(jù)丟失
- 資源限制:為容器設(shè)置合理的 CPU、內(nèi)存限制
- 監(jiān)控告警:設(shè)置磁盤使用率、容器狀態(tài)等基礎(chǔ)告警
- 備份策略:定期備份 Grafana 儀表盤配置和 Prometheus 數(shù)據(jù)
- 版本管理:保持組件版本兼容性,定期升級(jí)
結(jié)語
通過本文的詳細(xì)講解,相信你已經(jīng)能夠搭建一套完整的監(jiān)控系統(tǒng)。監(jiān)控體系的建設(shè)不是一蹴而就的,需要在實(shí)際使用中不斷優(yōu)化調(diào)整。建議先從核心業(yè)務(wù)指標(biāo)開始,逐步完善監(jiān)控覆蓋范圍,讓監(jiān)控真正成為保障系統(tǒng)穩(wěn)定性的"眼睛"。
實(shí)用提示:
- 所有組件啟動(dòng)后,通過 Prometheus 的 Targets 頁面(Status → Targets)檢查采集狀態(tài)
- Grafana 圖表配置時(shí)注意使用正確的字段(如 ES 數(shù)據(jù)源使用
@timestamp而非timestamp) - 告警配置后要進(jìn)行測(cè)試,確保通知渠道暢通
希望這份全攻略能幫助你快速構(gòu)建可靠的監(jiān)控體系!

浙公網(wǎng)安備 33010602011771號(hào)