分享一个很好用的日志告警系统 WatchAlert - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bigmomo
V2EX    分享创造

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

  •  
  •   bigmomo 70 天前 1802 次点击
    这是一个创建于 70 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 的自定义网络。下面是详细讲解:


    总体结构说明

    • 使用 doker-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  
       69 天前 via Android
    看着不错
    bobox
        2
    bobox  
       69 天前
    有点太重了 我需要轻一点的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:07 PVG 19:07 LAX 03:07 JFK 06:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86