โฐAlerting

Prometheus Alerting, Prometheus'ta tanฤฑmlanmฤฑลŸ bir dizi kurala gรถre alarm oluลŸturmayฤฑ saฤŸlayan bir bileลŸendir.

Prometheus Alerting, metriklerin deฤŸerlerini sรผrekli olarak izler ve tanฤฑmlanan kurala uyan metrikler iรงin alarm รผretir. ร–rneฤŸin, bir kural, bir hizmetin yanฤฑt verme sรผresinin normalde 500 ms'den az olduฤŸunu belirleyebilir ve bu sรผrenin 500 ms'den yรผksek olduฤŸu durumlarda bir alarm รผretir.

Alarm yรถneticisi, tanฤฑmlanan alarm kurallarฤฑnฤฑ gรถzlemler ve alarm durumlarฤฑna gรถre eylemler gerรงekleลŸtirir. ร–rneฤŸin, bir hizmetin yanฤฑt sรผresi belirtilen eลŸiฤŸi aลŸarsa, alarm yรถneticisi bir bildirim gรถnderebilir veya bir dizi eylem gerรงekleลŸtirebilir.

ร–zetle,

Prometheus, belirli aralฤฑklarla birรงok farklฤฑ hizmetin รถlรงรผmlerini toplar ve bu รถlรงรผmleri zaman serileri olarak depolar. Bu รถlรงรผmler, sunucu kaynaklarฤฑnฤฑn kullanฤฑmฤฑ, aฤŸ trafiฤŸi, uygulama performansฤฑ vb. gibi birรงok farklฤฑ alanda olabilir. Prometheus Alerting, bu รถlรงรผmleri kullanarak tanฤฑmlanmฤฑลŸ kural veya koลŸullara gรถre alarm oluลŸturur. ร–rneฤŸin, bir kural, bir sunucunun kullanฤฑlabilir belleฤŸinin %10'dan az olmamasฤฑ gerektiฤŸini belirleyebilir ve bu koลŸul karลŸฤฑlanmadฤฑฤŸฤฑnda bir alarm oluลŸturabilir.

Bu kural ve koลŸullar YAML formatฤฑnda yazฤฑlmaktadฤฑr.

Rule OluลŸturmak;

ร–nceki bรถlรผmde oluลŸturduฤŸumuz rule dosyamฤฑzฤฑn ismini, " recording_and_alerting_rules_1.yml " ลŸeklinde gรผncelliyoruz. Ve iรงerisine aลŸaฤŸฤฑdaki satฤฑrlarฤฑ ekliyoruz.

      - alert: NodeExporterDown
        expr: up{job="node_exporter"} == 0
# rules/recording_and_alerting_rules_1.yml
groups:
  - name: my_rules_1
    rules:
      - record: job:node_cpu_seconds_total:avg_idle
        expr: avg without(cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]))

      - alert: NodeExporterDown
        expr: up{job="node_exporter"} == 0

YAML dosyasฤฑndaki "my_rules_1" adlฤฑ grup iรงerisinde, "NodeExporterDown" adlฤฑ bir alarm tanฤฑmlandฤฑk.

Bu alarm, "up{job="node_exporter"} == 0" PromQL ifadesine gรถre tetiklenecektir. Bu ifade, "node_exporter" adlฤฑ iลŸin รงalฤฑลŸฤฑp รงalฤฑลŸmadฤฑฤŸฤฑnฤฑ kontrol eder. "up" metriฤŸi, bir iลŸin รงalฤฑลŸฤฑp รงalฤฑลŸmadฤฑฤŸฤฑnฤฑ gรถsteren 1 veya 0 deฤŸerini iรงerir. "job" etiketi, รถlรงรผmleri hangi iลŸin saฤŸladฤฑฤŸฤฑnฤฑ belirtir.

EฤŸer "node_exporter" adlฤฑ iลŸ, 0 (รงalฤฑลŸmฤฑyor) deฤŸerini dรถndรผrรผrse, bu alarm tetiklenecektir. Alarm, bir bildirim veya baลŸka bir iลŸlemle yรถnetilebilir.

