Open-source project
ccfos/nightingale avatar
ccfos/nightingale

Nightingale: An Alerting Engine That Connects to Your Existing Data Sources

Nightingale is to monitoring and alerting what Grafana is to visualization.

13,288 stars1,776 forksGoApache-2.0

At a glance

What is it?
Nightingale is an open-source alerting engine that focuses on alarm generation and distribution, connecting to existing data sources like VictoriaMetrics and Elasticsearch. It offers a built-in MCP server for AI-driven alert management, but it is not an on-call platform.
Who is it for?
Adopt Nightingale if you already have metrics and logs in a time-series database and need a dedicated alerting engine with flexible notification routing and a built-in MCP endpoint for AI-assisted management. Do not adopt it if you expect full monitoring collection or on-call features like scheduling and escalation; the README explicitly recommends PagerDuty or FlashDuty for those.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day 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 September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What Nightingale Actually Does

Nightingale is an alerting engine that connects to existing data sources like VictoriaMetrics and Elasticsearch. It does not collect data itself; the README recommends using Categraf as the collector, which pushes data via the Prometheus Remote Write protocol. You define alerting rules and notification rules within Nightingale, and it handles alarm generation and distribution. The target user is someone who already has metrics and logs stored somewhere and needs a dedicated alerting layer. If you have no data sources yet, you need to set up a collector and a time-series database first. The project originated at DiDi and was donated to the CCF in 2022, which gives it a corporate history, but the current focus is squarely on alerting, not on data acquisition.

Data Flow and Architecture

The data flow is simple: a collector like Categraf gathers metrics from systems and databases, then pushes them to Nightingale via the Prometheus Remote Write protocol. Nightingale stores the data in a time-series database such as Prometheus or VictoriaMetrics. Alerting rules are evaluated against that data, and when conditions are met, notifications go out through one of 20 built-in medias, including phone, SMS, email, DingTalk, and Slack. For edge data centers with poor connectivity to the central server, the README describes a distributed mode where a separate n9e-edge process runs locally and handles alerting for its own data sources. That way, alerts continue to fire even if the network to the central data center is down. This is a useful design for remote sites, but it means you have to operate an additional component and keep its configuration in sync.

Getting It Running

The README does not give a full installation guide, but it points to Docker images on hub.docker.com under the flashcatcloud namespace. The configuration file is etc/config.toml. The MCP endpoint is enabled by default; you can disable it with DisableMCP = true under [HTTP.A2A]. You can restrict the exposed toolsets with MCPToolsets, for example MCPToolsets = ["alerts", "dashboards"]. Write tools are off by default; you turn them on with MCPEnableWriteTools = true. Authentication for MCP reuses [HTTP.TokenAuth], so keep that enabled. To connect a client like Claude or Cursor, you add an entry to your MCP client configuration with the URL http://<nightingale>:17000/mcp and an X-User-Token header containing a personal access token created in the web UI under Profile → Token Management. The endpoint is at the root path, not under /api/n9e. If you prefer OAuth, the README describes two modes: Nightingale as an authorization server with RFC 7591 dynamic client registration and PKCE, or as a resource server for an enterprise IdP like Keycloak or Entra ID. The exact steps are in doc/api/mcp-oauth-as.md and doc/api/a2a-oauth-rs.md.

The Built-in MCP Server

A distinctive feature is the built-in MCP server. The n9e process itself serves the Model Context Protocol at /mcp over Streamable HTTP. No extra process is needed. The endpoint exposes 74 tools across 13 toolsets, covering alerts, targets, datasources, mutes, business groups, notification rules, alert subscriptions, event pipelines, users, metrics, logs, dashboards, and roles. The tools are split into 42 read and 32 write operations. The endpoint is read-only by default, which is a sensible security posture. Write tools are an explicit opt-in via MCPEnableWriteTools = true. Every tool call is dispatched onto Nightingale's own HTTP API inside the process, carrying the user's token, so RBAC and business-group permissions apply exactly as they do for that user in the UI. That means a client cannot reach anything the token owner cannot. This is a strong design because it avoids a separate MCP server that might have its own authorization model. The README also mentions a standalone n9e-mcp-server if you want to run MCP as a separate process against a remote Nightingale, but the built-in one is the simpler path. The same process also exposes an A2A endpoint at /a2a for agent-to-agent integration.

