Self-hosted service
opsre/WatchAlert avatar
opsre/WatchAlert

WatchAlert: a multi-source alerting engine with on-call built in

🚀A lightweight cloud-native multi-data source monitoring and alerting engine |一款轻量级云原生多数据源监控告警引擎

955 stars181 forksGoAGPL-3.0

At a glance

What is it?
WatchAlert is a Go and React monitoring and alerting engine for cloud native teams, collecting metrics, logs, traces, Kubernetes events and network probes, applying AI analysis to the alert content and adding duty rosters and multi-level escalation. It fits teams that want one console for many data sources, and it is heavier than a plain Prometheus and Alertmanager setup.
Who is it for?
Adopt WatchAlert when your team runs more than one telemetry source, has a real on-call rota, and wants alert content enriched with root cause hints before a human reads it, since that combination is what the product is built for. Skip it when your estate is Prometheus only and your alerting is a routing problem, because Prometheus plus Alertmanager covers that with far less moving parts.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 13 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

One console for metrics, logs, traces and events

WatchAlert is described as a lightweight monitoring and alerting engine for cloud native environments, focused on observability across metrics, logs and traces and on system stability, providing a full path from collection and analysis to notification.

The data source table is where the scope becomes concrete. Metrics come from Prometheus. Logs come from Loki, ElasticSearch, VictoriaLogs, ClickHouse, SLS from Alibaba Cloud log service, TLS from Volcano Engine log service which the table marks as in development, and CLS from Tencent Cloud log service, also marked in development. Traces come from Jaeger. Kubernetes events are monitored through the Kubernetes client libraries. Network probing covers HTTP, ICMP, TCP and SSL. Notification channels include Feishu, DingTalk, WeCom, email, custom webhook and Slack.

Two observations follow from that table. First, the notification side is oriented towards Chinese enterprise messaging tools, which tells you something about who the project is built for and where it will be most frictionless. Second, the log integrations lean on the vendor SDKs, which is visible in the dependency list: the Alibaba Cloud SLS SDK, the AWS SDK v2 with CloudWatch and RDS clients, ClickHouse's Go driver and the Elasticsearch v7 client.

The product screen set in the README suggests the intended operating model: login, home, rules, a fault centre, a topology view, duty management, probes, data sources, tenants and notification configuration. That is a full operations console rather than a rules engine with a webhook.

AI analysis turns an alert into a hypothesis

The feature the project leads with is AI analysis of the alert content. The README describes deep semantic parsing of the alert text to identify anomaly patterns automatically, and providing root cause inference, troubleshooting suggestions and repair ideas so that each alert has substance behind it.

This is the differentiator against the usual Prometheus pipeline, where a firing alert is a threshold breach with a label set and the analysis happens in the operator's head. Here the intent is that the notification carries a first pass at what went wrong.

The realistic way to read that feature is as an assistant, not an oracle. It analyses metrics, logs and traces for anomalous signals, which means its usefulness depends on the same collection you already have and on how much signal is available in the alert payload. It cannot diagnose a fault whose evidence never reached the platform.

That constraint is worth stating plainly for anyone evaluating it. If your rules fire on a metric with no log or trace context attached, the analysis has little to work with. The feature is only as good as the context your collection pipeline attaches to the alert.

Duty rosters and escalation are first class features

The second area the project invests in is the human process around alerts, and this is where it clearly goes beyond a rule evaluator.

The on-call section covers shift rotation, holiday adjustments and handover between shifts, with notifications matched to the responsible person so that someone specific is contacted rather than a channel. The escalation section covers multi-level alert strategies, from first trigger through to escalated notification, with timeout retries, notification escalation and transfer of ownership.

Grouping is at namespace level, so alerts are grouped and managed per namespace in a Kubernetes estate. That is a useful choice for the target environment, since a namespace is usually the unit that owns a service, and it keeps a noisy cluster from flattening into one stream.

There is also a tenant concept in the UI, alongside data sources and notification channels, which suggests multi-tenancy is built into the deployment model rather than bolted on.

