伏羲天气预报业务监控:Prometheus+Grafana实现推理延迟与成功率看板
伏羲天气预报业务监控PrometheusGrafana实现推理延迟与成功率看板1. 业务监控需求分析伏羲天气预报系统作为复旦大学开发的15天全球天气预报级联机器学习系统在实际业务运行中面临着关键的监控需求。天气预报的准确性和及时性直接关系到民生和经济活动因此需要对系统的推理性能和稳定性进行实时监控。核心监控指标包括推理延迟从接收输入数据到生成预报结果的时间成功率预报任务成功完成的比例资源使用CPU、内存、存储的消耗情况服务质量系统可用性和响应能力传统的日志查看方式无法满足实时监控需求需要构建专业的监控看板来直观展示系统运行状态。2. 监控方案技术选型2.1 Prometheus监控系统Prometheus是一款开源的系统监控和警报工具包特别适合监控容器化和微服务架构。其特点包括多维数据模型通过指标名称和键值对标签来标识时间序列数据灵活的查询语言PromQL支持实时查询和聚合不依赖分布式存储单个服务器节点自主工作通过HTTP拉取方式收集时间序列数据支持多种图形和仪表盘模式2.2 Grafana数据可视化Grafana是一个开源的指标分析和可视化套件主要用于大规模指标数据的可视化展示。其优势包括丰富的可视化组件图表、表格、热图、单值显示等多数据源支持Prometheus、Graphite、InfluxDB等灵活的仪表盘配置可拖拽组件、自定义查询、告警设置用户友好的界面易于配置和使用2.3 整体架构设计监控系统的整体架构包括数据采集层在伏羲应用中集成Prometheus客户端库数据存储层Prometheus服务器定时拉取并存储指标数据可视化层Grafana从Prometheus查询数据并展示告警层配置阈值告警及时发现问题3. 伏羲应用监控集成3.1 添加Prometheus客户端依赖首先需要在伏羲应用中集成Prometheus客户端库# 安装Python Prometheus客户端 pip install prometheus-client3.2 实现监控指标收集在伏羲应用代码中添加监控指标收集功能from prometheus_client import Counter, Gauge, Histogram, start_http_server import time # 定义监控指标 REQUEST_DURATION Histogram(fuxi_request_duration_seconds, 伏羲请求处理时间, [forecast_type]) REQUEST_COUNT Counter(fuxi_requests_total, 伏羲请求总数, [forecast_type, status]) ACTIVE_REQUESTS Gauge(fuxi_active_requests, 当前活跃请求数) MODEL_LOAD_TIME Gauge(fuxi_model_load_time_seconds, 模型加载时间, [model_name]) # 在应用启动时启动Prometheus指标服务器 start_http_server(8000) # 在8000端口提供指标数据 def monitor_forecast(forecast_type): 监控装饰器用于统计预报执行时间和成功率 def decorator(func): def wrapper(*args, **kwargs): start_time time.time() ACTIVE_REQUESTS.inc() try: result func(*args, **kwargs) REQUEST_COUNT.labels(forecast_typeforecast_type, statussuccess).inc() return result except Exception as e: REQUEST_COUNT.labels(forecast_typeforecast_type, statuserror).inc() raise e finally: duration time.time() - start_time REQUEST_DURATION.labels(forecast_typeforecast_type).observe(duration) ACTIVE_REQUESTS.dec() return wrapper return decorator # 应用监控装饰器到预报函数 monitor_forecast(forecast_typeshort) def run_short_forecast(input_data, steps): # 短期预报逻辑 pass monitor_forecast(forecast_typemedium) def run_medium_forecast(input_data, steps): # 中期预报逻辑 pass monitor_forecast(forecast_typelong) def run_long_forecast(input_data, steps): # 长期预报逻辑 pass3.3 添加资源使用监控监控系统的资源使用情况import psutil from prometheus_client import Gauge # 系统资源监控指标 CPU_USAGE Gauge(fuxi_cpu_usage_percent, CPU使用率) MEMORY_USAGE Gauge(fuxi_memory_usage_bytes, 内存使用量) DISK_USAGE Gauge(fuxi_disk_usage_bytes, 磁盘使用量) def monitor_system_resources(): 监控系统资源使用情况 # CPU使用率 cpu_percent psutil.cpu_percent(interval1) CPU_USAGE.set(cpu_percent) # 内存使用 memory psutil.virtual_memory() MEMORY_USAGE.set(memory.used) # 磁盘使用 disk psutil.disk_usage(/) DISK_USAGE.set(disk.used) # 定期收集系统资源指标 import threading def start_resource_monitoring(): def monitor_loop(): while True: monitor_system_resources() time.sleep(60) # 每分钟收集一次 thread threading.Thread(targetmonitor_loop) thread.daemon True thread.start()4. Prometheus配置与部署4.1 Prometheus安装配置安装Prometheus服务器# 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz tar xvfz prometheus-*.tar.gz cd prometheus-* # 创建配置文件 cat EOF prometheus.yml global: scrape_interval: 15s # 每15秒采集一次数据 scrape_configs: - job_name: fuxi-weather static_configs: - targets: [localhost:8000] # 伏羲应用指标端点 metrics_path: /metrics - job_name: prometheus static_configs: - targets: [localhost:9090] # Prometheus自身监控 EOF # 启动Prometheus ./prometheus --config.fileprometheus.yml4.2 数据采集配置优化针对伏羲应用特点优化采集配置# prometheus.yml 伏羲专用配置 scrape_configs: - job_name: fuxi-application scrape_interval: 30s # 30秒采集间隔适合天气预报场景 scrape_timeout: 25s # 超时时间略小于采集间隔 static_configs: - targets: [fuxi-app:8000] relabel_configs: - source_labels: [__address__] target_label: instance replacement: fuxi-weather-forecast - job_name: node-resources scrape_interval: 1m # 资源监控可以1分钟一次 static_configs: - targets: [node-exporter:9100] # 需要部署node-exporter4.3 监控数据存储优化配置数据保留策略和存储选项# prometheus.yml 存储配置 storage: tsdb: retention: 15d # 保留15天数据适合天气预报分析 # 启用数据压缩和缓存 query_log_file: /var/log/prometheus/query.log # 资源限制 web: max_connections: 512 # 查询配置 query: lookback-delta: 5m timeout: 2m5. Grafana看板设计与实现5.1 Grafana安装与配置安装并配置Grafana# Ubuntu/Debian安装 sudo apt-get install -y adduser libfontconfig1 wget https://dl.grafana.com/oss/release/grafana_9.0.1_amd64.deb sudo dpkg -i grafana_9.0.1_amd64.deb # 启动Grafana sudo systemctl start grafana-server sudo systemctl enable grafana-server5.2 伏羲监控看板设计创建专门的伏羲天气预报监控看板包含以下关键面板性能监控面板请求延迟分布展示短期、中期、长期预报的延迟情况请求成功率实时显示各类型预报的成功率活跃请求数当前正在处理的预报任务数量系统资源使用CPU、内存、磁盘使用情况业务监控面板每日预报统计按天统计的预报任务数量和成功率预报类型分布各类预报的比例分布性能趋势延迟和成功率的长期趋势分析5.3 关键监控图表配置配置核心监控图表-- 请求成功率查询 100 - ( sum(rate(fuxi_requests_total{statuserror}[5m])) / sum(rate(fuxi_requests_total[5m])) ) * 100 -- 平均延迟查询 rate(fuxi_request_duration_seconds_sum[5m]) / rate(fuxi_request_duration_seconds_count[5m]) -- 95分位延迟查询 histogram_quantile(0.95, sum(rate(fuxi_request_duration_seconds_bucket[5m])) by (le, forecast_type) ) -- 当前活跃请求数 fuxi_active_requests -- 系统资源使用率 100 - (avg by (instance)(rate(node_cpu_seconds_total{modeidle}[5m])) * 100)5.4 告警规则配置设置关键告警规则# alert.rules.yml groups: - name: fuxi-alerts rules: - alert: HighRequestLatency expr: | histogram_quantile(0.95, rate(fuxi_request_duration_seconds_bucket[5m])) 300 for: 5m labels: severity: warning annotations: summary: 高请求延迟警告 description: 95分位请求延迟超过300秒 - alert: LowSuccessRate expr: | (100 - (sum(rate(fuxi_requests_total{statuserror}[5m])) / sum(rate(fuxi_requests_total[5m])) * 100)) 95 for: 10m labels: severity: critical annotations: summary: 低成功率告警 description: 请求成功率低于95%持续10分钟 - alert: HighSystemLoad expr: | node_load1 5 for: 5m labels: severity: warning annotations: summary: 高系统负载警告 description: 系统1分钟负载超过56. 监控系统部署与实践6.1 容器化部署方案使用Docker Compose部署完整的监控栈# docker-compose.yml version: 3.8 services: prometheus: image: prom/prometheus:latest ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/console_templates - --storage.tsdb.retention.time15d grafana: image: grafana/grafana:latest ports: - 3000:3000 volumes: - grafana_data:/var/lib/grafana - ./dashboards:/var/lib/grafana/dashboards environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 node-exporter: image: prom/node-exporter:latest ports: - 9100:9100 volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro volumes: prometheus_data: grafana_data:6.2 监控数据备份策略确保监控数据的安全性# 创建监控数据备份脚本 cat EOF backup_monitoring.sh #!/bin/bash # 备份Prometheus数据 TIMESTAMP$(date %Y%m%d_%H%M%S) BACKUP_DIR/backup/prometheus_$TIMESTAMP mkdir -p $BACKUP_DIR cp -r /prometheus/data/* $BACKUP_DIR/ # 备份Grafana配置 GRAFANA_BACKUP/backup/grafana_$TIMESTAMP.tar.gz tar -czf $GRAFANA_BACKUP /var/lib/grafana/grafana.db /var/lib/grafana/dashboards/ # 保留最近7天的备份 find /backup -name prometheus_* -type d -mtime 7 -exec rm -rf {} \; find /backup -name grafana_*.tar.gz -type f -mtime 7 -exec rm -f {} \; EOF # 添加定时任务 echo 0 2 * * * /bin/bash /path/to/backup_monitoring.sh | crontab -6.3 性能优化建议优化监控系统性能Prometheus优化调整采集间隔平衡实时性和资源消耗使用记录规则预计算常用查询配置适当的数据保留策略Grafana优化使用模板变量减少重复面板设置合适的面板刷新间隔启用查询缓存提升性能资源限制为监控组件分配适当的内存和CPU资源监控监控系统自身的资源使用情况7. 总结通过PrometheusGrafana构建的伏羲天气预报业务监控系统实现了对预报推理延迟、成功率等关键指标的实时监控和可视化展示。这套监控方案具有以下优势核心价值实时掌握系统运行状态快速发现性能问题直观展示业务指标支持数据驱动的决策及时告警通知减少系统故障时间历史数据分析支持系统优化和容量规划实践建议根据实际业务需求调整监控指标和告警阈值定期审查和优化监控配置确保其有效性建立监控数据的定期分析和报告机制培训团队成员使用监控系统发挥其最大价值后续扩展集成更丰富的监控数据源如日志、链路追踪等开发自动化故障诊断和修复机制构建预测性监控提前发现潜在问题实现多地域、多集群的统一监控管理通过完善的监控体系可以确保伏羲天气预报系统稳定高效运行为全球天气预报业务提供可靠的技术保障。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。