WatchAlert 輕量級AI日志告警 - Docker安裝部署
?? 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-service、w8t-web、w8t-redis 和 w8t-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 次。
- 每 5 秒檢查一次
- 依賴服務:啟動前依賴
w8t-mysql和w8t-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
運維技術交流群
發送郵件到 ?? me@songxwn.com
或者關注WX公眾號:網工格物

浙公網安備 33010602011771號