Prometheus Alertmanager
The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct receiver integrations such as email, PagerDuty, OpsGenie, or many other mechanisms thanks to the webhook receiver. It also takes care of silencing and inhibition of alerts.
There are various ways of installing Alertmanager.
Precompiled binaries for released versions are available in the download section on prometheus.io. Using the latest production release binary is the recommended way of installing Alertmanager.
Docker images are available on Quay.io or Docker Hub.
You can launch an Alertmanager container for trying it out with
$ docker run --name alertmanager -d -p 127.0.0.1:9093:9093 quay.io/prometheus/alertmanager
Alertmanager will now be reachable at http://localhost:9093/.
Building from source requires Go and Node.js (with npm). Clone the repository and build manually:
$ git clone https://github.com/prometheus/alertmanager.git
$ cd alertmanager
$ make build
$ ./alertmanager --config.file=<your_file>
You can also build just one of the binaries in this repo by passing a name to the build function:
$ make build BINARIES=amtool
This is an example configuration that should cover most relevant aspects of the new YAML configuration format. The full documentation of the configuration can be found here.
…
The current Alertmanager API is version 2. This API is fully generated via the OpenAPI project and Go Swagger with the exception of the HTTP handlers themselves. The API specification can be found in api/v2/openapi.yaml. A HTML rendered version can be accessed here. Clients can be easily generated via any OpenAPI generator for all major languages.
APIv2 is accessed via the /api/v2 prefix. APIv1 was deprecated in 0.16.0 and is removed as of version 0.27.0.
The v2 /status endpoint would be /api/v2/status. If --web.route-prefix is set then API routes are
prefixed with that as well, so --web.route-prefix=/alertmanager/ would
relate to /alertmanager/api/v2/status.
amtool is a cli tool for interacting with the Alertmanager API. It is bundled with all releases of Alertmanager.
Alternatively you can install with:
$ go install github.com/prometheus/alertmanager/cmd/amtool@latest
View all currently firing alerts:
$ amtool alert
Alertname Starts At Summary
Test_Alert 2017-08-02 18:30:18 UTC This is a testing alert!
Test_Alert 2017-08-02 18:30:18 UTC This is a testing alert!
Check_Foo_Fails 2017-08-02 18:30:18 UTC This is a testing alert!
Check_Foo_Fails 2017-08-02 18:30:18 UTC This is a testing alert!
View all currently firing alerts with extended output:
…
In addition to viewing alerts, you can use the rich query syntax provided by Alertmanager:
…
Silence an alert:
$ amtool silence add alertname=Test_Alert
b3ede22e-ca14-4aa0-932c-ca2f3445f926
$ amtool silence add alertname="Test_Alert" instance=~".+0"
e48cb58a-0b17-49ba-b734-3585139b1d25
View silences:
$ amtool silence query
ID Matchers Ends At Created By Comment
b3ede22e-ca14-4aa0-932c-ca2f3445f926 alertname=Test_Alert 2017-08-02 19:54:50 UTC kellel
$ amtool silence query instance=~".+0"
ID Matchers Ends At Created By Comment
e48cb58a-0b17-49ba-b734-3585139b1d25 alertname=Test_Alert instance=~.+0 2017-08-02 22:41:39 UTC kellel
Expire a silence:
$ amtool silence expire b3ede22e-ca14-4aa0-932c-ca2f3445f926
Expire all silences matching a query:
$ amtool silence query instance=~".+0"
ID Matchers Ends At Created By Comment
e48cb58a-0b17-49ba-b734-3585139b1d25 alertname=Test_Alert instance=~.+0 2017-08-02 22:41:39 UTC kellel
$ amtool silence expire $(amtool silence query -q instance=~".+0")
$ amtool silence query instance=~".+0"
Expire all silences:
$ amtool silence expire $(amtool silence query -q)
Try out how a template works. Let's say you have this in your configuration file:
templates:
- '/foo/bar/*.tmpl'
Then you can test out how a template would look like with example by using this command:
amtool template render --template.glob='/foo/bar/*.tmpl' --template.text='{{ template "slack.default.markdown.v1" . }}'
amtool allows a configuration file to specify some options for convenience. The default configuration file paths are $HOME/.config/amtool/config.yml or /etc/amtool/config.yml
An example configuration file might look like the following:
# Define the path that `amtool` can find your `alertmanager` instance
alertmanager.url: "http://localhost:9093"
# Override the default author. (unset defaults to your username)
author: [email protected]
# Force amtool to give you an error if you don't include a comment on a silence
comment_required: true
# Set a default output format. (unset defaults to simple)
output: extended
# Set a default receiver
receiver: team-X-pager
amtool allows you to visualize the routes of your configuration in form of text tree view.
Also you can use it to test the routing by passing it label set of an alert
and it prints out all receivers the alert would match ordered and separated by ,.
(If you use --verify.receivers amtool returns error code 1 on mismatch)
Example of usage:
# View routing tree of remote Alertmanager
$ amtool config routes --alertmanager.url=http://localhost:9093
# Test if alert matches expected receiver
$ amtool config routes test --config.file=doc/examples/simple.yml --tree --verify.receivers=team-X-pager service=database owner=team-X
Alertmanager's high availability is in production use at many companies and is enabled by default.
Important: Both UDP and TCP are needed in alertmanager 0.15 and higher for the cluster to work.
- If you are using a firewall, make sure to whitelist the clustering port for both protocols.
- If you are running in a container, make sure to expose the clustering port for both protocols.
To create a highly available cluster of the Alertmanager the instances need to
be configured to communicate with each other. This is configured using the
--cluster.* flags.
--cluster.listen-address string: cluster listen address (default "0.0.0.0:9094"; empty string disables HA mode)--cluster.advertise-address string: cluster advertise address--cluster.peer value: initial peers (repeat flag for each additional peer)--cluster.peer-timeout value: peer timeout period (default "15s")--cluster.peers-resolve-timeout value: peers resolve timeout period (default "15s")--cluster.gossip-interval value: cluster message propagation speed
(default "200ms")--cluster.pushpull-interval value: lower values will increase
convergence speeds at expense of bandwidth (default "1m0s")--cluster.settle-timeout value: maximum time to wait for cluster
connections to settle before evaluating notifications.--cluster.tcp-timeout value: timeout value for tcp connections, reads and writes (default "10s")--cluster.probe-timeout value: time to wait for ack before marking node unhealthy
(default "500ms")--cluster.probe-interval value: interval between random node probes (default "1s")--cluster.reconnect-interval value: interval between attempting to reconnect to lost peers (default "10s")--cluster.reconnect-timeout value: length of time to attempt to reconnect to a lost peer (default: "6h0m0s")--cluster.label value: the label is an optional string to include on each packet and stream. It uniquely identifies the cluster and prevents cross-communication issues when sending gossip messages (default:"")The chosen port in the cluster.listen-address flag is the port that needs to be
specified in the cluster.peer flag of the other peers.
The cluster.advertise-address flag is required if the instance doesn't have
an IP address that is part of RFC 6890
with a default route.
To start a cluster of three peers on your local machine use goreman and the
Procfile within this repository.
goreman start
To point your Prometheus 1.4, or later, instance to multiple Alertmanagers, configure them
in your prometheus.yml configuration file, for example:
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager1:9093
- alertmanager2:9093
- alertmanager3:9093
Important: Do not load balance traffic between Prometheus and its Alertmanagers, but instead point Prometheus to a list of all Alertmanagers. The Alertmanager implementation expects all alerts to be sent to all Alertmanagers to ensure high availability.
If running Alertmanager in high availability mode is not desired, setting --cluster.listen-address= prevents Alertmanager from listening to incoming peer requests.
Check the Prometheus contributing page.
To contribute to the user interface, refer to ui/app/CONTRIBUTING.md.
This diagram shows how incoming alerts are grouped, routed, and delivered to configured receivers. See the Alertmanager architecture overview for details.
Apache License 2.0, see LICENSE.
暂无开放 Issues,或尚未同步最近议题。