V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Songxwn
V2EX  ›  分享创造

分享一个很好用的日志告警系统 WatchAlert

  •  
  •   Songxwn · 2 天前 · 891 次点击

    💎 WatchAlert 是什么?

    🎯 专注可观测性与稳定性,为运维提效降本

    WatchAlert 是一款专为云原生环境设计 的轻量级监控告警引擎,聚焦于可观测性( Metrics 、Logs 、Traces )与系统稳定性保障,提供从采集、分析到告警的全链路解决方案 。

    🔍 AI 智能加持,让告警更有“洞察力”

    通过 AI 技术深度分析 Metrics 、Logs 和 Traces 中的异常信号,精准定位根因,智能生成排查建议与修复方案,显著提升故障响应效率。

    注:本教程主要为在 Docker 环境下安装部署 WatchAlert ,用于接入 ElasticSearch 和 VictoriaLogs 作为日志告警。

    日志系列文章: https://songxwn.com/tags/syslog/

    项目地址:https://github.com/opsre/WatchAlert

    官方文档:https://cairry.github.io/docs/

    🧩 全面兼容主流可观测技术栈

    监控类型 支持的数据源
    Metrics Prometheus 、VictoriaMetrics
    Logs Loki 、ElasticSearch 、VictoriaLogs 、ClickHouse 、SLS (阿里云日志服务)、TLS (火山云日志服务,开发中)、CLS (腾讯云日志服务,开发中)
    Traces Jaeger
    Events Kubernetes 事件监控
    基础协议监测 HTTP 、ICMP 、TCP 、SSL
    告警机器人 飞书、钉钉、企业微信、邮件、自定义 Webhook 、Slack

    🔍 核心亮点

    🧠 AI 智能分析

    • 基于 AI 技术对告警内容进行深度语义解析,自动识别异常模式

    • 提供根因推测、排查建议与修复思路,让每一次告警都“言之有物”

    🕰️ 完善的值班机制

    • 支持轮班排班、节假日调整、值班交接等场景

    • 告警通知精准匹配责任人,确保第一时间响应

    告警升级机制

    • 多级告警策略配置:从首次触发到升级通知,层层保障不漏报支持超时重试、通知升级、负责人转接等功能,保障告警闭环处理

    📊 Namespace 级告警分类

    • 支持以命名空间( Namespace )为单位进行告警分组管理

    • 清晰分类,快速定位,大幅提升故障处理效率

    安装部署

    环境准备

    • 要安装最新版 Docker-CE ,支持 compose V2

    • 网络支持访问 Dockerhub ,国内可能需要配置加速源。

    • 已安装 Git ,用于下载部署文件。

    • 需要占用本机 TCP 端口:80 、3306 、6379 、9001 ,确保空闲。

    Docker 国内安装

    PS:安装最新版,使用 compose V2 部署。

    https://mirror.nju.edu.cn/mirrorz-help/docker-ce/?mirror=NJU

    Docker Hub 国内加速

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": [
        "https://docker-0.unsee.tech",
        "https://docker-cf.registry.cyou",
        "https://docker.1panel.live"
      ]
    }
    EOF
    
    systemctl daemon-reload && sudo systemctl restart docker
    
    systemctl enable docker
    
    
    

    Git 下载部署文件编排启动容器

    PS:如果没 git ,可用 dnf install git apt install git 安装。

    cd /opt
    
    
    git clone https://github.com/opsre/WatchAlert.git
    
    # 国内如果无法通过 Github 下载,可替换为在 Gitee 下载> git clone https://gitee.com/semaik/WatchAlert.git
    
    cd /opt/WatchAlert/deploy/docker-compose
    
    # 进入 docker-compose.yaml 文件所在目录进行部署
    
    sed -i 's|docker.io/||g' docker-compose.yaml 
    
    # 删除 docker.io 字段,确保自动使用加速器。
    
    docker compose up -d
    
    # 拉取镜像并在后台启动
    
    docker compose ps
    
    # 查看启动状态,注意第一次启动需要启动 init-mysql 容器用于初始化数据库,初始化完成后会自动停止。
    
    
    

    访问 Web 初始化 admin 密码

    浏览器打开 http://你的主机 IP ,第一次访问如下。点击初始化 admin 密码。

    输入两次密码后点击提交,然后使用 admin 账号进行登录。

    登录后界面如下

    部署后删除 init-mysql 容器和升级操作

    将 docker-compose.yaml 文件重写如下

    vim /opt/WatchAlert/deploy/docker-compose/docker-compose.yaml

    PS:删除 init-mysql 容器是为了防止下次启动再次导入数据库,但注意要在成功初始化密码登录 Web 后操作。

    services:
      w8t-service:
        container_name: w8t-service
        image: docker.io/cairry/watchalert:latest
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - ../../config/config.yaml:/app/config/config.yaml
        restart: always
        privileged: true
        ports:
          - "9001:9001"
        healthcheck:
          test: ["CMD", "wget", "localhost:9001/hello"]
          interval: 5s
          timeout: 2s
          retries: 10
        depends_on:
          - w8t-mysql
          - w8t-redis
        networks:
          - w8t
    
      w8t-web:
        container_name: w8t-web
        image: docker.io/cairry/watchalert-web:latest
        environment:
          - TZ=Asia/Shanghai
        restart: always
        privileged: true
        ports:
          - "80:80"
        networks:
          - w8t
    
      w8t-redis:
        container_name: w8t-redis
        image: redis:latest
        ports:
          - "6379:6379"
        command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
        volumes:
          - ./redis:/data
          - ./redis.conf:/usr/local/etc/redis/redis.conf:ro
        environment:
          - TZ=Asia/Shanghai
        restart: always
        networks:
          - w8t
    
      w8t-mysql:
        container_name: w8t-mysql
        image: mysql:8.0
        ports:
          - "3306:3306"
        volumes:
          - ./mysql:/var/lib/mysql
        environment:
          - TZ=Asia/Shanghai
          - MYSQL_ROOT_PASSWORD=w8t.123
          - MYSQL_DATABASE=watchalert
        restart: always
        networks:
          - w8t
    networks:
      w8t:
        driver: bridge
    

    删除 init-mysql 容器

    docker compose up -d --remove-orphans 
    
    # 删除多余容器
    
    
    docker compose ps
    NAME          IMAGE                                    COMMAND                   SERVICE       CREATED          STATUS                      PORTS
    w8t-mysql     mysql:8.0                                "docker-entrypoint.s…"   w8t-mysql     29 minutes ago   Up 29 minutes               0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp
    w8t-redis     redis:latest                             "docker-entrypoint.s…"   w8t-redis     29 minutes ago   Up 29 minutes               0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp
    w8t-service   docker.io/cairry/watchalert:latest       "/app/w8t"                w8t-service   29 minutes ago   Up 29 minutes (unhealthy)   0.0.0.0:9001->9001/tcp, [::]:9001->9001/tcp
    w8t-web       docker.io/cairry/watchalert-web:latest   "/docker-entrypoint.…"   w8t-web       29 minutes ago   Up 29 minutes               0.0.0.0:80->80/tcp, [::]:80->80/tcp
    
    # 查看状态如上
    

    升级到最新版

    
    
    docker compose pull
    
    docker compose up -d
    
    
    ## 拉取最新版镜像,并更新运行中的容器镜像为最新版。
    
    
    

    日志数据源:ELK 部署和 Vlog 部署教程

    ELK 系列:https://songxwn.com/categories/linux/ELK/

    VictoriaLogs 系列:https://songxwn.com/tags/VictoriaLogs/

    Docker Compose 配置文件讲解

    用于定义和管理一个名为 WatchAlert 的多容器应用。它包含四个服务:w8t-servicew8t-webw8t-redisw8t-mysql,并使用一个名为 w8t 的自定义网络。下面是详细讲解:


    🧩 总体结构说明

    • 使用 docker-compose 来编排多个容器服务。
    • 所有服务都连接到同一个网络 w8t,便于容器之间通信。
    • 设置了时区为 Asia/Shanghai,适用于中国大陆或港澳地区。

    🚀 服务详解

    1. w8t-service:主后端服务

    • 镜像cairry/watchalert:latest
    • 端口映射:将容器的 9001 端口映射到主机的 9001 端口。
    • 配置挂载:将主机上的 ../../config/config.yaml 挂载到容器内 /app/config/config.yaml
    • 健康检查
      • 每 5 秒检查一次 /hello 接口是否可访问。
      • 超时时间为 2 秒,最多重试 10 次。
    • 依赖服务:启动前依赖 w8t-mysqlw8t-redis
    • 权限privileged: true 赋予容器更高权限(慎用)。

    2. w8t-web:前端 Web 服务

    • 镜像cairry/watchalert-web:latest
    • 端口映射:容器的 80 端口映射到主机的 80 端口。
    • 权限:同样设置为 privileged: true
    • 用途:提供用户界面,供浏览器访问。

    3. w8t-redis:缓存数据库服务

    • 镜像redis:latest
    • 端口映射6379 是 Redis 默认端口。
    • 配置挂载
      • 数据目录挂载到 ./redis
      • Redis 配置文件挂载为只读到 /usr/local/etc/redis/redis.conf
    • 启动命令:使用指定配置文件启动 Redis 。

    4. w8t-mysql:关系型数据库服务

    • 镜像mysql:8.0
    • 端口映射3306 是 MySQL 默认端口。
    • 数据挂载:将数据目录挂载到主机的 ./mysql
    • 环境变量
      • 设置时区。
      • 设置 root 密码为 w8t.123
      • 初始化数据库名为 watchalert

    🌐 网络配置

    networks:
      w8t:
        driver: bridge
    
    • 所有服务都连接到 w8t 网络。
    • 使用 bridge 驱动,适合单机部署。

    基础配置流程

    创建数据源(可接入 ES 或 Vlogs 等数据源) > 创建通知对象(添加企业微信、钉钉、飞书等机器人) > 创建规则组 > 在规则组选择数据库匹配告警

    可参考: https://cairry.github.io/docs/Guide/test.html

    运维技术交流群

    发送邮件到 ➡️ [email protected]

    或者关注 WX 公众号:网工格物

    微信扫码

    博客(最先更新)

    https://songxwn.com/

    2 条回复    2025-10-18 16:24:07 +08:00
    root71370
        1
    root71370  
       1 天前 via Android
    看着不错
    bobox
        2
    bobox  
       1 天前
    有点太重了 我需要轻一点的
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2763 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 13:04 · PVG 21:04 · LAX 06:04 · JFK 09:04
    ♥ Do have faith in what you're doing.