AI印象派艺术工坊监控告警:Prometheus+Grafana集成教程

1. 项目背景与监控需求

AI印象派艺术工坊是一个基于OpenCV计算摄影学算法的艺术风格迁移服务,能够将普通照片一键转换为素描、彩铅、油画、水彩四种艺术效果。随着用户量的增长,我们需要确保服务的稳定性和性能表现。

为什么需要监控系统?

  • 油画算法计算复杂度较高,处理时间可能成为瓶颈
  • 需要实时了解服务健康状态和资源使用情况
  • 及时发现和处理异常情况,避免服务中断
  • 优化资源分配,提升用户体验

本教程将手把手教你如何为AI印象派艺术工坊搭建完整的监控告警系统,使用Prometheus进行数据采集,Grafana进行可视化展示。

2. 环境准备与组件安装

2.1 系统要求

  • Ubuntu 18.04+ 或 CentOS 7+
  • Docker 和 Docker Compose
  • 至少2GB内存
  • 10GB可用磁盘空间

2.2 安装Docker和Docker Compose

# 更新系统包
sudo apt-get update

# 安装Docker
sudo apt-get install docker.io

# 安装Docker Compose
sudo apt-get install docker-compose

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

2.3 创建监控目录结构

mkdir -p monitoring/{prometheus,grafana,alertmanager}
cd monitoring

3. Prometheus配置与部署

3.1 创建Prometheus配置文件

创建 prometheus/prometheus.yml 文件:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'ai-art-studio'
    static_configs:
      - targets: ['host.docker.internal:5000']
    metrics_path: '/metrics'
    
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

rule_files:
  - '/etc/prometheus/alert.rules.yml'

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

3.2 创建告警规则

创建 prometheus/alert.rules.yml 文件:

groups:
- name: ai-art-studio-alerts
  rules:
  - alert: HighCPUUsage
    expr: process_cpu_seconds_total > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高CPU使用率"
      description: "CPU使用率超过80%,当前值为 {{ $value }}"
      
  - alert: HighMemoryUsage
    expr: process_resident_memory_bytes / (1024*1024) > 500
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高内存使用率"
      description: "内存使用超过500MB,当前值为 {{ $value }}MB"
      
  - alert: ServiceDown
    expr: up{job="ai-art-studio"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "服务宕机"
      description: "AI艺术工坊服务不可用"

3.3 创建Docker Compose文件

创建 docker-compose.yml 文件:

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/alert.rules.yml:/etc/prometheus/alert.rules.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.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
    restart: unless-stopped
    depends_on:
      - prometheus

  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:

4. 配置AI艺术工坊暴露指标

为了让Prometheus能够采集监控数据,我们需要修改AI艺术工坊的代码,暴露监控指标。

4.1 安装Prometheus客户端库

pip install prometheus-client

4.2 添加监控指标暴露代码

在AI艺术工坊的主应用文件中添加以下代码:

from prometheus_client import make_wsgi_app, Counter, Gauge, Histogram
from werkzeug.middleware.dispatcher import DispatcherMiddleware

# 定义监控指标
REQUEST_COUNT = Counter('request_count', '应用请求总数', ['method', 'endpoint', 'status'])
REQUEST_DURATION = Histogram('request_duration_seconds', '请求处理时间')
ACTIVE_USERS = Gauge('active_users', '当前活跃用户数')
IMAGE_PROCESSING_TIME = Histogram('image_processing_seconds', '图片处理时间', ['style'])
PROCESSED_IMAGES = Counter('processed_images', '已处理图片数量', ['style'])

# 添加监控中间件
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
    '/metrics': make_wsgi_app()
})

# 在请求处理函数中添加监控
@app.before_request
def before_request():
    request.start_time = time.time()

@app.after_request
def after_request(response):
    # 记录请求指标
    REQUEST_COUNT.labels(
        method=request.method,
        endpoint=request.endpoint,
        status=response.status_code
    ).inc()
    
    # 记录请求处理时间
    REQUEST_DURATION.observe(time.time() - request.start_time)
    
    return response

