使用Prometheus+Grafana监控WordPress服务器
本文详解使用Prometheus+Grafana搭建完整的WordPress服务器监控系统。
监控架构
WordPress Server
├── Node Exporter (系统指标)
├── MySQL Exporter (数据库指标)
├── Nginx Exporter (Web服务器指标)
└── WordPress Exporter (应用指标)
↓
Prometheus (时序数据库)
↓
Grafana (可视化仪表盘 + 告警)
安装Prometheus
Ubuntu/Debian
# 创建prometheus用户
sudo useradd --no-create-home --shell /bin/false prometheus
# 下载最新版本
wget https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar -xzf prometheus-2.50.0.linux-amd64.tar.gz
# 移动文件
sudo cp prometheus-2.50.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.50.0.linux-amd64/promtool /usr/local/bin/
# 创建配置文件目录
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
# 复制配置
sudo cp -r prometheus-2.50.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.50.0.linux-amd64/console_libraries /etc/prometheus
prometheus.yml 配置
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "/etc/prometheus/alert_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node"
static_configs:
- targets: ["localhost:9100"]
- job_name: "mysql"
static_configs:
- targets: ["localhost:9104"]
- job_name: "nginx"
static_configs:
- targets: ["localhost:9113"]
- job_name: "wordpress"
metrics_path: "/wp-json/prometheus/metrics"
static_configs:
- targets: ["localhost:80"]
安装Node Exporter(系统监控)
# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
# 安装
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
# 创建systemd服务
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOT
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOT
# 启动
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
安装MySQL Exporter(数据库监控)
# 创建监控用户
mysql -u root -p -e "
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'SecurePassword123!' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
"
# 下载exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar -xzf mysqld_exporter-0.15.0.linux-amd64.tar.gz
# 配置
echo "DATA_SOURCE_NAME=\"exporter:SecurePassword123!@(localhost:3306)/\"" | sudo tee /etc/default/mysqld_exporter
# 安装
sudo cp mysqld_exporter-0.15.0.linux-amd64/mysqld_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/mysqld_exporter
# 创建systemd服务(类似Node Exporter)
安装Grafana
# Ubuntu/Debian
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
# 启动
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
# 访问 http://your-server:3000 (默认 admin/admin)
添加Prometheus数据源
1. 登录Grafana → Configuration → Data Sources
2. Add data source → Prometheus
3. URL: http://localhost:9090
4. Click "Save & Test"
导入Dashboard
推荐Dashboard ID
| Dashboard | ID | 说明 |
|---|---|---|
| Node Exporter Full | 1860 | 完整系统监控 |
| MySQL Overview | 7362 | MySQL性能监控 |
| Nginx Stats | 9614 | Nginx状态监控 |
| WordPress Prometheus | 12097 | WordPress专用 |
# 导入方式:
# Grafana → + → Import → 输入Dashboard ID → Load
自定义告警规则
/etc/prometheus/alert_rules.yml
groups:
- name: wordpress_alerts
rules:
# 服务器CPU > 80%
- alert: HighCpuLoad
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU负载过高: {{ $value }}%"
description: "服务器 {{ $labels.instance }} CPU使用率超过80%"
# 内存使用 > 90%
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable / node_memory_MemTotal)) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "内存使用率过高: {{ $value }}%"
# 磁盘使用 > 85%
- alert: HighDiskUsage
expr: (1 - (node_filesystem_avail / node_filesystem_size)) * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "磁盘使用率过高: {{ $value }}%"
# MySQL连接数 > 80%
- alert: MySQLTooManyConnections
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80
for: 2m
labels:
severity: warning
annotations:
summary: "MySQL连接数过高"
配置Alertmanager(告警发送)
# /etc/alertmanager/alertmanager.yml
global:
smtp_smarthost: 'smtp.gmail.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password: 'app_password'
route:
receiver: 'email-alerts'
receivers:
- name: 'email-alerts'
email_configs:
- to: 'admin@example.com'
subject: '[Alert] {{ .GroupLabels.alertname }}'
body: |
{{ range .Alerts }}
Alert: {{ .Annotations.summary }}
Description: {{ .Annotations.description }}
{{ end }}
WordPress专用指标导出
创建简易PHP导出脚本
// wp-content/metrics.php
header('Content-Type: text/plain');
// 文章总数
$post_count = wp_count_posts('post')->publish;
echo "wp_posts_total $post_count\n";
// 页面总数
$page_count = wp_count_posts('page')->publish;
echo "wp_pages_total $page_count\n";
// 评论待审
$pending_comments = get_comments(['status' => '0', 'count' => true]);
echo "wp_comments_pending $pending_comments\n";
// 用户总数
$user_count = count_users()['total_users'];
echo "wp_users_total $user_count\n";
监控关键指标
| 类别 | 指标 | 告警阈值 |
|---|---|---|
| 系统 | CPU使用率 | > 80% |
| 系统 | 内存使用率 | > 90% |
| 系统 | 磁盘使用率 | > 85% |
| MySQL | 连接数占比 | > 80% |
| MySQL | 慢查询数量 | > 10/分钟 |
| Nginx | 4xx错误率 | > 5% |
| Nginx | 5xx错误率 | > 1% |
| WordPress | PHP-FPM进程数 | > 80% max_children |
自动化部署(使用Ansible)
# ansible playbook
- name: Install Prometheus stack
hosts: monitoring
become: yes
tasks:
- name: Install Prometheus
unarchive:
src: https://github.com/.../prometheus.tar.gz
dest: /tmp/
remote_src: yes
- name: Start Node Exporter
systemd:
name: node_exporter
state: started
enabled: yes
最佳实践
- 分离监控服务器:不要和业务同机
- 长期存储:使用VictoriaMetrics或Thanos扩展Prometheus
- 告警分级:warning(邮件)和critical(短信/电话)
- 保留策略:Prometheus数据保留15-30天
- 备份Grafana仪表盘:导出JSON,纳入版本控制
通过完整的监控,可以在用户投诉前发现并解决问题。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)