ร–rnek olmasฤฑ aรงฤฑsฤฑndan, bir sunucumuza baฤŸlanฤฑp node_exporter servisimizi durdurduk. Ardฤฑndan arayรผzรผ kontrol ettiฤŸimizde "firing" kฤฑsmฤฑnda down olan sunucumuzu gรถrebiliriz.

Ek olarak, "ALERTS" sorgusunu รงalฤฑลŸtฤฑrarak, down durumda olan exporter hakkฤฑnda bilgi alabiliriz.

For

groups:
  - name: my_rules_1
    rules:
      - record: job:node_cpu_seconds_total:avg_idle
        expr: avg without(cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]))

      - alert: NodeExporterDown
        expr: up{job="node_exporter"} == 0
        for:  1m

"For" parametresi, bir alarmฤฑn ne kadar sรผre boyunca devam etmesi gerektiฤŸini belirler. Bu parametre, bir alarmฤฑn yanlฤฑลŸ bir ลŸekilde tetiklenmesini engellemeye yardฤฑmcฤฑ olur.

ร–rneฤŸin, "NodeExporterDown" adlฤฑ bir alarm, yukarฤฑdaki รถrnekte olduฤŸu gibi, "up{job="node_exporter"} == 0" PromQL ifadesine gรถre tetiklenecektir. Ancak, "for: 1m" parametresi, alarmฤฑn en az 1 dakika boyunca devam etmesi gerektiฤŸini belirtir.

Bu, "node_exporter" adlฤฑ iลŸin geรงici bir kesintisi nedeniyle bir alarm tetiklenmesini รถnlemeye yardฤฑmcฤฑ olur. ร–rneฤŸin, bir sistem gรผncellemesi sฤฑrasฤฑnda "node_exporter" geรงici olarak durabilir ve bu durumda alarm tetiklenebilir. Ancak, "for" parametresi, bu kesintinin geรงici olduฤŸunu ve alarmฤฑn devam etmesi gerektiฤŸini belirtir.

Bu ลŸekilde, alarm yรถneticisi, alarmฤฑn yanlฤฑลŸ bir ลŸekilde tetiklenmesini รถnleyebilir ve yalnฤฑzca gerรงek bir hizmet kesintisi durumunda bir bildirim gรถnderir.

"up{job="node_exporter"} == 0" koลŸulu saฤŸlandฤฑฤŸฤฑnda hemen bir alarm tetiklenmez. Bunun yerine, alarm durumu "pending" durumuna geรงer ve alarm koลŸulu 1 dakika boyunca saฤŸlandฤฑktan sonra yalnฤฑzca bir alarm tetiklenir.

"node_exporter" adlฤฑ iลŸin geรงici bir kesintisi olduฤŸunda, alarm durumu "pending" durumuna geรงer ve "for" parametresinde belirtilen sรผre boyunca bekler. EฤŸer iลŸteki kesinti 1 dakikadan daha kฤฑsa sรผrerse, alarm tetiklenmez ve yanlฤฑลŸ bir alarm gรถnderilmez.

Labels

groups:
  - name: my_rules_1
    rules:
      - record: job:node_cpu_seconds_total:avg_idle
        expr: avg without(cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]))

      - alert: NodeExporterDown
        expr: up{job="node_exporter"} == 0
        for:  1m

      - record: job:app_response_latency_seconds:rate1m
        expr: rate(app_response_latency_seconds_sum[1m]) / rate(app_response_latency_seconds_count[1m])

      - alert: AppLatencyAbove5sec
        expr: job:app_response_latency_seconds:rate1m >= 5
        for: 2m
        labels:
          severity: critical

      - alert: AppLatencyAbove2sec
        expr: 2 < job:app_response_latency_seconds:rate1m < 5
        for: 2m
        labels:
          severity: warning

"labels", bir alarm iรงin ek bilgi veya metaveri saฤŸlamak iรงin kullanฤฑlan anahtar-deฤŸer รงiftleridir. Bu etiketler, alarm yรถneticisi tarafฤฑndan kullanฤฑlabilen ve alarmฤฑ daha iyi yรถnetmeye yardฤฑmcฤฑ olan ek bilgiler saฤŸlarlar.