# 在图片处理函数中添加监控
def process_image_with_metrics(image, style):
    start_time = time.time()
    
    # 原有的图片处理逻辑
    result = process_image(image, style)
    
    # 记录处理时间和数量
    processing_time = time.time() - start_time
    IMAGE_PROCESSING_TIME.labels(style=style).observe(processing_time)
    PROCESSED_IMAGES.labels(style=style).inc()
    
    return result

5. Grafana仪表板配置

5.1 登录Grafana

打开浏览器访问 http://localhost:3000,使用用户名 admin 和密码 admin123 登录。

5.2 添加Prometheus数据源

  1. 点击左侧菜单的"Configuration" → "Data Sources"
  2. 点击"Add data source"
  3. 选择"Prometheus"
  4. 在URL字段输入 http://prometheus:9090
  5. 点击"Save & Test"

5.3 导入预置仪表板

创建 grafana/provisioning/dashboards/dashboard.yml 文件:

apiVersion: 1

providers:
- name: 'default'
  orgId: 1
  folder: ''
  type: file
  disableDeletion: false
  updateIntervalSeconds: 10
  options:
    path: /var/lib/grafana/dashboards

创建 grafana/provisioning/dashboards/ai-art-studio-dashboard.json 仪表板文件(内容较长,这里提供关键部分):

{
  "title": "AI艺术工坊监控仪表板",
  "panels": [
    {
      "title": "请求率",
      "type": "graph",
      "targets": [{
        "expr": "rate(request_count_total[5m])",
        "legendFormat": "{{method}} {{endpoint}}"
      }]
    },
    {
      "title": "图片处理时间",
      "type": "graph",
      "targets": [{
        "expr": "image_processing_seconds_sum / image_processing_seconds_count",
        "legendFormat": "平均处理时间"
      }]
    },
    {
      "title": "各风格处理数量",
      "type": "piechart",
      "targets": [{
        "expr": "processed_images_total",
        "legendFormat": "{{style}}"
      }]
    }
  ]
}

6. 告警配置与通知

6.1 配置Alertmanager

创建 alertmanager/alertmanager.yml 文件:

global:
  smtp_smarthost: 'smtp.gmail.com:587'
  smtp_from: 'your-email@gmail.com'
  smtp_auth_username: 'your-email@gmail.com'
  smtp_auth_password: 'your-app-password'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 5m
  repeat_interval: 3h
  receiver: 'email-notifications'

receivers:
- name: 'email-notifications'
  email_configs:
  - to: 'admin@example.com'
    send_resolved: true

6.2 启动监控系统

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

7. 监控系统使用与维护

7.1 访问监控界面

  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3000 (admin/admin123)
  • Alertmanager: http://localhost:9093

7.2 关键监控指标解读

需要重点关注的指标:

  • 请求率:反映服务负载情况
  • 图片处理时间:不同风格的处理性能表现
  • 内存使用:确保服务有足够资源
  • 错误率:及时发现处理失败的情况

性能基准参考:

  • 素描处理:< 1秒
  • 彩铅处理:1-2秒
  • 水彩处理:2-3秒
  • 油画处理:3-5秒

7.3 日常维护任务

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs prometheus
docker-compose logs grafana

# 重启服务
docker-compose restart prometheus

# 更新配置后重载
curl -X POST http://localhost:9090/-/reload

8. 总结

通过本教程,我们成功为AI印象派艺术工坊搭建了完整的监控告警系统。这个系统能够帮助我们:

  1. 实时监控服务健康状态和性能指标
  2. 及时发现异常情况并收到告警通知
  3. 分析优化不同艺术风格的处理性能
  4. 保障用户体验,确保服务稳定可靠

监控系统是生产环境不可或缺的一部分,它就像服务的"眼睛"和"耳朵",帮助我们随时了解服务状态,快速响应问题。建议定期查看监控数据,根据实际情况调整告警阈值和监控策略。

现在你的AI艺术工坊已经有了专业的监控保护,可以更安心地为用户提供稳定的艺术创作服务了!


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