Custom SQL Queries for Counted Alert KPI Dashboard on Zabbix

By | 9 Aralık 2024

Merhabalar,

Yılın son teknik makalesi ile karşınızdayım.

Bu makalede Zabbix ile izlediğimiz Postgresql Database üzerinden Custom SQL Sorguları kullanarak sorgu metriklerini nasıl izleriz ve bunları kullanarak anlamlı KPI Dashboard tasarlarız konusunu adım adım anlatıyor olacağım.

Öncelikle gereksinimlerimizi kısa özet olarak listeliyorum.

  • Postgresql DB / Monitored by Zabbix Agent 2
  • Custom SQL Queries
  • Right Permissions
  • Item Value Widgets

4 adımda sıraladığım yetenekleri bir araya getirerek Zabbix Global View Dashboard üzerinde yukarıdaki gibi Günlük, Haftalık ve Aylık Toplam Alarm sayılarını veren bir görsel KPI takip ekranı oluşturacağız.

Peki buna neden ihtiyaç duyarız kısaca onu da açıklayalım.

Yeni kurulan bir izleme sisteminde yaygınlaştırma yapılırken ve yapı büyürken gerekli Alert Tuning işlemleri yapılmadığında çok fazla false positive alarm alınır.

Eğer bunları takip etmek isterseniz.

Reports > Top 100 triggers

Sayfasından Host ve Trigger bazlı Count değerini görebilirsiniz. Bu sayfa size tuning yaparken hangi host ve trigger’a odaklanmanız gerektiğini nokta atışı ifade edecek ve işinizi kolaylaştıracaktır.

Ancak günlük, haftalık veya aylık olarak kaç tane alarm oluşmuş bunu rakamsal olarak görmek isterseniz bunun bir cevabı direkt olarak maalesef yok.

Uzun yoldan Problem ekranından yukarıdaki gibi seçimleri yaparak 1 günlük geçmiş alarm sayısını görmeniz mümkün.

Bu şeçimin ardından ekranın en altına indiğinizde seçtiğiniz zaman dilimindeki toplam alarm sayısını rakamsal olarak görebilirsiniz.

Ancak her seferinde günlük kaç adet alarm gelmiş bu şekilde kontrol etmek zor olacaktır.

Tabiki bu rakam haftalık ve aylık seçimlerde Zabbix tarafından 1000+ şeklinde gösterildiğinde net bir sonuç göremeyeceksiniz. Günlük ve saatlik dilimlerde alarm sayısı az iken işinizi görecektir ve net rakamı görebileceksiniz.

İşte bu durumda toplam alarm rakamlarını nasıl izleriz sorusunun cevabını bu makalede bulacaksınız. Şimdi 4 adımdan oluşan işlemler serisine geçelim.

Step-1 / Postgresql DB Monitored by Zabbix Agent 2

Burada Zabbix tarafından Agent2 kullanılarak izlenen bir Postgresql Database ihtiyacımız bulunuyor. Biz Zabbix’in kendi Postgresql Database’ini Agent2 ile izliyoruz burada onu kullanacağız.

Postgresql Database Monitoring Zabbix Agent2 dokümanına buradan ulaşabilirsiniz.

Ayrıca Udemy Eğitimimde detaylı olarak işlediğim bir konudur. Eğitimden de takip edebilirsiniz.

ls -l /etc/zabbix/zabbix_agent2.d/plugins.d/

Zabbix Agent2 ile Postgresql Database izleme yapmak için ilgili plugin‘in kurulduğundan yukarıdaki gibi emin olunuz.

Step-2 / Custom SQL Queries

Bu template içinde Custom Queries özelliğini bulup kullanacağız.

cat /etc/zabbix/zabbix_agent2.conf | grep CustomQueriesPath

Dokümanda CustomQueriesPath olarak belirtilen yolun Agent2 Configurasyon dosyasında olduğundan bahsediliyor bunu kontrol etmek için yukarıdaki komutu uyguluyorum.

Herhangi bir sonuç döndürmediği için bu tanımın Agent2 Configurasyon doyasında olmadığını anlıyorum.

cat /etc/zabbix/zabbix_agent2.d/plugins.d/postgresql.conf | grep CustomQueriesPath

Ardından Plugin Configurasyon dosyasında olup olmadığını yukarıdaki komut ile kontrol ediyorum.

CustomQueriesPath parametresinin bu dosyada tanımlı olduğunu görüyorum ve herhangi bir tanımlama ve path belirtilmemiş default olarak duruyor.

Herhangi gibi bir editör ile ilgili dosyayı açıyorum ve path tanımı yapıyorum.

nano /etc/zabbix/zabbix_agent2.d/plugins.d/postgresql.conf

Tanımını yaptığım /var/lib/zabbix path var olmadığı için dizin oluşturuyorum.

nano /var/lib/zabbix/daily_alert_count.sql

Ardından yukarıdaki komut ile ilk Custom SQL Query tanımlamamı bu dizin altına yapıyorum.

