AlertManager menangani peringatan yang dikirim oleh aplikasi klien seperti Server Prometheus. Ini mengurus deduplikasi, pengelompokan, dan merutekannya ke integrasi penerima yang benar seperti email, pagerduty, opsgenie, atau banyak mekanisme lainnya berkat penerima webhook. Ini juga menangani pembungkaman dan penghambatan peringatan.
Ada berbagai cara menginstal AlertManager.
Binari yang Diperdebatkan untuk Versi yang Dirilis tersedia di bagian Unduh di Prometheus.io. Menggunakan Biner Rilis Produksi Terbaru adalah cara yang disarankan untuk menginstal AlertManager.
Gambar Docker tersedia di hub Quay.io atau Docker.
Anda dapat meluncurkan wadah AlertManager untuk mencobanya
$ docker run --name alertmanager -d -p 127.0.0.1:9093:9093 quay.io/prometheus/alertmanager
AlertManager sekarang akan dapat dijangkau di http: // localhost: 9093/.
Anda bisa go get :
$ GO15VENDOREXPERIMENT=1 go get github.com/prometheus/alertmanager/cmd/...
# cd $GOPATH/src/github.com/prometheus/alertmanager
$ alertmanager --config.file=<your_file>
Atau klon repositori dan bangun secara manual:
$ mkdir -p $GOPATH/src/github.com/prometheus
$ cd $GOPATH/src/github.com/prometheus
$ git clone https://github.com/prometheus/alertmanager.git
$ cd alertmanager
$ make build
$ ./alertmanager --config.file=<your_file>
Anda juga dapat membangun hanya salah satu binari dalam repo ini dengan meneruskan nama ke fungsi build:
$ make build BINARIES=amtool
Ini adalah contoh konfigurasi yang harus mencakup aspek yang paling relevan dari format konfigurasi YAML baru. Dokumentasi lengkap dari konfigurasi dapat ditemukan di sini.
global :
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost : ' localhost:25 '
smtp_from : ' [email protected] '
# The root route on which each incoming alert enters.
route :
# The root route must not have any matchers as it is the entry point for
# all alerts. It needs to have a receiver configured so alerts that do not
# match any of the sub-routes are sent to someone.
receiver : ' team-X-mails '
# The labels by which incoming alerts are grouped together. For example,
# multiple alerts coming in for cluster=A and alertname=LatencyHigh would
# be batched into a single group.
#
# To aggregate by all possible labels use '...' as the sole label name.
# This effectively disables aggregation entirely, passing through all
# alerts as-is. This is unlikely to be what you want, unless you have
# a very low alert volume or your upstream notification system performs
# its own grouping. Example: group_by: [...]
group_by : ['alertname', 'cluster']
# When a new group of alerts is created by an incoming alert, wait at
# least 'group_wait' to send the initial notification.
# This way ensures that you get multiple alerts for the same group that start
# firing shortly after another are batched together on the first
# notification.
group_wait : 30s
# When the first notification was sent, wait 'group_interval' to send a batch
# of new alerts that started firing for that group.
group_interval : 5m
# If an alert has successfully been sent, wait 'repeat_interval' to
# resend them.
repeat_interval : 3h
# All the above attributes are inherited by all child routes and can
# overwritten on each.
# The child route trees.
routes :
# This route performs a regular expression match on alert labels to
# catch alerts that are related to a list of services.
- matchers :
- service=~"^(foo1|foo2|baz)$"
receiver : team-X-mails
# The service has a sub-route for critical alerts, any alerts
# that do not match, i.e. severity != critical, fall-back to the
# parent node and are sent to 'team-X-mails'
routes :
- matchers :
- severity="critical"
receiver : team-X-pager
- matchers :
- service="files"
receiver : team-Y-mails
routes :
- matchers :
- severity="critical"
receiver : team-Y-pager
# This route handles all alerts coming from a database service. If there's
# no team to handle it, it defaults to the DB team.
- matchers :
- service="database"
receiver : team-DB-pager
# Also group alerts by affected database.
group_by : [alertname, cluster, database]
routes :
- matchers :
- owner="team-X"
receiver : team-X-pager
- matchers :
- owner="team-Y"
receiver : team-Y-pager
# Inhibition rules allow to mute a set of alerts given that another alert is
# firing.
# We use this to mute any warning-level notifications if the same alert is
# already critical.
inhibit_rules :
- source_matchers :
- severity="critical"
target_matchers :
- severity="warning"
# Apply inhibition if the alertname is the same.
# CAUTION:
# If all label names listed in `equal` are missing
# from both the source and target alerts,
# the inhibition rule will apply!
equal : ['alertname']
receivers :
- name : ' team-X-mails '
email_configs :
- to : ' [email protected], [email protected] '
- name : ' team-X-pager '
email_configs :
- to : ' [email protected] '
pagerduty_configs :
- routing_key : <team-X-key>
- name : ' team-Y-mails '
email_configs :
- to : ' [email protected] '
- name : ' team-Y-pager '
pagerduty_configs :
- routing_key : <team-Y-key>
- name : ' team-DB-pager '
pagerduty_configs :
- routing_key : <team-DB-key> API AlertManager saat ini adalah versi 2. API ini sepenuhnya dihasilkan melalui proyek OpenAPI dan menjadi kesombongan dengan pengecualian penangan HTTP itu sendiri. Spesifikasi API dapat ditemukan di API/V2/OpenAPI.YAML. Versi yang diberikan HTML dapat diakses di sini. Klien dapat dengan mudah dihasilkan melalui generator openapi untuk semua bahasa utama.
Dengan konfigurasi default, titik akhir diakses di bawah awalan A /api/v1 atau /api/v2 . Titik akhir V2 /status adalah /api/v2/status . Jika --web.route-prefix diatur maka rute API diawali dengan itu juga, jadi --web.route-prefix=/alertmanager/ akan berhubungan dengan /alertmanager/api/v2/status .
API V2 masih dalam pengembangan besar dan dengan demikian dapat berubah.
amtool adalah alat CLI untuk berinteraksi dengan API AlertManager. Ini dibundel dengan semua rilis AlertManager.
Atau Anda dapat menginstal dengan:
$ go install github.com/prometheus/alertmanager/cmd/amtool@latest
Lihat semua peringatan saat ini:
$ 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!
Lihat semua peringatan saat ini dengan output yang diperpanjang:
$ amtool -o extended alert
Labels Annotations Starts At Ends At Generator URL
alertname="Test_Alert" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
alertname="Check_Foo_Fails" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
alertname="Check_Foo_Fails" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
Selain melihat peringatan, Anda dapat menggunakan sintaks kueri kaya yang disediakan oleh AlertManager:
$ amtool -o extended alert query alertname="Test_Alert"
Labels Annotations Starts At Ends At Generator URL
alertname="Test_Alert" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
$ amtool -o extended alert query instance=~".+1"
Labels Annotations Starts At Ends At Generator URL
alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
alertname="Check_Foo_Fails" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
$ amtool -o extended alert query alertname=~"Test.*" instance=~".+1"
Labels Annotations Starts At Ends At Generator URL
alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local
Diam dan Peringatan:
$ amtool silence add alertname=Test_Alert
b3ede22e-ca14-4aa0-932c-ca2f3445f926
$ amtool silence add alertname="Test_Alert" instance=~".+0"
e48cb58a-0b17-49ba-b734-3585139b1d25
Lihat keheningan:
$ 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
Kedaluwarsa keheningan:
$ amtool silence expire b3ede22e-ca14-4aa0-932c-ca2f3445f926
Kedaluwarsa semua keheningan yang cocok dengan kueri:
$ 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"
Kedaluwarsa semua keheningan:
$ amtool silence expire $(amtool silence query -q)
Cobalah cara kerja template. Katakanlah Anda memiliki ini di file konfigurasi Anda:
templates:
- '/foo/bar/*.tmpl'
Maka Anda dapat menguji bagaimana template akan terlihat dengan contoh dengan menggunakan perintah ini:
amtool template render --template.glob='/foo/bar/*.tmpl' --template.text='{{ template "slack.default.markdown.v1" . }}'
amtool memungkinkan file konfigurasi untuk menentukan beberapa opsi untuk kenyamanan. Jalur file konfigurasi default adalah $HOME/.config/amtool/config.yml atau /etc/amtool/config.yml
Contoh file konfigurasi mungkin terlihat seperti berikut:
# 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 memungkinkan Anda untuk memvisualisasikan rute konfigurasi Anda dalam bentuk tampilan pohon teks. Anda juga dapat menggunakannya untuk menguji perutean dengan meneruskan set label peringatan dan mencetak semua penerima, peringatan akan cocok dengan yang dipesan dan dipisahkan oleh , . (Jika Anda menggunakan --verify.receivers amtool mengembalikan kode kesalahan 1 pada ketidakcocokan)
Contoh Penggunaan:
# View routing tree of remote Alertmanager
$ amtool config routes --alertmanager.url=http://localhost:9090
# 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
Ketersediaan tinggi AlertManager digunakan di banyak perusahaan dan diaktifkan secara default.
PENTING: Baik UDP dan TCP diperlukan di AlertManager 0,15 dan lebih tinggi agar cluster berfungsi.
- Jika Anda menggunakan firewall, pastikan untuk memutar daftar port pengelompokan untuk kedua protokol.
- Jika Anda menjalankan dalam wadah, pastikan untuk mengekspos port clustering untuk kedua protokol.
Untuk membuat gugusan yang sangat tersedia dari AlertManager, instance perlu dikonfigurasi untuk berkomunikasi satu sama lain. Ini dikonfigurasi menggunakan flags --cluster.*
--cluster.listen-address string: cluster mendengarkan alamat (default "0.0.0.0:9094"; String kosong menonaktifkan mode HA)--cluster.advertise-address string: alamat iklan cluster--cluster.peer : rekan awal (bendera ulangi untuk setiap rekan tambahan)--cluster.peer-timeout nilai: Periode timeout peer (default "15s")--cluster.gossip-interval : Kecepatan propagasi pesan cluster (default "200ms")--cluster.pushpull-interval nilai: Nilai yang lebih rendah akan meningkatkan kecepatan konvergensi dengan biaya bandwidth (default "1m0s")--cluster.settle-timeout Nilai: Waktu maksimum untuk menunggu koneksi cluster untuk menyelesaikan sebelum mengevaluasi pemberitahuan.--cluster.tcp-timeout nilai: Nilai batas waktu untuk koneksi TCP, membaca dan menulis (default "10s")--cluster.probe-timeout nilai: Waktu untuk menunggu ACK sebelum menandai node tidak sehat (default "500ms")--cluster.probe-interval nilai: Interval antara probe simpul acak (default "1s")--cluster.reconnect-interval nilai: Interval antara upaya untuk menghubungkan kembali ke rekan yang hilang (default "10s")--cluster.reconnect-timeout Nilai: lamanya waktu untuk mencoba menyambung kembali ke rekan yang hilang (default: "6h0m0s")--cluster.label : Label adalah string opsional untuk disertakan pada setiap paket dan aliran. Ini secara unik mengidentifikasi cluster dan mencegah masalah komunikasi silang saat mengirim pesan gosip (default: "") Port yang dipilih di bendera cluster.listen-address cluster.peer
Bendera cluster.advertise-address diperlukan jika instance tidak memiliki alamat IP yang merupakan bagian dari RFC 6890 dengan rute default.
Untuk memulai sekelompok tiga rekan di mesin lokal Anda, gunakan goreman dan procfile di dalam repositori ini.
goreman start
Untuk mengarahkan Prometheus 1.4, atau lebih baru, instance ke beberapa peringatan, konfigurasinya di file konfigurasi prometheus.yml Anda, misalnya:
alerting :
alertmanagers :
- static_configs :
- targets :
- alertmanager1:9093
- alertmanager2:9093
- alertmanager3:9093PENTING: Jangan memuat lalu lintas keseimbangan antara Prometheus dan Alertmanagers -nya, tetapi sebaliknya menunjuk Prometheus ke daftar semua AlertManagers. Implementasi AlertManager mengharapkan semua peringatan akan dikirim ke semua peringatan untuk memastikan ketersediaan tinggi.
Jika menjalankan AlertManager dalam mode ketersediaan tinggi tidak diinginkan, pengaturan --cluster.listen-address= Mencegah AlertManager dari mendengarkan permintaan rekan yang masuk.
Periksa halaman yang berkontribusi Prometheus.
Untuk berkontribusi pada antarmuka pengguna, lihat UI/App/Contributing.md.
Lisensi Apache 2.0, lihat Lisensi.