💎 WatchAlert 是什么?

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

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

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

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

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

项目地址: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国内加速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerproxy.net",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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后操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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容器

1
2
3
4
5
6
7
8
9
10
11
12
13
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

# 查看状态如上

升级到最新版

1
2
3
4
5
6
7
8
9
10


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

🌐 网络配置

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

运维技术交流群

发送邮件到 ➡️ [email protected]

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

微信扫码

博客(最先更新)

https://songxwn.com/