karma is a free, open source monitoring & observability project written in TypeScript and released under Apache-2.0. It has 2,682 GitHub stars, 203 forks and 39 open issues, and was last pushed 22 hours ago. On this registry it ranks #142 of 271 tracked projects in Monitoring & Observability, with 5 head-to-head comparisons available.

What is karma?

karma is an open-source alert dashboard for Prometheus Alertmanager, written in TypeScript and released under the Apache-2.0 licence, built for teams that run Prometheus-based alerting and find the Alertmanager UI too limited for day-to-day alert triage.

What it is

karma is a dashboard layer that sits in front of Prometheus Alertmanager. It is written in TypeScript, licensed under Apache-2.0, and categorised here under Infrastructure and Operations / Monitoring and Observability. Since the 0.7.0 release it can aggregate alerts from multiple Alertmanager instances, whether those instances run in high-availability mode or as separate deployments, and it tags each alert with the Alertmanager instances and clusters it was found in. When more than one Alertmanager is configured, those @alertmanager tags become visible and filterable, and when HA clusters are used an @cluster tag becomes available as well, with a custom name settable per cluster.

The project addresses a specific limitation of the tool it decorates. The Alertmanager UI is useful for browsing alerts and managing silences, but it is not designed as a dashboard, and karma exists to fill that gap. It requires Alertmanager version >=0.22.0.

Key capabilities

  • Aggregation and deduplication of alerts from multiple Alertmanager instances, with unique alerts displayed after filtering duplicates and each one tagged with the instances that reported it for @alertmanager filtering.
  • Alert groups that preserve the group_by configuration option from Alertmanager, with a unique group per receiver because different receivers can carry different group_by settings.
  • Collapsible groups and individual alerts controlled with the - / + buttons, where unique labels and annotations are shown per alert and shared ones move to the footer.
  • Alert history that queries remote Prometheus servers through each alert's source field when history:enabled is true, rendering the hourly trigger count for the last 24 hours as 24 shaded blocks.
  • Inhibited alert handling that marks suppressed alerts with a muted button and opens a modal listing the alerts that inhibit them.
  • Silence deduplication that moves a silence shared by every alert in a group to the footer, plus a silence modal for creating and managing silences.
  • Label-based multi-grid mode that groups alert groups by a chosen label, giving each label value its own grid and adding an extra grid for alerts without that label.

Who uses it and how

  • Operators running Alertmanager in HA clusters use the @cluster tag, named per cluster in docs/CONFIGURATION.md, to keep alerts from separate clusters distinguishable.
  • Teams with separate Alertmanagers for different environments or severity levels use multi-grid mode to split alerts onto dedicated grids by label value.
  • On-call engineers who need to re-silence recently expired alerts rely on the silences:expired setting, where a value such as 10m shows silences that expired in the last 10 minutes for alerts that have been firing longer than that.
  • Sites that want alert history must let karma reach every Prometheus server sending alerts and set each server's --web.external-url flag to a publicly reachable URL.

Getting started

A hosted demo is available at https://demo.karma-dashboard.io/ so the dashboard can be evaluated before anything is deployed, and any deployment requires an Alertmanager instance at version >=0.22.0. Release changelogs are published on the GitHub Releases page.

How it compares

The facts provided here name no paid or commercial products that karma replaces, so the comparison stays inside the Prometheus ecosystem. karma is not a replacement for Alertmanager itself; it is a dashboard that sits on top of Alertmanager, and its value over the built-in Alertmanager UI comes specifically from multi-instance aggregation, deduplication, alert history and multi-grid grouping.

When to use it — and when not to

A self-hoster must already operate Prometheus and Alertmanager at >=0.22.0, and anyone who wants alert history must also keep every Prometheus server reachable from karma and configured with a public --web.external-url. Teams that do not use Prometheus alerting, or that run a single Alertmanager with few alerts, gain little over the built-in UI. The README excerpt documents features in depth but says nothing about packaging or deployment, so exact run methods, image names and compose files should be confirmed against the repository before committing to an installation.

project readme (upstream, from github) — read inline

karma

Alert dashboard for Prometheus Alertmanager.


Alertmanager >=0.22.0 is required.


See GitHub Releases for release changelog.

Feature overview

Alertmanager UI is useful for browsing alerts and managing silences, but it's lacking as a dashboard tool - karma aims to fill this gap.

Alert aggregation and deduplication

Starting with the 0.7.0 release it can aggregate alerts from multiple Alertmanager instances, running either in HA mode or separate. Unique alerts are displayed by filtering duplicates. Each alert is tagged with the names of all Alertmanager instances it was found at and can be filtered based on those tags (@alertmanager). Note that @alertmanager tags will be visible only if karma is configured with multiple Alertmanager instances. If alertmanger is configured to use HA clusters then @cluster will be available as well, to set a custom name for each cluster see CONFIGURATION.md.

Screenshot

Alert visualization

Alert groups

Alerts are displayed grouped preserving group_by configuration option in Alertmanager. Note that a unique alert group will be created for each receiver it uses in alertmanager as they can have different group_by settings. If a group contains multiple alerts only the first few alerts will be presented. Alerts are expanded or hidden using - / + buttons. The default number of alerts can be configured in the UI settings module. Each group can be collapsed to only show the title bar using top right toggle icon. Each individual alert will show unique labels and annotations. Labels and annotations that are shared between all alerts are moved to the footer.

