{"id":13524757,"url":"https://github.com/prymitive/karma","last_synced_at":"2025-05-12T13:27:16.976Z","repository":{"id":37514238,"uuid":"148022767","full_name":"prymitive/karma","owner":"prymitive","description":"Alert dashboard for Prometheus Alertmanager","archived":false,"fork":false,"pushed_at":"2025-04-30T20:49:44.000Z","size":126596,"stargazers_count":2427,"open_issues_count":30,"forks_count":181,"subscribers_count":29,"default_branch":"main","last_synced_at":"2025-04-30T21:39:07.504Z","etag":null,"topics":["alerting","alertmanager","dashboard","monitoring","prometheus","prometheus-alertmanager","prometheus-utility"],"latest_commit_sha":null,"homepage":"https://demo.karma-dashboard.io/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prymitive.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"docs/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-09-09T12:23:33.000Z","updated_at":"2025-04-30T20:49:47.000Z","dependencies_parsed_at":"2023-10-11T08:57:16.418Z","dependency_job_id":"e5173448-32e1-4310-867d-11d3933fff9d","html_url":"https://github.com/prymitive/karma","commit_stats":null,"previous_names":[],"tags_count":134,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prymitive%2Fkarma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prymitive%2Fkarma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prymitive%2Fkarma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prymitive%2Fkarma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prymitive","download_url":"https://codeload.github.com/prymitive/karma/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253747071,"owners_count":21957685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alerting","alertmanager","dashboard","monitoring","prometheus","prometheus-alertmanager","prometheus-utility"],"created_at":"2024-08-01T06:01:13.165Z","updated_at":"2025-05-12T13:27:16.952Z","avatar_url":"https://github.com/prymitive.png","language":"TypeScript","readme":"# karma\n\nAlert dashboard for\n[Prometheus Alertmanager](https://prometheus.io/docs/alerting/alertmanager/).\n\n---\n\nAlertmanager `\u003e=0.22.0` is required.\n\n---\n\nSee [GitHub Releases](https://github.com/prymitive/karma/releases) for release\nchangelog.\n\n## Feature overview\n\nAlertmanager UI is useful for browsing alerts and managing silences, but it's\nlacking as a dashboard tool - karma aims to fill this gap.\n\n### Alert aggregation and deduplication\n\nStarting with the `0.7.0` release it can aggregate alerts from multiple\nAlertmanager instances, running either in HA mode or separate. Unique alerts are\ndisplayed by filtering duplicates. Each alert is tagged with the names of all\nAlertmanager instances it was found at and can be filtered based on those tags\n(`@alertmanager`). Note that `@alertmanager` tags will be visible only if karma\nis configured with multiple Alertmanager instances.\nIf alertmanger is configured to use\n[HA clusters](https://prometheus.io/docs/alerting/latest/alertmanager/#high-availability)\nthen `@cluster` will be available as well, to set a custom name for each cluster\nsee [CONFIGURATION.md](docs/CONFIGURATION.md#alertmanagers).\n\n![Screenshot](/docs/img/screenshot.png)\n\n### Alert visualization\n\n#### Alert groups\n\nAlerts are displayed grouped preserving\n[group_by](https://prometheus.io/docs/alerting/configuration/#route)\nconfiguration option in Alertmanager.\nNote that a unique alert group will be created for each receiver it uses in\nalertmanager as they can have different `group_by` settings.\nIf a group contains multiple alerts only\nthe first few alerts will be presented. Alerts are expanded or hidden\nusing - / + buttons. The default number of alerts can be configured in the UI\nsettings module.\nEach group can be collapsed to only show the title bar using top right toggle\nicon.\nEach individual alert will show unique labels and annotations. Labels\nand annotations that are shared between all alerts are moved to the footer.\n\nActive alerts will show recently expired silences, to allow re-silincing\nif needed.\nThis is controlled via `silences:expired` setting. `10m` value would show\nsilences expired in the last 10 minutes but only for alerts that started firing\nmore than 10 minutes ago.\n\n![Example](/docs/img/alertGroup.png)\n\n#### Alert history\n\nAlertmanager doesn't currently provide any long term storage of alert events\nor a way to query for historical alerts, but each Prometheus server sending\nalerts stores metrics related to triggered alerts.\nWhen `history:enabled` is `true` karma will use `source` fields from each alert\nto try querying alert related metrics on remote Prometheus servers.\nThe result is the number of times given alert group triggered an alert per hour\nin the last 24h, displayed as 24 blocks. The darker the color the more alerts\nwere triggered in that hour, as compared by all other hours.\n\n![Example](/docs/img/alertHistory.png)\n\nFor this feature to work karma must be able to connect to all Prometheus servers\nsending alerts. Be sure to set `--web.external-url` Prometheus flag to a publicly\nreachable URL of each server.\n\n#### Inhibited alerts\n\nInhibited alerts (suppressed by other alerts,\n[see Alertmanager docs](https://prometheus.io/docs/alerting/latest/alertmanager/#inhibition))\nwill have a \"muted\" button.\n\n![Inhibited alert](/docs/img/inhibited.png)\n\nClicking on that button will bring a modal with a list of inhibiting alerts.\n\n![Inhibiting alerts](/docs/img/inhibitedByModal.png)\n\n#### Silence deduplication\n\nIf all alerts in a group were suppressed by the same silence then, to save\nscreen space, the silence will also be moved to the footer.\n\n![Deduplicated silence](/docs/img/footerSilence.png)\n\n### Label based multi-grid\n\nTo help separate alerts from different environments or with different level of\nseverity multi-grid mode can be enabled, which adds another layer of visually\ngrouping alert groups.\nTo enable this mode go to the configuration modal and select a label name, all\nalerts will be grouped by that label, each label value will have a dedicated\ngrid, including an extra grid for alerts without that label present.\n\n![Example](/docs/img/multiGrid.png)\n\n### Silence management\n\nSilence modal allows to create new silences and manage all silences already\npresent in Alertmanager.\nSilence ACL rules can be used to control silence creation and editing, see\n[ACLs](/docs/ACLs.md) docs for more details.\n\n![Silence browser](/docs/img/silenceBrowser.png)\n\n### Alert overview\n\nClicking on the alert counter in the top left corner will open the overview\nmodal, which allows to quickly get an overview of the top label values for\nall current alerts.\n\n![Overview](/docs/img/overview.png)\n\n### Alert acknowledgement\n\nStarting with `v0.50` karma can create short lived silences to acknowledge\nalerts with a single button click. To create silences that will resolve itself\nonly after all alerts are resolved you can use\n[kthxbye](https://github.com/prymitive/kthxbye).\nSee [configuration docs](/docs/CONFIGURATION.md#alert-acknowledgement) for\ndetails.\n\n### Dead Man’s Switch support\n\nStarting with `v0.78` karma can be configured to check for\n[Dead Man’s Switch](https://en.wikipedia.org/wiki/Dead_man%27s_switch)\nstyle alerts (alert that is always firing). If no alert is found in given\nalertmanager karma will show an error in the UI.\nSee `healthcheck:filters` option on [configuration docs](/docs/CONFIGURATION.md#alertmanagers)\nfor details.\n\n### Dark mode\n\nStarting with `v0.52` release karma includes both light and dark themes.\nBy default it will follow browser preference using\n[prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme)\nmedia queries.\n\n![Dark mode](/docs/img/dark.png)\n\n## Demo\n\n[Online demo](https://demo.karma-dashboard.io/) is running latest main branch.\nIt might include features that are experimental and not yet ready to be included.\n\n## Release notes\n\nRelease notes can be found on\n[GitHub Release Page](https://github.com/prymitive/karma/releases).\n\nTo get notifications about new karma releases go to\n[GitHub karma page](https://github.com/prymitive/karma), click `Watch` and\nselect `Releases only`. This requires GitHub user account.\nTo subscribe to email notifications without GitHub account you can subscribe to\nthe RSS feed that\n[GitHub provides](https://github.com/prymitive/karma/releases.atom).\nTo get email notifications from those feeds use one of the free services\nproviding _RSS to email_ notifications, like\n[Blogtrottr](https://blogtrottr.com/).\n\n## History\n\nI created karma while working for [Cloudflare](https://cloudflare.com/),\noriginally it was called [unsee](https://github.com/cloudflare/unsee).\nThis project is based on that code but the UI part was rewritten from scratch\nusing [React](https://reactjs.org/). New UI required changes to the backend so\nthe API is also incompatible.\nGiven that the React rewrite resulted in roughly 50% of new code and to avoid\nconfusion for user I've decided to rename it to karma, especially that the\noriginal project wasn't being maintained anymore.\n\n## Supported Alertmanager versions\n\nAlertmanager's API isn't stable yet and can change between releases, see\n`VERSIONS` in [internal/mock/Makefile](/internal/mock/Makefile) for list of all\nAlertmanager releases that are tested and supported by karma.\nDue to API differences between those releases some features will work\ndifferently or be missing, it's recommended to use the latest supported\nAlertmanager version.\n\n## Security\n\nkarma doesn't in any way alter alerts in any Alertmanager instance it collects\ndata from. This is true for both the backend and the web UI.\nThe web UI allows to manage silences by sending requests to Alertmanager\ninstances, this can be done directly (browser to Alertmanager API) or by\nproxying such requests via karma backend (browser to karma backend to\nAlertmanager API) if `proxy` mode is enabled in karma config.\n\nIf you wish to deploy karma as a read-only tool without giving users any ability\nto modify data in Alertmanager instance, then please ensure that:\n\n- the karma process is able to connect to the Alertmanager API\n- read-only users are able to connect to the karma web interface\n- read-only users are NOT able to connect to the Alertmanager API\n- `readonly` is set to `true` in\n  [alertmanager:servers](/docs/CONFIGURATION.md#alertmanagers) config section\n  for all alertmanager instances, this options will disable any UI elements that\n  could trigger updates (like silence management)\n\nTo restrict some users from creating silences or enforce some matcher rules use\n[silence ACL rules](/docs/ACLs.md). This feature requires `proxy` to be enabled.\n\n## Metrics\n\nkarma process metrics are accessible under `/metrics` path by default.\nIf you set the `--listen.prefix` option a path relative to it will be\nused.\n\n## Building and running\n\n### Building from source\n\nTo clone git repo and build the binary yourself run:\n\n    git clone https://github.com/prymitive/karma $GOPATH/src/github.com/prymitive/karma\n    cd $GOPATH/src/github.com/prymitive/karma\n\nTo finally compile `karma` the binary run:\n\n    make\n\nNote that building locally from sources requires Go, nodejs and yarn.\nSee Docker build options below for instructions on building from withing docker\ncontainer.\n\n## Running\n\n`karma` can be configured using config file, command line flags or environment\nvariables. Config file is the recommended method, it's also the only way to\nconfigure karma to use multiple Alertmanager servers for collecting alerts.\nTo run karma with a single Alertmanager server set `ALERTMANAGER_URI`\nenvironment variable or pass `--alertmanger.uri` flag on the command line, with\nAlertmanager URI as argument, example:\n\n    ALERTMANAGER_URI=https://alertmanager.example.com karma\n    karma --alertmanager.uri https://alertmanager.example.com\n\nThere is a make target which will compile and run a demo karma docker image:\n\n    make run-demo\n\nBy default it will listen on port `8080` and will have mock alerts.\n\n## Docker\n\n### Running pre-build docker image\n\nOfficial docker images are built and hosted on\n[Github](https://github.com/users/prymitive/packages/container/package/karma).\n\nImages are built automatically for:\n\n- release tags in git - `ghcr.io/prymitive/karma:vX.Y.Z`\n- main branch commits - `ghcr.io/prymitive/karma:latest`\n\n_NOTE_ karma uses [uber-go/automaxprocs](https://github.com/uber-go/automaxprocs)\nto automatically adjust `GOMAXPROCS` to match Linux container CPU quota.\n\n#### Examples\n\nTo start a release image run:\n\n    docker run -e ALERTMANAGER_URI=https://alertmanager.example.com ghcr.io/prymitive/karma:vX.Y.Z\n\nLatest release details can be found on\n[GitHub](https://github.com/prymitive/karma/releases).\n\nTo start docker image build from lastet main branch run:\n\n    docker run -e ALERTMANAGER_URI=https://alertmanager.example.com ghcr.io/prymitive/karma:latest\n\nNote that latest main branch might have bugs or breaking changes. Using\nrelease images is strongly recommended for any production use.\n\n### Building a Docker image\n\n    make docker-image\n\nThis will build a Docker image locally from sources.\n\n### Health checks\n\n`/health` endpoint can be used for health check probes, it always responds with\n`200 OK` code and `Pong` response body.\n\n## Configuration\n\nPlease see [CONFIGURATION](/docs/CONFIGURATION.md) for full list of available\nconfiguration options and [example.yaml](/docs/example.yaml) for a config file\nexample.\n\n## Contributing\n\nPlease see [CONTRIBUTING](/CONTRIBUTING.md) for details.\n\n## License\n\nApache License 2.0, please see [LICENSE](/LICENSE).\n","funding_links":[],"categories":["TypeScript","monitoring","Monitor","Alertmanager","Kubernetes"],"sub_categories":["Miscellaneous","Kubernetes // Grafana"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprymitive%2Fkarma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprymitive%2Fkarma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprymitive%2Fkarma/lists"}