ร–rneฤŸin, yukarฤฑdaki Prometheus kurallarฤฑnda, "labels" parametresi kullanฤฑlarak iki farklฤฑ alarm iรงin etiketler tanฤฑmlanmฤฑลŸtฤฑr. "severity" adlฤฑ bir etiket, her iki alarmda da kullanฤฑlmฤฑลŸtฤฑr. Bu etiket, bir alarmฤฑn รถnceliฤŸini veya ciddiyetini belirtir.

"AppLatencyAbove5sec" adlฤฑ alarm iรงin, "severity: critical" etiketi tanฤฑmlanmฤฑลŸtฤฑr. Bu etiket, alarmฤฑn kritik bir durumu iลŸaret ettiฤŸini belirtir. Bu, alarm yรถneticisi tarafฤฑndan daha hฤฑzlฤฑ bir ลŸekilde iลŸlenmesi gereken bir durum olduฤŸunu gรถsterir.

Benzer ลŸekilde, "AppLatencyAbove2sec" adlฤฑ alarm iรงin, "severity: warning" etiketi tanฤฑmlanmฤฑลŸtฤฑr. Bu etiket, alarmฤฑn daha az ciddi bir durumu iลŸaret ettiฤŸini belirtir. Bu, alarm yรถneticisinin bu durumu daha dรผลŸรผk bir รถncelik seviyesinde ele alabileceฤŸini gรถsterir.

Bu ลŸekilde, "labels" parametresi, alarm yรถneticisi tarafฤฑndan alฤฑnacak aksiyonlarฤฑn รถnceliฤŸi veya ciddiyeti hakkฤฑnda ek bilgi saฤŸlar.

Alert Manager

Prometheus Alertmanager, Prometheus ile birlikte kullanฤฑlan aรงฤฑk kaynaklฤฑ bir uyarฤฑ yรถnetim sistemidir. Alertmanager, Prometheus'tan gelen alarm sinyallerini alฤฑr, gruplandฤฑrฤฑr, filtreler ve bunlara yanฤฑt olarak belirli eylemler gerรงekleลŸtirir.

Alertmanager, gelen uyarฤฑlarฤฑ e-posta, SMS, Slack, PagerDuty ve diฤŸer bildirim kanallarฤฑ aracฤฑlฤฑฤŸฤฑyla iletebilir. Ayrฤฑca, uyarฤฑlarฤฑn otomatik olarak tekrarlanmasฤฑnฤฑ veya silinmesini saฤŸlayabilir. Alertmanager, karmaลŸฤฑk alarm durumlarฤฑnฤฑ iลŸlemek iรงin รถzelleลŸtirilebilir ve geniลŸletilebilir bir yapฤฑya sahiptir.

Genel olarak, Prometheus Alertmanager, Prometheus'tan gelen alarm sinyallerini yรถnetmek, filtrelemek ve yanฤฑtlamak iรงin tasarlanmฤฑลŸtฤฑr.

Kurulum,

Kurulacak sunucu รผzerinde "prometheus" kullanฤฑcฤฑsฤฑ ve grubu mevcut deฤŸilse, oluลŸturmalฤฑsฤฑnฤฑz.

sudo groupadd --system prometheus && sudo useradd -s /sbin/nologin --system -g prometheus prometheus
cd /tmp && wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz && tar xzf alertmanager-0.25.0.linux-amd64.tar.gz && cd alertmanager-0.25.0.linux-amd64 && mv -v alertmanager amtool /usr/local/bin/ && mkdir -v /etc/alertmanager && mv -v alertmanager.yml /etc/alertmanager && mkdir -v /etc/alertmanager/data && chown -Rfv prometheus:prometheus /etc/alertmanager/