Active alerts will show recently expired silences, to allow re-silincing if needed. This is controlled via silences:expired setting. 10m value would show silences expired in the last 10 minutes but only for alerts that started firing more than 10 minutes ago.

Example

Alert history

Alertmanager doesn't currently provide any long term storage of alert events or a way to query for historical alerts, but each Prometheus server sending alerts stores metrics related to triggered alerts. When history:enabled is true karma will use source fields from each alert to try querying alert related metrics on remote Prometheus servers. The result is the number of times given alert group triggered an alert per hour in the last 24h, displayed as 24 blocks. The darker the color the more alerts were triggered in that hour, as compared by all other hours.

Example

For this feature to work karma must be able to connect to all Prometheus servers sending alerts. Be sure to set --web.external-url Prometheus flag to a publicly reachable URL of each server.

Inhibited alerts

Inhibited alerts (suppressed by other alerts, see Alertmanager docs) will have a "muted" button.

Inhibited alert

Clicking on that button will bring a modal with a list of inhibiting alerts.

Inhibiting alerts

Silence deduplication

If all alerts in a group were suppressed by the same silence then, to save screen space, the silence will also be moved to the footer.

Deduplicated silence

Label based multi-grid

To help separate alerts from different environments or with different level of severity multi-grid mode can be enabled, which adds another layer of visually grouping alert groups. To enable this mode go to the configuration modal and select a label name, all alerts will be grouped by that label, each label value will have a dedicated grid, including an extra grid for alerts without that label present.

Example

Silence management

Silence modal allows to create new silences and manage all silences already present in Alertmanager. Silence ACL rules can be used to control silence creation and editing, see ACLs docs for more details.

Silence browser

Alert overview

Clicking on the alert counter in the top left corner will open the overview modal, which allows to quickly get an overview of the top label values for all current alerts.

Overview

Alert acknowledgement

Starting with v0.50 karma can create short lived silences to acknowledge alerts with a single button click. To create silences that will resolve itself only after all alerts are resolved you can use kthxbye. See configuration docs for details.

Dead Man’s Switch support

Starting with v0.78 karma can be configured to check for Dead Man’s Switch style alerts (alert that is always firing). If no alert is found in given alertmanager karma will show an error in the UI. See healthcheck:filters option on configuration docs for details.

Dark mode

Starting with v0.52 release karma includes both light and dark themes. By default it will follow browser preference using prefers-color-scheme media queries.

Dark mode

Demo

Online demo is running latest main branch. It might include features that are experimental and not yet ready to be included.

Release notes

Release notes can be found on GitHub Release Page.

To get notifications about new karma releases go to GitHub karma page, click Watch and select Releases only. This requires GitHub user account. To subscribe to email notifications without GitHub account you can subscribe to the RSS feed that GitHub provides. To get email notifications from those feeds use one of the free services providing RSS to email notifications, like Blogtrottr.

History

I created karma while working for Cloudflare, originally it was called unsee. This project is based on that code but the UI part was rewritten from scratch using React. New UI required changes to the backend so the API is also incompatible. Given that the React rewrite resulted in roughly 50% of new code and to avoid confusion for user I've decided to rename it to karma, especially that the original project wasn't being maintained anymore.

Supported Alertmanager versions

Alertmanager's API isn't stable yet and can change between releases, see VERSIONS in internal/mock/Makefile for list of all Alertmanager releases that are tested and supported by karma. Due to API differences between those releases some features will work differently or be missing, it's recommended to use the latest supported Alertmanager version.

Security

karma doesn't in any way alter alerts in any Alertmanager instance it collects data from. This is true for both the backend and the web UI. The web UI allows to manage silences by sending requests to Alertmanager instances, this can be done directly (browser to Alertmanager API) or by proxying such requests via karma backend (browser to karma backend to Alertmanager API) if proxy mode is enabled in karma config.

If you wish to deploy karma as a read-only tool without giving users any ability to modify data in Alertmanager instance, then please ensure that:

  • the karma process is able to connect to the Alertmanager API
  • read-only users are able to connect to the karma web interface
  • read-only users are NOT able to connect to the Alertmanager API
  • readonly is set to true in alertmanager:servers config section for all alertmanager instances, this options will disable any UI elements that could trigger updates (like silence management)

To restrict some users from creating silences or enforce some matcher rules use silence ACL rules. This feature requires proxy to be enabled.

Metrics

karma process metrics are accessible under /metrics path by default. If you set the --listen.prefix option a path relative to it will be used.

Building and running

Building from source

To clone git repo and build the binary yourself run:

git clone https://github.com/prymitive/karma $GOPATH/src/github.com/p

readme truncated — read the full docs on github

Frequently asked questions

Is karma free to use?

karma is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does karma do?

Alert dashboard for Prometheus Alertmanager

What is karma written in?

karma is primarily written in TypeScript. Its source is publicly available at https://github.com/prymitive/karma, and it has 2,682 GitHub stars.