The practical question for an adopter is whether your organisation already has a separate on-call system. If it does, WatchAlert's duty management duplicates it, and the interesting part of the product is only the AI analysis and the multi-source collection. If it does not, then WatchAlert is replacing both a monitoring stack and a rota tool in one product, which is a larger decision than adopting a linter.

Building and shipping as a single Go binary

The backend is Go, and the README gives the environment requirements as Go 1.23 or later, with the framework stack listed as Go, Gin, Viper, Gorm, JWT and Go-zero. The go.mod file is stricter than the README, declaring go 1.24.0 with a toolchain directive of go1.24.11. The frontend is React with Ant Design and Codemirror, needing Node.js 18.20.3 or later and Yarn 1.22.22 or later.

The Dockerfile is a two stage build that produces a compact runtime image.

The build stage starts from golang:1.24.11-alpine, sets the Go module proxy to a mirror with a direct fallback, and installs ca-certificates, upx and tzdata as build dependencies. The runtime stage copies only the compiled binary, named w8t, onto alpine:3.19 and sets the entrypoint to it. The CGO_ENABLED=0 flag is worth noticing, since it keeps the binary static and the final image small.

The version string is injected at link time with the ldflags -X flag on main.Version, which is how the build reports the release it came from.

The Makefile covers the local workflows, with a run target that starts the server in release mode, a plain build target, separate linux and linux arm targets, and a lint target that runs golangci-lint across the tree while skipping the Feishu client file. The linux target compiles for amd64 with CGO disabled and compresses the result with upx, and the arm target does the same for arm64 without the upx step. The deployment documentation lives at a separate docs site, with a page for quick deployment covering Docker.

The dependency list shows the scope of integrations

The go.mod file is worth reading as a specification of what the engine actually talks to.

On the metrics and query side there is the Prometheus client library and the Prometheus server itself, the Prometheus common package, and ClickHouse's Go driver with its ch-go companion. On the log side there is the Elasticsearch v7 client, the Alibaba Cloud SLS SDK with its gateway packages, and the AWS SDK v2 with dedicated CloudWatch and RDS clients. On the platform side there is the Kubernetes client-go and api packages, plus apimachinery.

Beyond the integrations, the list shows the service scaffolding: Gin for HTTP, Viper for configuration, Gorm with a MySQL driver and a pure Go SQLite driver for persistence, Redis through go-redis, LDAP, JWT through dgrijalva's jwt-go, robfig/cron for scheduling, logrus for logging, go-zero for the RPC framework, go-ping for ICMP probing, jordan-wright/email for email delivery, and the ByteDance sonic JSON library for fast encoding.

Two things stand out for a team assessing operational weight. The build carries the major cloud provider SDKs, which is what makes the multi-cloud log support work but also what makes the binary large and the dependency graph deep. And there are two persistence paths, MySQL and SQLite, which suggests it can run either against a shared database or as a single-node deployment.

The repository layout mirrors the service structure, with alert/, api/, cmd/, config/, data/, deploy/, internal/ and pkg/ directories at the top level.

The licence signal is contradictory

There is a discrepancy in this project that an adopter needs to resolve before shipping it anywhere.

The licence field attached to the repository says AGPL-3.0. The README, however, displays a badge that reads license Apache-2.0, and the top level of the repository contains a LICENSE file whose contents the README does not summarise. The project also carries a SECURITY.md, a CODE_OF_CONDUCT.md and a CONTRIBUTING.md, which is a sign of a project with a real process around it.

The difference between these two licences is not cosmetic. Apache-2.0 is permissive, with attribution as the main obligation. AGPL-3.0 is a strong copyleft licence that, among other things, extends the source distribution obligation to network use. Whether that matters to you depends entirely on whether you modify the software and offer it over a network, which is the case the AGPL was written for.

Since the two signals contradict each other, the right move is to read the LICENSE file in the repository and, if your situation is sensitive, to ask the maintainers which they intend. Do not take the badge as authoritative, and do not take the repository's automated classification as authoritative either.