SELECT COUNT(*)
FROM events
WHERE clock >= extract(epoch from date_trunc('day', now()))
AND value = 1;

Bu query için kısa bir bilgilendirme yapmak gerekirse;

Zabbix alarmlarını “events” tablosunda tutar. Bir alarm olduğunda Value değeri 1 olur ve oluşan event tabloya kaydedilir.

Aynı event Clear veya Resolved olduğunda yeni bir kayıt açılarak bu sefer Value değeri 0 olarak kayıt edilir. Herbir event için unique bir eventid değeri mevcuttur. Tek bir event için Problem ve Resolved durumunu objectid değerinden takip etmek mümkündür.

Bizim 1 değerlerini saymamız aslında events tablosuna problem olarak yazılmış tüm olayları saymamız anlamına gelmektedir.

Eğer derinlemesine kontrol etmek isterseniz Zabbix Database üzerinden events tablosunu inceleyebilirsiniz.

Tanımlamamız bittiğinde Zabbix Agent2 servisini restart ediyoruz.

Ardından Zabbix üzerindeki Host ekranına geçiyorum. Agent2 ile izlediğim Database sunucusunun item‘larında Name kısmına Custom yazdığımda disable olarak gelen Template üzerinde tanımlanmış Custom queries item‘ını görüyorum. Kullanacağımız item bu olacak.

Bu item’dan bir tane Clone alıyorum.

Ardından Name kısmında isimlendirmesini yapıyorum ve Key yazan parametreyi düzenlemek için bir notepad üzerine alıyorum ve düzenliyorum.

“{$PG.DATABASE}” = Bizim query’mizin sorgu yapacağı DB olduğu için zabbix olarak değiştiriyorum.

“” = Sondaki boş çift tırnak alanına ise /var/lib/zabbix dizini altında oluşturduğumuz daily_alert_count.sql query’e verdiğimiz ismi veriyorum.

Daha net anlaşılması için yukarıdaki görseli de ekliyorum.

Şimdi bu Item için test vakti !

Postgresql monitoring kullanıcısı olan “zabbix_monitor” user’ı events tablosunda query çalıştırmaya yetkili değil. Bu yüzden yukarıdaki gibi hata alıyorum.

Step-3 / Right Permissions

Gerekli izinleri vermek için Postgresql konsola bağlanıyorum. “zabbix_monitor” kullanıcısına events tablosunda SELECT izni tanımlıyorum.

Tekrar test ettiğimde count değerinin database üzerinden yazdığım query ile okuyabiliyorum.

Devamında gelen datanın Type türünü Numeric olarak değiştiriyorum. Bu ilerde numeric alarm yazmak için işimizi kolaylaştıracaktır. (Örnek 15dk içinde 500+ alarm oluşması gibi)

.*"count":([^?<=}]*).*

Gelen ham data “[{“count”:554}]” şeklinde olduğu için bunun içerisinden sadece rakamı parse etmek için bir Regex tanımı yapıyorum ve bunu Preprocessing alanına ekliyorum.

Tekrar test ediyorum.

Her şeyin çalıştığını gördükten sonra Daily Alert Count item’ı ekliyorum.

Enable olarak ilk Custom Query eklemiş olduk.

Şimdi Lates data ekranına gidiyorum ve gelen data‘yı kontrol ediyorum.

Data akışının başarılı bir şekilde geldiğini gözlemliyorum.

Buraya kadar başarılı bir şekilde geldiğimize göre yine bu yöntemi kullanarak oluşturduğumuz farklı Custom SQL Query‘leri de ekleyerek istediğimiz sorguları Postgresql DB üzerinden çekip monitor edebiliriz.

Ben 2 tane daha ekliyorum. Haftalık ve Aylık alarm sayılarını da başka query’ler ile count ediyorum.

Step-4 / Item Value Widgets

Monitor ettiğim bu dataları Zabbix Item Widget üzerinde görselleştiriyorum ve ana ekrana ekliyorum.

Birkaç gün kontrol ediyorum ve günlük gelen alarm sayısı ile karşılaştırıyorum. Tespitlerim sırasında monitor edilen alert count sayılarında herhangi bir anormallik gözlemlemedim.

Alert Count KPI değerlerini bu şekilde ana ekrana alarak yapının ürettiği alarm sayılarını göz önüne almış ve farkedilir olmasını sağlamış olduk.

Bu sayede monitoring uzmanları bu rakamları sürekli göreceği için alarm sayısını azaltmak için gerekli tuning çalışmalarını yapmak isteyecektir.

Sağlıklı bir izleme sisteminde en önemli unsur Alarm Gürültüsü dediğimiz durumun azaltılmasıdır. Ne kadar az ve doğru alarm alabilirsek yapımızı o kadar rahat izleriz.

Kimse izleme sisteminin “Yalancı Çoban” olmasını istemez 😊

Yeni yılın herkese gönlündeki istekleri ile birlikte sağlık ve huzur getirmesi dileği ile. 🎄 🎄 🎄

Hoşçakalın.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir