ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Prometheus与Grafana构建跨平台监控系统实践

Prometheus与Grafana构建跨平台监控系统实践

1. 监控系统概述

在现代IT基础设施管理中,监控系统扮演着至关重要的角色。Prometheus作为云原生时代主流的监控解决方案,配合Grafana强大的可视化能力,能够为企业提供全面的监控覆盖。这套组合不仅适用于Linux服务器监控,同样也能很好地支持Windows环境(包括Win11系统)的监控需求。

监控系统的核心价值在于:

  • 实时掌握系统健康状态
  • 快速定位性能瓶颈
  • 预测容量需求
  • 辅助故障排查

2. 环境准备与安装

2.1 系统要求

监控系统部署需要满足以下基本要求:

组件最低配置推荐配置
Prometheus服务器2核CPU/4GB内存4核CPU/8GB内存
Grafana服务器2核CPU/2GB内存2核CPU/4GB内存
被监控节点1核CPU/500MB内存2核CPU/1GB内存

2.2 Prometheus安装

在Linux系统上安装Prometheus的步骤如下:

# 下载最新版Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz # 解压安装包 tar xvfz prometheus-*.tar.gz cd prometheus-* # 创建系统服务 sudo cp prometheus /usr/local/bin/ sudo cp promtool /usr/local/bin/ sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus

创建systemd服务文件/etc/systemd/system/prometheus.service:

[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus

2.3 Grafana安装

Grafana安装过程如下:

# 添加Grafana仓库 sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list # 安装Grafana sudo apt-get update sudo apt-get install grafana # 启动服务 sudo systemctl start grafana-server sudo systemctl enable grafana-server

3. 配置监控系统

3.1 Prometheus基础配置

编辑/etc/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: ['node1:9100', 'node2:9100']

3.2 监控Windows系统

对于Windows系统(包括Win11)的监控,需要安装Windows Exporter:

  1. 下载最新版Windows Exporter MSI安装包
  2. 运行安装程序,选择需要监控的指标类型
  3. 默认会监听9182端口

在Prometheus配置中添加:

- job_name: 'windows' static_configs: - targets: ['win11-host:9182']

3.3 端口监控配置

要监控特定端口(如8085)的可用性,可以使用Blackbox Exporter:

- job_name: 'blackbox' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - http://example.com:8085 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115

4. Grafana配置与仪表板

4.1 添加数据源

  1. 登录Grafana(默认地址http://localhost:3000)
  2. 导航到Configuration > Data Sources
  3. 选择Prometheus类型
  4. 填写Prometheus服务器地址(如http://prometheus:9090)
  5. 点击Save & Test验证连接

4.2 导入仪表板

Grafana社区提供了丰富的预构建仪表板:

  1. 导航到Dashboards > Manage
  2. 点击Import
  3. 输入仪表板ID(如1860用于Node Exporter)
  4. 选择Prometheus数据源
  5. 点击Import完成导入

对于Windows监控,可以导入Windows Exporter仪表板(ID:10467)

5. 告警配置

5.1 Prometheus告警规则

创建告警规则文件/etc/prometheus/alert.rules.yml:

groups: - name: example rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80 for: 10m labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}" description: "{{ $labels.instance }} CPU usage is {{ $value }}%"

在prometheus.yml中引用规则文件:

rule_files: - 'alert.rules.yml'

5.2 Grafana告警

Grafana 8.0+提供了改进的告警功能:

  1. 在仪表板中编辑任意面板
  2. 切换到Alert选项卡
  3. 设置告警条件和阈值
  4. 配置通知渠道(Email、Slack等)
  5. 保存面板设置

6. 高级配置与优化

6.1 长期存储方案

Prometheus默认本地存储适合短期数据,长期存储方案包括:

  1. Thanos:提供全局视图和长期存储
  2. Cortex:水平扩展的Prometheus即服务
  3. M3DB:分布式时序数据库

6.2 性能优化建议

  1. 调整抓取间隔(根据监控对象数量调整)
  2. 使用Recording Rules预计算常用查询
  3. 合理设置数据保留期限
  4. 对大型部署考虑分片策略

6.3 安全配置

  1. 启用TLS加密通信:
tls_config: cert_file: /path/to/cert.pem key_file: /path/to/key.pem
  1. 配置基础认证:
basic_auth: username: admin password: securepassword

7. 常见问题排查

7.1 指标无法收集

检查步骤:

  1. 验证目标端点是否可达
  2. 检查防火墙设置(特别是Windows系统)
  3. 查看Exporter日志
  4. 验证Prometheus配置语法

7.2 Grafana显示无数据

排查方法:

  1. 检查数据源连接状态
  2. 验证时间范围设置
  3. 检查PromQL查询语法
  4. 查看Prometheus是否有相关指标

7.3 性能问题

优化建议:

  1. 减少不必要的指标收集
  2. 增加抓取间隔时间
  3. 考虑水平扩展Prometheus
  4. 优化Recording Rules

8. 实际应用案例

8.1 监控Web应用

配置示例监控Nginx:

- job_name: 'nginx' static_configs: - targets: ['nginx:9113'] metrics_path: /metrics

8.2 数据库监控

MySQL监控配置:

- job_name: 'mysql' static_configs: - targets: ['mysql:9104'] params: collect[]: - global_status - info_schema.innodb_metrics

8.3 容器监控

使用cAdvisor监控Docker:

- job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080']

9. 监控系统维护

9.1 日常维护任务

  1. 定期检查存储空间使用情况
  2. 监控Prometheus自身健康状态
  3. 定期更新Exporter版本
  4. 审查告警规则有效性

9.2 备份策略

关键数据备份包括:

  1. Prometheus配置文件
  2. Grafana仪表板JSON定义
  3. Alertmanager配置
  4. 重要Recording Rules

10. 扩展与集成

10.1 与CI/CD集成

  1. 将监控配置纳入版本控制
  2. 自动化仪表板部署
  3. 在部署流程中添加监控验证

10.2 自定义Exporter开发

使用Prometheus客户端库开发自定义Exporter的基本步骤:

  1. 选择合适的客户端库(Go、Python、Java等)
  2. 定义并暴露指标
  3. 实现收集逻辑
  4. 暴露HTTP端点

Go语言示例:

package main import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { requests := prometheus.NewCounter( prometheus.CounterOpts{ Name: "myapp_requests_total", Help: "Total number of requests", }, ) prometheus.MustRegister(requests) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8085", nil) }

这套监控系统在实际使用中,我发现合理设置告警阈值和静默规则对于减少误报非常重要。对于关键业务指标,建议采用多级告警策略,从预警到严重告警设置不同的响应流程。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进