一、監控架構設計
核心組件與數據流
- Prometheus:時序數據采集、存儲與告警規則管理
- Node Exporter:采集主機指標(CPU、內存、磁盤、網絡等)
- 數據庫Exporter:如
mysqld_exporter
、postgres_exporter
- Grafana:數據可視化與儀表盤展示
- Alertmanager(可選):告警通知管理
二、主機環境準備
1. 系統要求
- Linux系統(推薦CentOS 7+/Ubuntu 20.04+)
- 開放端口:9090(Prometheus)、3000(Grafana)、9100(Node Exporter)
- 確保所有節點時間同步(NTP服務)
# CentOS安裝NTP
sudo yum install ntp
sudo systemctl start ntpd
sudo systemctl enable ntpd# Ubuntu安裝NTP
sudo apt install ntp
sudo systemctl restart ntp
三、組件安裝與配置
1. 安裝Prometheus Server
下載二進制包
wget https://github.com/prometheus/prometheus/releases/download/v2.39.1/prometheus-2.39.1.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
sudo mv prometheus-2.39.1.linux-amd64 /usr/local/prometheus
創建系統服務
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus# 創建service文件
sudo cat <<EOF > /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/prometheus/prometheus \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/var/lib/prometheus \--web.listen-address=0.0.0.0:9090Restart=always[Install]
WantedBy=multi-user.target
EOF# 配置Prometheus
sudo cp /usr/local/prometheus/prometheus.yml /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus# 啟動服務
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
2. 部署Node Exporter(所有節點)
下載安裝
wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
sudo mv node_exporter-1.4.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
創建系統服務
sudo cat <<EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporterRestart=always[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
3. 配置Prometheus抓取規則
編輯 /etc/prometheus/prometheus.yml
:
scrape_configs:- job_name: 'node'static_configs:- targets: ['node1:9100', 'node2:9100', 'node3:9100']
重啟Prometheus生效:
sudo systemctl restart prometheus
四、數據庫監控配置(以MySQL為例)
1. 安裝mysqld_exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-*.tar.gz
sudo mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/
sudo useradd -rs /bin/false mysqld_exporter
2. 創建監控用戶
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'SecurePass123!' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
3. 創建環境變量文件
sudo mkdir /etc/mysqld_exporter
sudo cat <<EOF > /etc/mysqld_exporter/.my.cnf
[client]
user=exporter
password=SecurePass123!
EOF
4. 創建系統服務
sudo cat <<EOF > /etc/systemd/system/mysqld_exporter.service
[Unit]
Description=MySQL Exporter
After=network.target[Service]
User=mysqld_exporter
EnvironmentFile=/etc/mysqld_exporter/.my.cnf
ExecStart=/usr/local/bin/mysqld_exporter \--config.my-cnf="%a" \--web.listen-address=0.0.0.0:9104Restart=always[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload
sudo systemctl start mysqld_exporter
sudo systemctl enable mysqld_exporter
五、安裝與配置Grafana
1. 安裝Grafana(CentOS)
sudo tee /etc/yum.repos.d/grafana.repo <<EOF
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOFsudo yum install grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
2. 配置Grafana數據源
- 訪問
http://<服務器IP>:3000
,默認賬號admin/admin
- 左側菜單 → Configuration → Data Sources → Add data source
- 選擇 Prometheus,填寫URL
http://localhost:9090
- 點擊 Save & Test
六、導入監控儀表盤
1. 主機監控儀表盤
- Node Exporter Full:ID
1860
- Linux Hosts Metrics:ID
11074
2. MySQL監控儀表盤
- MySQL Overview:ID
7362
- Percona MySQL:ID
11323
操作步驟:
- 左側菜單 → Create → Import
- 輸入儀表盤ID → Load
- 選擇Prometheus數據源 → Import
七、安全加固
1. 防火墻配置
# CentOS
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --reload# Ubuntu
sudo ufw allow 3000/tcp
sudo ufw allow 9090/tcp
sudo ufw reload
2. Grafana反向代理(Nginx示例)
server {listen 80;server_name grafana.yourdomain.com;location / {proxy_pass http://localhost:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
八、告警配置示例
1. 創建告警規則文件
sudo cat <<EOF > /etc/prometheus/alerts.yml
groups:
- name: host-alertsrules:- alert: HighMemoryUsageexpr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85for: 5mlabels:severity: warningannotations:summary: "內存使用率過高 (實例 {{ $labels.instance }})"description: "內存使用率超過85%持續5分鐘"
EOF
2. 修改Prometheus配置
# /etc/prometheus/prometheus.yml
rule_files:- alerts.yml
重啟服務:
sudo systemctl restart prometheus
九、故障排查指南
1. 服務狀態檢查
sudo systemctl status prometheus
sudo systemctl status node_exporter
sudo systemctl status mysqld_exporter
2. 日志查看
# Prometheus日志
journalctl -u prometheus -f# Node Exporter日志
journalctl -u node_exporter -f# MySQL Exporter日志
journalctl -u mysqld_exporter -f
十、總結
通過原生安裝方式,您已構建完整的監控系統:
- 資源監控:實時掌握CPU、內存、磁盤等指標
- 數據庫監控:跟蹤查詢性能、連接數、復制狀態
- 告警通知:配置閾值觸發郵件/釘釘通知
- 安全加固:通過防火墻和反向代理保護服務
后續擴展方向:
- 集成Alertmanager實現多通道告警
- 監控Redis、Kafka等中間件
- 部署長期存儲(如Thanos)管理歷史數據
資源參考:
- Prometheus官方文檔
- Grafana儀表盤庫