Furkan KAPAN
System Engineer at detera

Phone

+1 234 567 890

Email

furkan.kapan@fkteknoloji.com

Website

http://furkankapan.com

Address

Yunus Emre Cd., No: 50

Social Links

Bilgi Bankası

Grafana’nın Prometheus ve Alertmanager ile Entegrasyonu

Grafana, Prometheus ve Alertmanager ile birlikte, Kubernetes kümelerini izlemek için yaygın olarak kullanılan bir çözümdür.

Grafana’nın Prometheus ve Alertmanager ile Entegrasyonu

Grafana, Prometheus ve Alertmanager ile birlikte, Kubernetes kümelerini izlemek için yaygın olarak kullanılan bir çözümdür. Bu stack (yığın) evrensel olarak uygulanabilir ve hem bulut hem de bare-metal kümelerde kullanılabilir. İşlevseldir, kolayca entegre edilebilir ve ücretsizdir; bu da onun popüler olmasının başlıca nedenidir.

Bu yazıda Grafana’yı Alertmanager ile nasıl entegre edeceğinizi, Grafana üzerinden sessizleştirmeleri (silences) nasıl yöneteceğinizi, Alertmanager’ı uyarıları engelleyecek şekilde nasıl yapılandıracağınızı ve bu yapılandırmayı gelecekteki senaryolar için kodla nasıl saklayabileceğinizi göstereceğim. Aşağıda açıklanan adımları takip ederek şunları öğreneceksiniz:

  • Kod ile Grafana’ya Alertmanager veri kaynağı eklemek

  • Alertmanager’ı, uyarıları düzgün bir şekilde görselleştirmek için yapılandırmak

  • Alertmanager yapılandırması aracılığıyla bazı uyarıları bastırmak


Gereksinimler

kube-prometheus-stack Helm chart’ı (sürüm 39.5.0) kurulmuş bir Kubernetes kümesine ihtiyacınız olacak. Mevcut kümenizi kullanabilir veya test ortamı oluşturabilirsiniz. 


Giriş

v8.0 sürümünden itibaren Grafana, çeşitli harici kaynaklardan alınan metrikler ve loglar üzerinde işlem yapabilen entegre bir uyarı sistemiyle birlikte gelmektedir. Aynı zamanda Grafana, varsayılan olarak Alertmanager ve Prometheus ile uyumludur – bu da Kubernetes kümelerini izlerken sektörün büyük bir kısmının faydalandığı bir kombinasyondur.

Alertmanager’ı, Grafana’nın yerel uyarı sistemine tercih etmemizin sebeplerinden biri, yapılandırmalarımız kodla tanımlandığında otomasyonu daha kolay hale getirmesidir. Örneğin, Grafana tarafından yönetilen görselleştirme panellerini kodla tanımlayabilir ve tekrar kullanabilirsiniz, ancak bu oldukça zor olacaktır. Öte yandan Alertmanager, Prometheus ile birlikte kube-prometheus-stack Helm chart’ında gelmektedir – biz de Kubernetes kümelerini izlemek için bu kaynağı kullanıyoruz.


İstersen bunu bir blog yazısı formatına uygun hale getirip sitende paylaşabileceğin şekilde düzenleyebilirim. İstiyor musun?

Grafana’nın Alertmanager ile Entegrasyonu

Yapmamız gereken ilk şey, Grafana’nın Alertmanager ile entegrasyonunu yapılandırmaktır.
Bunu otomatik hale getirmek için, aşağıdaki kodu kube-prometheus-stack values dosyasına ekleyin:

grafana:
  additionalDataSources:
   - name: Alertmanager
     type: alertmanager
     url: <a class="c-link" tabindex="-1" href="http://monitoring-kube-prometheus-alertmanager:9093/" target="_blank" rel="noopener noreferrer" data-stringify-link="http://monitoring-kube-prometheus-alertmanager:9093" data-sk="tooltip_parent" data-remove-tab-index="true">http://monitoring-kube-prometheus-alertmanager:9093</a>
     editable: true
     access: proxy
     version: 2
     jsonData:
       implementation: prometheus