Yukarฤฑdaki komut ile "Alert Manager" servisini kuruyoruz. ร–zetle yukarฤฑdaki komut ลŸunlarฤฑ yapar;

  1. /tmp dizinine geรงer: "cd /tmp"

  2. Alertmanager'ฤฑn Linux AMD64 sรผrรผmรผnรผ indirir: "wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz"

  3. ฤฐndirilen dosyayฤฑ aรงar: "tar xzf alertmanager-0.25.0.linux-amd64.tar.gz"

  4. ฤฐndirilen dizine geรงer: "cd alertmanager-0.25.0.linux-amd64"

  5. Alertmanager ve amtool dosyalarฤฑnฤฑ /usr/local/bin dizinine taลŸฤฑr: "mv -v alertmanager amtool /usr/local/bin/"

  6. /etc/alertmanager dizinini oluลŸturur: "mkdir -v /etc/alertmanager"

  7. alertmanager.yml dosyasฤฑnฤฑ /etc/alertmanager dizinine taลŸฤฑr: "mv -v alertmanager.yml /etc/alertmanager"

  8. /etc/alertmanager/data dizinini oluลŸturur: "mkdir -v /etc/alertmanager/data"

  9. /etc/alertmanager/ dizinini prometheus:prometheus kullanฤฑcฤฑsฤฑna ve gruba sahip olacak ลŸekilde deฤŸiลŸtirir: "chown -Rfv prometheus:prometheus /etc/alertmanager/"

Alert Manager systemd dosyasฤฑnฤฑ oluลŸturalฤฑm.

vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Prometheus Alertmanager
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/alertmanager \
    --config.file=/etc/alertmanager/alertmanager.yml \
    --storage.path=/etc/alertmanager/data
Restart=always

[Install]
WantedBy=multi-user.target

Bu systemd dosyasฤฑnฤฑ kaydettikten sonra, "systemctl daemon-reload" komutunu kullanarak systemd'ye dosyayฤฑ yeniden yรผklemelisiniz. Daha sonra, "systemctl start alertmanager" komutunu kullanarak Alertmanager hizmetini baลŸlatabilirsiniz. "systemctl stop alertmanager" komutu ile de hizmeti durdurabilirsiniz.

Yukarฤฑdaki adฤฑmlarฤฑ uygulayarak, Alert Manager servisini kurup, รงalฤฑลŸtฤฑrdฤฑk.

Prometheus.yaml dosyamฤฑzda, yeni kurduฤŸumuz alert manager servisini tanฤฑmlayฤฑp servisi restart ediyoruz.

vi /etc/prometheus/prometheus.yml
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - localhost:9093

systemctl restart prometheus komutu ile prometheus servisi restart ediyoruz.

Alert Manager kurulumu tamamlandฤฑ ve รงalฤฑลŸฤฑr vaziyette olduฤŸunu teyit ettik.

Sending email

global:
   smtp_require_tls: false

route:
  receiver: admin

receivers:
- name: admin
  email_configs:
  - to: 'example@gmail.com'
    from: 'example@gmail.com'
    smarthost: smtp.example.com:587
    auth_username: 'example@example.com'
    auth_identity: 'example@example.com'
    auth_password: 'fqkvkumorgaqgkat'
  1. global bรถlรผmรผ: Bu bรถlรผm, Alertmanager iรงin kรผresel yapฤฑlandฤฑrma ayarlarฤฑnฤฑ iรงerir. smtp_require_tls ayarฤฑ, SMTP sunucusuyla iletiลŸim sฤฑrasฤฑnda TLS gerektirilip gerektirilmeyeceฤŸini belirler. Bu รถrnekte, false olarak ayarlandฤฑฤŸฤฑ iรงin TLS gerekli deฤŸildir.

  2. route bรถlรผmรผ: Prometheus tarafฤฑndan gรถnderilen uyarฤฑlarฤฑn nasฤฑl yรถnlendirileceฤŸini belirler. Bu รถrnekte, admin adlฤฑ bir alฤฑcฤฑnฤฑn belirtildiฤŸi receiver รถzelliฤŸi tanฤฑmlanmฤฑลŸtฤฑr.

  3. receivers bรถlรผmรผ: Bu bรถlรผm, admin alฤฑcฤฑsฤฑnฤฑn ayrฤฑntฤฑlarฤฑnฤฑ iรงerir. Bu รถrnekte, e-posta gรถndermek iรงin kullanฤฑlacak SMTP sunucusunun ayrฤฑntฤฑlarฤฑ tanฤฑmlanmฤฑลŸtฤฑr. email_configs รถzelliฤŸi, SMTP sunucusu iรงin gerekli yapฤฑlandฤฑrma ayarlarฤฑnฤฑ iรงerir. to, e-postanฤฑn gรถnderileceฤŸi alฤฑcฤฑnฤฑn e-posta adresini belirtir. from, gรถnderenin e-posta adresini belirtir. smarthost, SMTP sunucusunun adฤฑnฤฑ ve baฤŸlantฤฑ noktasฤฑnฤฑ belirtir. auth_username, SMTP sunucusuna kimlik doฤŸrulama yapmak iรงin kullanฤฑlan kullanฤฑcฤฑ adฤฑnฤฑ belirtir. auth_identity, SMTP sunucusuna baฤŸlanmak iรงin kullanฤฑlan kimlik bilgisini belirtir. auth_password, SMTP sunucusuna baฤŸlanmak iรงin kullanฤฑlan ลŸifreyi belirtir.