Limitations and When It Is the Wrong Tool

The README is explicit about what Nightingale is not. It does not provide monitoring data collection capabilities. You need Categraf or another collector. More importantly, if you need to consolidate events from multiple monitoring systems for unified noise reduction, response handling, and data analysis, or if you need personnel scheduling, on-call culture, alert escalation, and collaborative handling, then Nightingale is not suitable. The README directly recommends PagerDuty and FlashDuty for those use cases. That is a clear boundary. Nightingale is an alerting engine, not an incident management platform. It generates alarms and distributes them, but it does not handle the human workflow of who is on call, escalation paths, or post-incident analysis. Another limitation is that the MCP endpoint is enabled by default. While it is read-only by default, exposing it on a network without proper authentication could be a risk. The README says to keep [HTTP.TokenAuth] enabled, but if you forget, you might expose alert data and configuration to anyone who can reach the port. Also, the edge deployment mode for disconnected data centers adds operational complexity, and the README does not detail how to manage configuration drift between central and edge engines.

Alternatives and How They Differ

The README itself names PagerDuty and FlashDuty as alternatives for on-call and escalation needs. The difference is fundamental: PagerDuty and FlashDuty are incident management platforms that include scheduling, escalation policies, and collaboration workflows. Nightingale is purely an alerting engine. It does not track who is on call or escalate if no one acknowledges an alert. If you need those features, you would use Nightingale to generate alerts and then forward them to an on-call platform, or you would skip Nightingale entirely and use a platform that combines alerting with incident response. Another alternative is Grafana, which the README mentions as a visualization tool. Grafana also has alerting capabilities, but its primary focus is dashboards. Nightingale's focus is the alerting engine and alarm distribution. If your team already lives in Grafana for dashboards, you might find its alerting sufficient, but Nightingale offers a more specialized alerting rule engine and a broader set of notification medias. The choice depends on whether you want a single tool for both visualization and alerting, or a dedicated alerting layer that can sit alongside your existing visualization tool.

Maintenance and License

The project is under the Apache-2.0 license, which is permissive for commercial use. The repository is not archived, and the last push was on 2026-08-18, with releases v9.1.1, v9.1.0, and v9.0.0 in the preceding weeks. That suggests active maintenance. The README points to a Slack channel for communication and an issue tracker on GitHub for bug reports. For upgrades, the release cadence implies you will need to track new versions and read the release notes for breaking changes, especially since the project is at v9.x, which may indicate a mature API but also potential for significant changes between minor versions. The configuration file etc/config.toml is central, and new features like MCP and A2A are added as optional sections, so upgrading likely involves reviewing those sections. The documentation is hosted at flashcat.cloud/docs, and the README mentions doc/api/ files for MCP and OAuth specifics, which you should consult before upgrading if you use those features. The project also recommends Categraf as the collector, but that is a separate project, so you need to maintain that as well. Overall, the maintenance cost is moderate: you must keep up with releases, manage a configuration file, and potentially operate an edge component if you use the distributed mode.

Editorial conclusion

Adopt Nightingale if you already have metrics and logs in a time-series database and need a dedicated alerting engine with flexible notification routing and a built-in MCP endpoint for AI-assisted management. Do not adopt it if you expect full monitoring collection or on-call features like scheduling and escalation; the README explicitly recommends PagerDuty or FlashDuty for those. Before deploying, verify that your data sources support the Prometheus Remote Write protocol for ingestion and that your notification channels are among the 20 built-in medias. Also confirm whether you need the edge deployment mode for disconnected data centers, as that adds operational complexity. The project is actively maintained with recent releases, and its Apache-2.0 license permits commercial use, but you must evaluate the security of exposing the MCP endpoint, especially if you enable write tools.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community notes

Community notes