/opt/alert_dashboard/
├── docker-compose.yml       # 容器编排主文件
├── nginx/
│   └── default.conf         # Nginx站点配置
├── www/
│   ├── api/
│   │   └── index.php        # 你提供的PHP接口文件
│   └── dashboard.html       # H5看板页面
├── python_crawler/
│   └── mail_crawler.py      # 邮件抓取脚本
└── mysql_data/              # MySQL持久化数据目录（自动生成）

#Nginx 配置 /opt/alert_dashboard/nginx/default.conf
mkdir -p /opt/alert_dashboard/{nginx,www/api,python_crawler,mysql_data}
cd /opt/alert_dashboard

server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html index.htm;

    # 前端静态页面
    location / {
        try_files $uri $uri/;
    }

    # PHP告警接口
    location /api {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/api/index.php;
        include fastcgi_params;
    }
}

#数据库设计
CREATE DATABASE alert_mail_stat DEFAULT CHARACTER SET utf8mb4;
USE alert_mail_stat;

-- 告警事件主表（每条邮件=一条记录）
CREATE TABLE alert_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增ID',
    mail_uid VARCHAR(100) NOT NULL COMMENT '邮件唯一ID，去重防止重复采集',
    alert_type TINYINT NOT NULL COMMENT '1触发firing 2恢复resolved',
    alert_name VARCHAR(200) NOT NULL COMMENT '告警名称(Port_Down/NetworkInHigh)',
    instance VARCHAR(200) NOT NULL COMMENT '实例地址IP:端口',
    severity VARCHAR(50) NOT NULL COMMENT '级别critical/warning',
    starts_at DATETIME NULL COMMENT '告警开始UTC转北京时间',
    ends_at DATETIME NULL COMMENT '告警恢复时间',
    content TEXT COMMENT '邮件完整正文',
    receive_time DATETIME NOT NULL COMMENT '邮件接收入库时间',
    UNIQUE KEY uk_mail_uid(mail_uid),
    INDEX idx_day(receive_time),
    INDEX idx_alert_name(alert_name),
    INDEX idx_instance(instance)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#后端接口
今日汇总：http://xxx/alert_api/index.php?act=day_total
TOP10 告警：http://xxx/alert_api/index.php?act=top_alert
告警明细：http://xxx/alert_api/index.php?act=log_list

pip3 install pymysql 依赖