Eğer sizin ortamınızda farklıysa, url: anahtarının değerini özelleştirin.
Kodu kümenize deploy edin ve ardından Grafana veri kaynaklarında kontrol edin.

1_grafana_data_sources.png

Ardından aktif uyarıları kontrol edin – en az bir varsayılan uyarı görmelisiniz.

2_alertmanager_alerts.png

Alertmanager Yapılandırması Ekleme

Mevcut entegrasyon sırasında bazen uyarıların (alert) yinelenmesinden kaçınmak mümkün olmayabilir, ancak çoğu durumda bu mümkündür. Uyarıları yinelenmeden görebilmek için Alertmanager’ı doğru şekilde yapılandırmanız gerekir. Bu da her uyarı için tek bir receiver (alıcı) tanımlamak anlamına gelir.

Bizim örneğimizde basit tutmak için iki alıcı ekleyeceğiz:

  • blackhole – önemsiz (sıfır öncelikli) ve gönderilmesine gerek olmayan uyarılar için

  • default – bilgi (info), uyarı (warning) ve kritik (critical) seviyesindeki uyarılar için

default alıcısı (receiver) gerekli tüm bildirim kanallarına sahip olmalıdır. Bizim örneğimizde iki kanal bulunuyor: telegram ve slack.

Alertmanager yapılandırmasını otomatik hale getirmek için, aşağıdaki kodu kube-prometheus-stack yaml dosyasına ekleyin:

alertmanager:
  config:
    global:
      resolve_timeout: 5m
    route:
      group_by: [...]
      group_wait: 9s
      group_interval: 9s
      repeat_interval: 120h
      receiver: blackhole
      routes:
        - receiver: default
          group_by: [...]
          match_re:
            severity: "info|warning|critical"
          continue: false
          repeat_interval: 120h
    receivers:
      - name: blackhole
      - name: default
        telegram_configs:
          - chat_id: -000000000
            bot_token: 0000000000:00000000000000000000000000000000000
            message: |
              'Status: &lt;a href="<a class="c-link" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent">https://127.0.0.1</a>"&gt;{{ .Status }}&lt;/a&gt;'
              '{{ .CommonAnnotations.message }}'
            api_url: <a class="c-link" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent">https://127.0.0.1</a>
            parse_mode: HTML
            send_resolved: true
        slack_configs:
          - api_url: <a class="c-link" href="https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000" data-sk="tooltip_parent">https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000</a>
            username: alertmanager
            title: "Status: {{ .Status }}"
            text: "{{ .CommonAnnotations.message }}"
            title_link: "<a class="c-link" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent">https://127.0.0.1</a>"
            send_resolved: true

Kodu kümenize deploy edin ve aktif uyarıları kontrol edin – uyarıların yinelenmemiş olması gerekir.

3_alertmanager_alerts_2.png

Bazı durumlarda uyarıları silence (sessizleştirme) yöntemiyle devre dışı bırakmak isteriz, ancak bazen bunu kod üzerinden yapmak daha iyidir. Silence geçici bir önlemdir. Kalıcı değildir ve eğer boş bir kümeye yeniden deploy yaparsanız tekrar oluşturmanız gerekir. Buna karşın, uyarıları kod üzerinden devre dışı bırakmak daha sürdürülebilir bir çözümdür ve tekrarlanan deploy’larda kullanılabilir.

Silence ile uyarıları devre dışı bırakmak oldukça basittir – sadece Silences sekmesini açın ve istediğiniz süreyle bir silence oluşturun, örneğin 99999d. Eğer Alertmanager için kalıcı depolama (persistent storage) etkinleştirilmişse, bu silence kalıcı olacaktır.

4_alertmanager_create_permanent_silence.png

Bu bölüm ağırlıklı olarak ikinci duruma değinmektedir, çünkü silence’ı kod olarak eklemek kolay bir iş değildir. Biz, varsayılan olarak her zaman tetiklenen Watchdog alert’i aracılığıyla iki test uyarısını devre dışı bırakacağız.

Aşağıdaki kodu kube-prometheus-stack yaml dosyasına ekleyin:

inhibit_rules:
      - target_matchers:
          - alertname =~ "ExampleTwoAlertToInhibit|ExampleOneAlertToInhibit"
        source_matchers:
          - alertname = Watchdog

Ortaya çıkan kod aşağıdaki gibi görünmelidir:

alertmanager:
  config:
    global:
      resolve_timeout: 5m
    route:
      group_by: [...]
      group_wait: 9s
      group_interval: 9s
      repeat_interval: 120h
      receiver: blackhole
      routes:
        - receiver: default
          group_by: [...]
          match_re:
            severity: "info|warning|critical"
          continue: false
          repeat_interval: 120h
    inhibit_rules:
      - target_matchers:
          - alertname =~ "ExampleAlertToInhibitOne|ExampleAlertToInhibitTwo"
        source_matchers:
          - alertname = Watchdog
    receivers:
      - name: blackhole
      - name: default
        telegram_configs:
          - chat_id: -000000000
            bot_token: 0000000000:00000000000000000000000000000000000
            message: |
              'Status: &lt;a href="<a class="c-link" tabindex="-1" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent" data-remove-tab-index="true">https://127.0.0.1</a>"&gt;{{ .Status }}&lt;/a&gt;'
              '{{ .CommonAnnotations.message }}'
            api_url: <a class="c-link" tabindex="-1" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent" data-remove-tab-index="true">https://127.0.0.1</a>
            parse_mode: HTML
            send_resolved: true
        slack_configs:
          - api_url: <a class="c-link" tabindex="-1" href="https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000" data-sk="tooltip_parent" data-remove-tab-index="true">https://127.0.0.1/services/00000000000/00000000000/000000000000000000000000</a>
            username: alertmanager
            title: "Status: {{ .Status }}"
            text: "{{ .CommonAnnotations.message }}"
            title_link: "<a class="c-link" tabindex="-1" href="https://127.0.0.1/" target="_blank" rel="noopener noreferrer" data-stringify-link="https://127.0.0.1" data-sk="tooltip_parent" data-remove-tab-index="true">https://127.0.0.1</a>"
            send_resolved: true

Kodu kümenize deploy edin. Ardından aşağıdaki kod ile test uyarıları ekleyin:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: test-rules
  namespace: monitoring
spec:
  groups:
    - name: "test alerts"
      rules:
        - alert: ExampleAlertToInhibitOne
          expr: vector(1)
        - alert: ExampleAlertToInhibitTwo
          expr: vector(1)

Test uyarıları ile birlikte kodu kümenize deploy edin ve test kurallarının rules listesinde varlığını kontrol edin. Test uyarılarını görmek için 1–3 dakika bekleyin; bu uyarılar bastırılmış (suppressed) olmalıdır.

5_alertmanager_alerts_3.png

Sonuç

Bu makalede, Grafana’nın Alertmanager ile entegrasyonunun genel bir örneğini inceledik, Grafana üzerinden silences (sessizleştirmeleri) nasıl yöneteceğimizi öğrendik ve Alertmanager aracılığıyla uyarıları kod ile nasıl bastırabileceğimizi gösterdik.

Artık uyarılarınızı kolay ve tekrarlanabilir bir şekilde, minimum kod kullanarak yönetebileceksiniz. Temel kod örnekleri projelerinizde kullanılmaya hazırdır ve herhangi bir yapılandırmaya uygulanabilir.

 

9 min read
Ağu 23, 2025
By Furk4n .ai
Paylaş

yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar işaretlendi *

Related posts

Ağu 23, 2025 • 3 min read
Kubernetes CLI Araçları

Kubernetes’in benimsenmesi arttıkça, her gün K8s kümeleriyle etkileşim...

Ağu 23, 2025 • 10 min read
Konteyner Güvenliğini Artırmak: İmzalı ve Şifrelenmiş İmajlar

Konteyner imajları – çalıştırılacak konteynerler için önceden yapıland...

Ağu 23, 2025 • 2 min read
Crunchy PostgreSQL ile Kurumsal Veritabanı Yönetimi ve Kubernetes HA Cluster Kurulumu

Crunchy PostgreSQL ile kurumsal düzeyde güvenli ve yüksek erişilebilir...