{"id":13582124,"url":"https://github.com/krpn/prometheus-alert-webhooker","last_synced_at":"2026-03-27T02:42:10.618Z","repository":{"id":47317514,"uuid":"146549347","full_name":"krpn/prometheus-alert-webhooker","owner":"krpn","description":"Convert Prometheus Alertmanager Webhook to any action","archived":false,"fork":false,"pushed_at":"2021-09-12T16:16:06.000Z","size":183,"stargazers_count":62,"open_issues_count":2,"forks_count":22,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-03T01:14:53.243Z","etag":null,"topics":["alertmanager","jenkins","monitoring","prometheus","telegram","webhooks"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krpn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-29T05:24:51.000Z","updated_at":"2025-05-25T11:08:16.000Z","dependencies_parsed_at":"2022-08-28T11:41:31.020Z","dependency_job_id":null,"html_url":"https://github.com/krpn/prometheus-alert-webhooker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/krpn/prometheus-alert-webhooker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krpn%2Fprometheus-alert-webhooker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krpn%2Fprometheus-alert-webhooker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krpn%2Fprometheus-alert-webhooker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krpn%2Fprometheus-alert-webhooker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krpn","download_url":"https://codeload.github.com/krpn/prometheus-alert-webhooker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krpn%2Fprometheus-alert-webhooker/sbom","scorecard":{"id":570732,"data":{"date":"2025-08-11","repo":{"name":"github.com/krpn/prometheus-alert-webhooker","commit":"c092c37e1cdd1ab789074deb00e17c882a7cadb2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 4/11 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:20: pin your Docker image by updating alpine:3.8 to alpine:3.8@sha256:2bb501e6173d9d006e56de5bce2720eb06396803300fe1687b58a7ff32bf4c14","Warn: downloadThenRun not pinned by hash: Dockerfile:3-7","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T16:17:00.287Z","repository_id":47317514,"created_at":"2025-08-20T16:17:00.288Z","updated_at":"2025-08-20T16:17:00.288Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31011491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T02:33:22.146Z","status":"ssl_error","status_checked_at":"2026-03-27T02:33:21.763Z","response_time":164,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["alertmanager","jenkins","monitoring","prometheus","telegram","webhooks"],"created_at":"2024-08-01T15:02:26.468Z","updated_at":"2026-03-27T02:42:10.596Z","avatar_url":"https://github.com/krpn.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# prometheus-alert-webhooker\n\n[![Build Status](https://app.travis-ci.com/krpn/prometheus-alert-webhooker.svg?branch=master)](https://app.travis-ci.com/krpn/prometheus-alert-webhooker) [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=krpn_prometheus-alert-webhooker\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=krpn_prometheus-alert-webhooker) [![Coverage Status](https://sonarcloud.io/api/project_badges/measure?project=krpn_prometheus-alert-webhooker\u0026metric=coverage)](https://sonarcloud.io/component_measures?id=krpn_prometheus-alert-webhooker\u0026metric=coverage) [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=krpn_prometheus-alert-webhooker\u0026metric=sqale_index)](https://sonarcloud.io/component_measures?id=krpn_prometheus-alert-webhooker\u0026metric=sqale_index) [![License](https://img.shields.io/github/license/krpn/prometheus-alert-webhooker.svg)](https://github.com/krpn/prometheus-alert-webhooker/blob/master/LICENSE)\n\nprometheus-alert-webhooker converts [Prometheus Alertmanager Webhook](https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver) to any action\n\n## Table of Contents\n\n* [Features](#features)\n* [Quick Start](#quick-start)\n* [Configuration](#configuration)\n* [Understanding blocking](#understanding-blocking)\n* [Executors](#executors)\n  * [Executor `jenkins`](#executor-jenkins)\n  * [Executor `shell`](#executor-shell)\n  * [Executor `http`](#executor-http)\n  * [Executor `telegram`](#executor-telegram)\n* [Command-Line Flags](#command-line-flags)\n* [Exposed Prometheus Metrics](#exposed-prometheus-metrics)\n* [Testing your configuration](#testing-your-configuration)\n* [Contribute](#contribute)\n\n## Features\n\n* Converts Prometheus Alertmanager Webhook to any action using rules\n* Currently supports actions (see [executors](#executors)):\n  * run Jenkins job (optionally with parameters)\n  * run shell command\n  * send Telegram message\n* Alert labels/annotations can be used in action placeholders\n* Rules are set in config and can be flexible ([example](https://github.com/krpn/prometheus-alert-webhooker/blob/master/example/config.yaml))\n* Supported config types JSON, TOML, YAML, HCL, and Java properties ([Viper](https://github.com/spf13/viper) is used)\n* Supported config providers: file, etcd, consul (with automatic refresh)\n* Prometheus metrics built in\n* A docker image available on [Docker Hub](https://hub.docker.com/r/krpn/prometheus-alert-webhooker/)\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Quick Start\n\n1. Prepare config.yaml file based on [example](https://github.com/krpn/prometheus-alert-webhooker/blob/master/example/config.yaml) (details in [configuration](#configuration))\n\n2. Run container with command ([cli flags](#command-line-flags)):\n\n    If you use file config:\n\n    `docker run -d -p \u003cport\u003e:8080 -v \u003cpath to config.yaml\u003e:/config --name prometheus-alert-webhooker krpn/prometheus-alert-webhooker --verbose`\n\n    If you use Consul:\n\n    `docker run -d -p \u003cport\u003e:8080 --name prometheus-alert-webhooker krpn/prometheus-alert-webhooker --verbose --provider consul --config http://\u003cconsul address\u003e:8500/v1/kv/\u003cpath to config\u003e`\n\n3. Checkout logs:\n\n    `docker logs prometheus-alert-webhooker`\n\n4. Add webhook to [Alertmanager webhook config](https://prometheus.io/docs/alerting/configuration/#webhook_config). url will be:\n\n    `url: http://\u003cserver container runned on\u003e:\u003cport\u003e/webhooker`\n\n5. Add webhooker instance to [Prometheus scrape targets](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#%3Cscrape_config%3E) if needed (port is the same; [metrics](#exposed-prometheus-metrics))\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Configuration\n\nConfiguration description based on YAML format:\n\n```yaml\n# WEBHOOKER GLOBAL SETTINGS\n# cache size for blocked tasks\n# calculate: 50 * 1024 * 1024 = 50 MB\n# default if not set: 52428800\nblock_cache_size: 52428800\n\n# pool size for new tasks\n# locks webhook if overflow\n# default if not set: 100\npool_size: 100\n\n# runners count for parallel actions execute\n# default if not set: 10\nrunners: 10\n\n# remote config refresh interval\n# used only for etcd and consul config providers\n# rules including common parameters will be refreshed only\n# global settings exclude refresh interval will NOT be refreshed (restart is required)\n# will not refresh if zero\n# default if not set: 0s\nremote_config_refresh_interval: 60s\n\n\n# COMMON PARAMETERS FOR ACTIONS (optional)\n# available to get in rules-actions-common_parameters\n# can be used for storing credentials\ncommon_parameters:\n  # name of parameters set\n  \u003cparameters_set_1\u003e:\n    \u003cparameter_1\u003e: \u003cparameter_1_value\u003e\n    \u003cparameter_n\u003e: \u003cparameter_n_value\u003e\n\n\n# LIST OF RULES\nrules:\n- name: \u003crule_1\u003e # rule name\n\n  # list of conditions for this rule\n  # values can be regexp\n  # regexp detecting by existence of regexp group\n  # if no regexp groups found value used as string\n  # matching with AND operator, ALL conditions must match\n  conditions:\n    # define alert status for match if needed\n    # default if not set: firing\n    # alert_status: firing\n    \n    # list of alert labels for match\n    alert_labels:\n      \u003clabel_1\u003e: \u003clabel_value_1\u003e\n      \u003clabel_n\u003e: \u003clabel_value_n\u003e\n      \n    # list of alert annotations for match\n    alert_annotations:\n      \u003cannotation_1\u003e: \u003cannotation_value_1\u003e\n      \u003cannotation_n\u003e: \u003cannotation_value_n\u003e\n  \n  # list of actions for this rule\n  # (!) if few actions are match for alert all matched actions will be exec\n  # (!) actions will be execute sequentially\n  # if action fails the other actions will be cancelled\n  actions:\n  - executor: \u003cexecutor\u003e # executor from available executor list \n    \n    # get parameters from common if needed\n    # common parameters has low priority to action parameters:\n    #   the same parameter will be replaced by action parameter\n    # common_parameters: \u003cparameters_set_1\u003e\n    \n    # list of parameters for action\n    # (!) each executor can have a list of required parameters\n    # parameter values can contains placeholders fully in UPPER case:\n    #   ${LABEL_\u003cLABEL_N\u003e} will be replaced by \u003clabel_value_n\u003e\n    #   ${ANNOTATION_\u003cANNOTATION_N\u003e} will be replaced by \u003cannotation_value_n\u003e\n    # each placeholder can have one modificator (optionally): ${\u003cMODIFICATOR\u003eLABELS_\u003cLABEL_N\u003e}\n    # \u003cMODIFICATOR\u003e list:\n    #   URLENCODE_            - escapes the string so it can be safely placed inside a URL query\n    #   CUT_AFTER_LAST_COLON_ - cuts text after last colon, can be used for cut port from instance label\n    #   JSON_ESCAPE_          - escapes the string so it can be safely placed inside a JSON value\n    # examples:\n    #   ${LABEL_ALERTNAME} - alert name\n    #   ${ANNOTATION_COMMAND} - value from annotation \"command\"\n    #   ${CUT_AFTER_LAST_COLON_LABEL_INSTANCE} - instance without port\n    #   ${URLENCODE_ANNOTATION_SUMMARY} - urlencoded value from annotation \"summary\"\n    #   ${JSON_ESCAPE_ANNOTATION_DESCRIPTION} - JSON escaped value from annotation \"description\"\n    # (!) all unexpected parameters will be ignored\n    parameters:\n      \u003cparameter_1\u003e: \u003cparameter_1_value\u003e\n      \u003cparameter_n\u003e: \u003cparameter_n_value\u003e\n    \n    # block time for successfully executed action\n    # check Understanding blocking section\n    # used for occasional exec\n    # (!) blocks only unique set of parameters for this action\n    # will not block if zero\n    # (!) all blocks released when webhooker restarts\n    # default if not set: 0s\n    block: 10m\n```\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Understanding blocking\n\nwebhooker endpoint could be touched by Alertmanager many times depends on Alertmanager settings. webhooker is able to block similar touches for some period. It prevents duplicated executors runs. For blocked runs, you will see such text in logs: `unsuccessful result, stopping group: in_block`.\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Executors\n\nExecutors and it parameters described below.\n\n### Executor `jenkins`\n\n`jenkins` is used for run Jenkins jobs. Runner starts job, waits job finish and check it was successfull.\n\n| Parameter                        | Type       | Description                                                                                                                  | Example                                                        |\n|----------------------------------|:----------:|------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|\n| `endpoint`                       | `string`   | Jenkins address                                                                                                              | `endpoint: https://jenkins.example.com/`                       |\n| `login`                          | `string`   | Jenkins login                                                                                                                | `login: webhooker`                                             |\n| `password`                       | `string`   | Jenkins password                                                                                                             | `password: qwerty123`                                          |\n| `job`                            | `string`   | Name of job to run. If you use Jenkins Folders Plugin you need set the full path to job                                      | `job: YourJob or Folder/job/YourJob (Folders Plugin)`          |\n| `job parameter \u003cparameter_name\u003e` | `string`   | (optional) Pass \u003cparameter_name\u003e to job                                                                                      | `job parameter server: ${CUT_AFTER_LAST_COLON_LABEL_INSTANCE}` |\n| `state_refresh_delay`            | `duration` | (optional, default: 15s) How often runner will be refresh job status when executing                                          | `state_refresh_delay: 3s`                                      |\n| `secure_interations_limit`       | `integer`  | (optional, default: 1000) How many refresh status iterations will be until Job will be considered hung and runner release it | `secure_interations_limit: 500`                                |\n\n### Executor `shell`\n\n`shell` is used for run unix shell command. *Remember: all shell scripts must be mounted if you use Docker.*\n\n| Parameter | Type               | Description                      | Example                               |\n|-----------|:------------------:|----------------------------------|---------------------------------------|\n| `command` | `string`           | Command for execute              | `command: ./clean.sh ${LABEL_FOLDER}` |\n| `args`    | `array of strings` | (optional) arguments for command | `args: ['-i', '/root/.ssh/id_rsa']`  |\n\n### Executor `http`\n\n`http` is used for making HTTP requests.\n\n| Parameter              | Type       | Description                                                                                  | Example                                                    |\n|------------------------|:----------:|----------------------------------------------------------------------------------------------|------------------------------------------------------------|\n| `url`                  | `string`   | Request URL                                                                                  | `url: https://www.example.com/`                            |\n| `method`               | `string`   | (optional, default: GET) Request method                                                      | `method: POST`                                             |\n| `body`                 | `string`   | (optional) Request body                                                                      | `body: {\"data\": \"${JSON_ESCAPE_ANNOTATIONS_DESCRIPTION}\"}` |\n| `header \u003cheader_name\u003e` | `string`   | (optional) Sets header \u003cheader_name\u003e                                                         | `header Authorization: ba0828c9fac6b0b47d9147963429d091`   |\n| `timeout`              | `duration` | (optional, default: 1s) Request timeout                                                      | `timeout: 100ms`                                           |\n| `success_http_status`  | `integer`  | (optional, default: 200) Success response status code, will be checked after request execute | `success_http_status: 201`                                 |\n\n### Executor `telegram`\n\n`telegram` is used for handy notifications about webhooker events.\n\n| Parameter   | Type      | Description                                        | Example                                                |\n|-------------|:---------:|----------------------------------------------------|--------------------------------------------------------|\n| `bot_token` | `string`  | Bot token from [BotFather](https://t.me/BotFather) | `bot_token: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11` |\n| `chat_id`   | `integer` | Chat ID for send notifications to                  | `chat_id: -1001103941234`                              |\n| `message`   | `string`  | Message for send                                   | `message: Fixed ${LABEL_ALERTNAME}`                    |\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Command-Line Flags\n\nUsage: `prometheus-alert-webhooker [\u003cflags\u003e]`\n\n| Flag                 | Type     | Description                                                                | Default              |\n|----------------------|:--------:|----------------------------------------------------------------------------|----------------------|\n| `-p` or `--provider` | `string` | Config provider: file, etcd, consul                                        | `file`               |\n| `-c` or `--config`   | `string` | Path to config file with extension, can be link for etcd, consul providers | `config/config.yaml` |\n| `-l` or `--listen`   | `string` | HTTP port to listen on                                                     | `:8080`              |\n| `-v` or `--verbose`  |          | Enable verbose logging                                                     |                      |\n| `--help`             |          | Show help                                                                  |                      |\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Exposed Prometheus Metrics\n\n| Name                                        | Description                                                                                    | Labels                                     |\n|---------------------------------------------|------------------------------------------------------------------------------------------------|--------------------------------------------|\n| `prometheus_alert_webhooker_income_tasks`   | Income tasks counter                                                                           | `rule` `alert` `executor`                  |\n| `prometheus_alert_webhooker_executed_tasks` | Executed tasks histogram with duration in seconds. `error` label is empty if no error occurred | `rule` `alert` `executor` `result` `error` |\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Testing your configuration\n\nOnce your service is running you might like to test your rules to make sure they are firing as expected. This is a small curl command that you can use to submit a mock alert to your webhooker service, please replace the server and port appropriately. You may also add more annotations and labels to match the payloads you will receive from your own alertmanager alerts.\n\n```bash\ncurl -i -X POST https://\u003cserver\u003e:\u003cport\u003e/webhooker -d '{\n  \"version\": \"4\",\n  \"status\": \"firing\",\n  \"groupKey\": \"testing\",\n  \"truncatedAlerts\": 0,\n  \"alerts\": [\n    {\n      \"annotations\": {\n          \"name\": \"TestAlert\"\n      },\n      \"labels\": {\n          \"alertname\": \"testalert1\",\n          \"instance\": \"testinstance1\",\n          \"source\": \"jenkins\"\n      }\n    }\n  ]\n}'\n```\n\n[(back to top)](#prometheus-alert-webhooker)\n\n## Contribute\n\nPlease feel free to send me [pull requests](https://github.com/krpn/prometheus-alert-webhooker/pulls).\n\n[(back to top)](#prometheus-alert-webhooker)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrpn%2Fprometheus-alert-webhooker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrpn%2Fprometheus-alert-webhooker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrpn%2Fprometheus-alert-webhooker/lists"}