1.
概述与准备工作
说明监控目标:CPU/内存/磁盘IO/网络/连接数/应用层错误(Nginx/Php-FPM/MySQL)。
准备环境:一台或多台监控服务器(建议使用独立VM或K8s),目标为台湾地区站群的每台云主机均需部署采集端。
工具选择建议:Prometheus + node_exporter + mysqld_exporter + nginx_exporter/ngx_http_stub_status + Grafana + Alertmanager(可选Zabbix或云厂商原生监控)。
2.
在每台云主机安装 node_exporter 与系统指标采集
下载并安装:wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*.tar.gz;解压并移动可执行文件到/usr/local/bin/。
创建 Systemd 服务:/etc/systemd/system/node_exporter.service 内容:ExecStart=/usr/local/bin/node_exporter --web.listen-address=":9100";然后 systemctl daemon-reload && systemctl enable --now node_exporter。
验证:curl http://<主机IP>:9100/metrics,能看到指标即成功。若有防火墙,放行9100端口或通过Prometheus拉取。
3.
应用层指标:Nginx、PHP-FPM、MySQL 的监控配置
Nginx:启用 ngx_http_stub_status_module,在server中加入 location /nginx_status { stub_status on; allow 127.0.0.1; deny all; }。使用exporter(nginx-vts-exporter或nginx-prometheus-exporter)采集。
PHP-FPM:在www池配置pm.status_path = /status,结合php-fpm_exporter或直接抓取FastCGI状态。
MySQL:安装mysqld_exporter,配置MYSQL_EXPORTER_USER并授予必要权限(PROCESS, REPLICATION CLIENT, SELECT)。配置示例:CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'pwd'; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
4.
部署 Prometheus 与配置抓取(scrape)任务
安装Prometheus,编辑prometheus.yml,增加targets:- job_name: 'node' static_configs: - targets: ['host1:9100','host2:9100']。
添加application exporters的job(nginx, phpfpm, mysql)。
启动并确认:systemctl enable --now prometheus;访问 http://prometheus:9090/targets 查看所有target为UP。若站群主机众多,使用服务发现或文件sd代替静态列表。
5.
在Prometheus中编写报警规则与Alertmanager集成
建立alert.rules.yml示例:groups: - name: site_group.rules rules: - alert: HighCPUUsage expr: avg by(instance)(rate(node_cpu_seconds_total{mode!="idle"}[5m])) > 0.85 for: 5m labels: severity: critical annotations: summary: "CPU利用率高于85% {{ $labels.instance }}"。
常用规则参考:HighMemory、HighIOWait(node_disk_io_time_seconds),HighNetIn/Out接近带宽上限,NginxHighConn(nginx_connections_active > X),High5xxRate(increase(nginx_http_requests_total{status=~"5.."}[5m]) / increase(nginx_http_requests_total[5m]) > 0.01)。
配置Alertmanager(alertmanager.yml)并在prometheus.yml中加入alertmanager配置,使报警能发送到邮件/Slack/DingTalk/Webhook。
6.
告警策略与自动化响应以避免崩溃
分级告警:warning(阈值临近)、critical(需要人工介入)、auto-remediation(可自动执行脚本)。例如CPU短时突增触发warning,持续5分钟触发critical并发短信。
自动化措施建议:①触发缩容或水平扩容API(调用云厂商或K8s HPA);②启用并下发临时限流规则到负载层(nginx limit_conn/limit_req 或 WAF);③临时切换到只读或返回降级页面;④重启异常服务(php-fpm/nginx)并记录操作。用Alertmanager webhook触发自定义脚本或调用CI/CD接口。
7.
性能观察与调优清单(实操命令与内核调优)
常用命令:top/htop、vmstat 1 5、iostat -x 1 5、iotop、ss -s、ss -tanp、tail -n 200 /var/log/nginx/access.log过滤5xx。
内核参数建议(/etc/sysctl.conf):net.core.somaxconn=65535;net.ipv4.tcp_tw_reuse=1;net.ipv4.tcp_fin_timeout=30;fs.file-max=200000。执行sysctl -p生效。
Nginx调优:worker_processes auto;worker_connections 10240;开启keepalive并合理配置keepalive_timeout;结合upstream keepalive减少后端连接次数。
8.
Q1: 在台湾站群遇到短时流量峰值时,监控系统如何最快发出告警?
A1: 首先在Prometheus设置短时间窗口的rule,例如rate(...[1m])并设置for:1m的告警,Alertmanager配置实时路由到短信/钉钉/Slack;其次在Exporter层启用push或正向代理(如Prometheus Pushgateway或agent)以减少抓取延迟;最后保证Alertmanager webhook能触发自动化脚本立刻限制连接或扩容。
9.
Q2: 如果流量持续高并导致Nginx 502/504较多,首要的排查与应对步骤是什么?
A2: 排查顺序:1)查看后端PHP-FPM或应用进程是否满载(ps/ss/php-fpm status);2)查看后端连接数和慢查询(MySQL slow query);3)检查磁盘IO或数据库锁导致响应慢;应对:临时开启Nginx限流与降级页面、增加后端实例或临时扩容数据库实例、优化慢查询并清理阻塞任务。
10.
Q3: 报警频繁误报如何降低噪音同时不漏报真实故障?
A3: 做法:调整报警规则为基于聚合的阈值(avg/percentile)并加上持续时间(for:5m);为同类实例设立group_by并去重(group_wait/group_interval/group_interval in Alertmanager);对非关键指标设定warning级别并只推送到邮件,关键告警推送到电话或短信;引入抑制规则(inhibit_rules)避免相互触发产生冗余告警。
来源:台湾站群云主机性能监控与报警配置避免流量高峰崩溃风险