Beyond licensing, the release history shows steady work: version 3.9.19 on 2026-09-10, 3.9.18 on 2026-09-09 and 3.9.17 on 2026-09-02, with the last push to master on 2026-10-10. The version is still in the 3.x line with a patch number that has reached the teens, which tells you the project is iterated on rather than released occasionally.

Where WatchAlert is the wrong tool

The clearest case against it is a Prometheus only estate with a simple on-call process. Prometheus plus Alertmanager already does rule evaluation, grouping, silencing and routing, with a configuration model that is text and a well understood API. WatchAlert in that setting is a larger system to run, with a database, a web UI and a dependency graph that includes cloud provider SDKs, replacing something you already have.

The second case is where you want to keep your existing alerting but enrich the notifications. That is a much narrower problem than the product WatchAlert ships, and a custom notification body or a receiver service would solve it without a new platform to operate.

The third case is a hard requirement on support for a data source that is still marked in development. The table lists TLS from Volcano Engine log service and CLS from Tencent Cloud log service as under development, so a team whose logs live in one of those should not assume production readiness.

The alternative approach for most teams is the composed one: Prometheus with Alertmanager for metrics and routing, a log stack for logs, and a separate on-call tool for the rota. The difference in approach is that WatchAlert collapses three tools into one console and adds AI analysis across the signals, which is a genuine advantage when the same incident spans metrics, logs and traces, and a genuine liability when you only need one of the three.

One more practical note. The README links to a publicly reachable demo instance of the product, and the deployment documentation lives at cairry.github.io with a Docker quick deployment page. A demo instance reachable from the internet is worth understanding before you rely on the same image in production, particularly since the AGPL question is unresolved.

Editorial conclusion

Adopt WatchAlert when your team runs more than one telemetry source, has a real on-call rota, and wants alert content enriched with root cause hints before a human reads it, since that combination is what the product is built for. Skip it when your estate is Prometheus only and your alerting is a routing problem, because Prometheus plus Alertmanager covers that with far less moving parts. Verify three things first: which licence actually applies, since the repository metadata reports AGPL-3.0 while the README badge advertises Apache-2.0, whether the cloud log services you need are finished or still in development, since several are marked that way in the support table, and how the team runs its own deployment, since the README links to a publicly reachable demo instance of the product. The last push to master was on 2026-10-10 and version 3.9.19 was published on 2026-09-10.

Frequently asked questions

Which data sources does WatchAlert collect from?

Metrics from Prometheus, logs from Loki, ElasticSearch, VictoriaLogs, ClickHouse, Alibaba Cloud SLS and, while still in development, Volcano Engine TLS and Tencent Cloud CLS. Traces come from Jaeger, Kubernetes events are monitored, and network probing covers HTTP, ICMP, TCP and SSL.

What on-call features does WatchAlert include?

Shift rotation, holiday adjustments and handover between shifts, with notifications matched to the responsible person, plus multi-level escalation strategies with timeout retries, notification escalation and transfer of ownership. Alerts can also be grouped per namespace.

Which notification channels does WatchAlert support?

Feishu, DingTalk, WeCom, email, custom webhook and Slack, with the channel configuration shown in the product interface.

How is WatchAlert deployed?

The project ships a Dockerfile that builds a static Go binary named w8t and copies it onto alpine:3.19, and the deployment documentation includes a Docker quick deployment page at the project's docs site. The backend needs Go 1.23 or later and the frontend needs Node.js 18.20.3 or later with Yarn 1.22.22 or later.

What licence does WatchAlert use?

The licence field attached to the repository says AGPL-3.0 while the README badge displays Apache-2.0, and a LICENSE file is present in the repository. The README does not summarise the terms, so the two signals need to be reconciled before you redistribute anything.

Official sources

  1. License: AGPL-3.0
  2. opsre/WatchAlert on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/opsre-watchalert.svg)](https://hysenlabs.com/projects/opsre-watchalert)

Was this useful?