annotations

annotations, Alertmanager'daki bir uyarฤฑya ek ayrฤฑntฤฑlar eklemek iรงin kullanฤฑlan bir รถzelliktir. Bu รถzellik, bir uyarฤฑ hakkฤฑnda daha ayrฤฑntฤฑlฤฑ bilgi saฤŸlamak ve alฤฑcฤฑnฤฑn uyarฤฑyฤฑ daha iyi anlamasฤฑna yardฤฑmcฤฑ olmak iรงin kullanฤฑlabilir.

Alertmanager, annotations รถzelliฤŸinde belirtilen tรผm ayrฤฑntฤฑlarฤฑ, bir uyarฤฑnฤฑn gรถsterildiฤŸi arayรผzlerde veya uyarฤฑ e-postalarฤฑnda gรถrรผntรผleyebilir.

groups:
  - name: my_rules_1
    rules:
      - record: job:node_cpu_seconds_total:avg_idle
        expr: avg without(cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]))

      - alert: NodeExporterDown
        expr: up{job="node_exporter"} == 0
        for:  1m

      - record: job:app_response_latency_seconds:rate1m
        expr: rate(app_response_latency_seconds_sum[1m]) / rate(app_response_latency_seconds_count[1m])

      - alert: AppLatencyAbove5sec
        expr: job:app_response_latency_seconds:rate1m >= 5
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: 'Python app latency is over 5 seconds.'
          description: 'App latency of instance {{ $labels.instance }} of job {{ $labels.job }} is {{ $value }} seconds for more than 5 minutes.'
          app_link: 'http://10.90.0.144:8000/'

      - alert: AppLatencyAbove2sec
        expr: 2 < job:app_response_latency_seconds:rate1m < 5
        for: 2m
        labels:
          severity: warning
  • summary: Bu รถzellik, uyarฤฑ hakkฤฑnda kฤฑsa bir รถzet saฤŸlar. Bu รถrnekte, รถzet, "Python uygulamasฤฑ gecikmesi 5 saniyenin รผzerinde" olarak belirtilmiลŸtir.

  • description: Bu รถzellik, uyarฤฑyฤฑ daha ayrฤฑntฤฑlฤฑ bir ลŸekilde aรงฤฑklar. Bu รถrnekte, aรงฤฑklama, belirli bir uygulama รถrneฤŸinin adฤฑnฤฑ ({{ $labels.instance }}), iลŸ adฤฑnฤฑn adฤฑnฤฑ ({{ $labels.job }}) ve รถlรงรผmleme verilerinin deฤŸerini ({{ $value }}) iรงerir. Aรงฤฑklama, "5 dakikadan daha uzun sรผre iรงin {{ $value }} saniye olan {{ $labels.job }} iลŸinin {{ $labels.instance }} รถrneฤŸinin uygulama gecikmesi" olarak belirtilmiลŸtir.

  • app_link: Bu รถzellik, uyarฤฑnฤฑn aรงฤฑklamasฤฑnda bahsedilen uygulamanฤฑn baฤŸlantฤฑsฤฑnฤฑ saฤŸlar. Bu รถrnekte, baฤŸlantฤฑ http://10.90.0.144:8000/ olarak belirtilmiลŸtir.

Alarm 'a annotations kullanarak, detaylฤฑ bilgiler ekledik ve bu ลŸekilde daha mantฤฑklฤฑ uyarฤฑlar gรถndermeye baลŸladฤฑ.

Last updated