从零构建云服务器监控体系:Prometheus+Grafana实战指南

去年接手朋友创业项目的服务器运维时,我面对着一台没有任何监控的云主机——直到某天凌晨MySQL崩溃导致服务中断8小时,才意识到监控系统的重要性。本文将分享如何用Prometheus+Grafana为云服务器搭建完整的监控解决方案,涵盖从基础资源到MySQL数据库的全方位监控。

1. 环境准备与组件规划

在阿里云ECS上实测时发现,默认的安全组规则会阻断监控数据采集。我们需要先规划好各组件的关系:

  • 数据流架构

    云服务器资源指标 → node_exporter → Prometheus → Grafana
    MySQL性能指标 → mysqld_exporter → Prometheus → Grafana
    
  • 端口规划表

    组件默认端口安全组建议
    Prometheus9090限制IP访问
    node_exporter9100内网开放
    mysqld_exporter9104内网开放
    Grafana3000公网开放

提示:生产环境建议为exporter配置认证,文中示例为简化流程未包含

2. Prometheus核心部署

通过systemd管理服务能获得更好的稳定性,以下是经过20+次部署验证的最佳实践:

# 下载最新稳定版(示例版本号需替换)
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xzf prometheus-*.tar.gz
mv prometheus-*/ /usr/local/prometheus

配置示例(/etc/systemd/system/prometheus.service):

[Unit]
Description=Prometheus Monitoring
After=network.target

[Service]
User=prometheus
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/data \
  --web.listen-address=:9090
Restart=always

[Install]
WantedBy=multi-user.target

关键配置项说明:

  • scrape_interval: 15s(平衡精度与资源消耗)
  • evaluation_interval: 15s(告警规则评估频率)
  • 推荐添加external_labels区分不同环境

3. 指标采集器部署实战

3.1 系统指标采集(node_exporter)

除基础指标外,建议启用以下模块:

./node_exporter \
  --collector.systemd \
  --collector.tcpstat \
  --collector.netdev

3.2 MySQL监控配置

安全提示:避免使用root账号,创建专用监控账户:

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'ComplexPassword123!';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

.my.cnf配置示例:

[client]
user=exporter
password=ComplexPassword123!
host=127.0.0.1
port=3306

4. Grafana可视化进阶技巧

导入仪表盘时,这几个开源模板最实用:

  • Node Exporter Full (ID: 1860)
  • MySQL Overview (ID: 7362)
  • Prometheus 2.0 Stats (ID: 3662)

自定义图表时推荐使用:

# 查询过去5分钟CPU使用率
100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

5. 生产环境优化建议

  • 存储优化

    • 调整--storage.tsdb.retention.time(默认15天)
    • 考虑远程存储方案(如Thanos、Mimir)
  • 性能调优

    # prometheus.yml
    global:
      scrape_interval: 30s  # 高负载时调整
    
  • 安全加固

    • 为Grafana配置HTTPS
    • 使用basic_auth保护Prometheus接口

在最近的一次客户部署中,这套监控系统提前预警了磁盘空间不足的问题,避免了服务中断。当看到所有指标在Grafana上实时展现时,那种对系统运行状态的了如指掌的感觉,是运维工作最大的成就感来源。

更多推荐