1. 监控系统核心组件解析监控系统就像给IT基础设施装上的健康监测仪而PrometheusGrafana这套组合堪称当前最流行的开源监控方案。先来拆解下这套系统的核心部件Prometheus本质上是一个时间序列数据库但它自带数据抓取、存储和告警功能。我把它比作一个数据吸尘器——会定期从各个目标吸取监控指标。它的独特之处在于采用拉取(Pull)模式被监控对象只需要暴露HTTP接口Prometheus就会主动来采集数据。Grafana则是数据可视化领域的瑞士军刀能把枯燥的数字变成直观的仪表盘。我特别喜欢它的模板库功能就像装修时可以直接选用设计师的样板间几分钟就能搭建专业级监控视图。Exporter家族是这套系统的传感器网络node-exporter采集主机指标CPU/内存/磁盘等mysqld-exporter专攻MySQL数据库指标cadvisor负责容器监控其他还有redis-exporter、nginx-exporter等数十种组件2. 快速搭建监控环境2.1 Docker化部署实战用Docker部署这些组件最省事这是我验证过的docker-compose.yml配置version: 3 services: prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - --config.file/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - 3000:3000 volumes: - grafana-storage:/var/lib/grafana node-exporter: image: prom/node-exporter ports: - 9100:9100 volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro mysqld-exporter: image: prom/mysqld-exporter ports: - 9104:9104 environment: - DATA_SOURCE_NAMEexporter:password(mysql-host:3306)/ cadvisor: image: google/cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro volumes: grafana-storage:关键配置说明所有组件都设置了restart: always保证异常自动恢复挂载宿主机系统目录时注意ro(只读)权限MySQL exporter需要配置正确的数据库连接串2.2 Prometheus核心配置prometheus.yml是整套系统的大脑典型配置如下global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] - job_name: node static_configs: - targets: [node-exporter:9100] - job_name: mysql static_configs: - targets: [mysqld-exporter:9104] - job_name: docker static_configs: - targets: [cadvisor:8080]配置技巧生产环境建议scrape_interval设为30-60s使用docker-compose服务名作为target主机名多实例监控时可以用服务发现替代静态配置3. 数据可视化实战3.1 Grafana基础配置首次登录Grafana(默认admin/admin)需要添加Prometheus数据源URL填http://prometheus:9090其他参数保持默认导入官方仪表板模板主机监控推荐ID8919MySQL监控推荐ID7362容器监控推荐ID1933.2 深度定制技巧我常用的高级功能变量联动创建$host变量实现多主机切换查看混合数据源结合Prometheus和MySQL直连查询告警规则设置CPU80%持续5分钟触发告警注释功能标记系统变更时间点示例告警规则配置groups: - name: host-alerts rules: - alert: HighCPU expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{modeidle}[5m])) * 100) 80 for: 5m labels: severity: warning annotations: summary: High CPU usage on {{ $labels.instance }}4. 典型监控场景实现4.1 主机监控关键指标通过node-exporter可以监控CPU使用率、负载、各状态时间占比内存使用量、swap、缓存情况磁盘空间、IOPS、读写延迟网络带宽、连接数、错误包我常用的PromQL查询# CPU使用率 100 - (avg by(instance)(irate(node_cpu_seconds_total{modeidle}[1m])) * 100) # 内存使用率 (node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes * 100 # 磁盘空间 node_filesystem_avail_bytes{mountpoint/} / node_filesystem_size_bytes{mountpoint/} * 1004.2 MySQL监控要点mysqld-exporter提供的核心指标包括查询性能QPS、慢查询、线程状态连接数当前连接、最大连接数InnoDB缓冲池、行操作、锁等待复制状态主从延迟、二进制日志关键告警规则示例# 连接数超过80% mysql_global_status_threads_connected / mysql_global_variables_max_connections 0.8 # 复制延迟超过30秒 mysql_slave_status_seconds_behind_master 304.3 容器监控方案cadvisor提供的容器指标资源限制CPU/内存配额使用情况网络流量进出带宽、错误包文件系统读写速率、IOPS特别有用的查询# 容器CPU使用率 sum(rate(container_cpu_usage_seconds_total{name!}[1m])) by (name) # 容器内存使用 container_memory_working_set_bytes{name!}5. 生产环境优化建议5.1 性能调优经验Prometheus存储SSD磁盘适当调整块保留期采样频率关键指标15s普通指标30-60s数据保留本地存储建议2-4周长期数据用远端存储资源限制为容器设置合理的CPU/Memory限制5.2 高可用方案生产级部署建议Prometheus多实例负载均衡使用Thanos或VictoriaMetrics实现长期存储Grafana配置多个数据源实现故障转移关键exporter部署多副本5.3 安全防护必须实施的措施为exporter配置HTTPS和基础认证使用网络策略限制访问范围Prometheus启用TSDB加密Grafana配置细粒度权限控制6. 常见问题排查指南数据采集失败检查targets页面状态是否为UP验证网络连通性curl http://exporter:port/metrics查看exporter日志是否有权限错误仪表板无数据确认时间范围设置正确检查PromQL语法是否正确验证指标名称是否匹配注意版本差异性能问题检查Prometheus内存/CPU使用量优化高消耗的PromQL查询考虑启用查询日志分析慢查询这套监控方案我在多个生产环境部署过最大的优势是组件解耦、扩展性强。曾经用它在半小时内搭建起跨数据中心的监控体系帮助团队快速定位了数据库性能瓶颈。对于刚接触监控的新手建议先从主机监控开始逐步扩展到数据库和业务指标最终构建完整的可观测性体系。