Selamlar arkadaşlar bu yazımda sizlerle Zabbix 7.0 üzerinde UserParameter kullanacağız ve sonrasında Action Operation Script’i ile oluşan Trigger’ı çözüme kavuşturacağız. Bu sayede Zabbix’in erişemediği ve kontrol edemediği program vs. kullanılıyorsanız kontrolünü sağlayabilecek ve uzak sunucularda Script çalıştırarak çözüme kavuşturabileceksiniz.
İlk olarak UserParameter’den bahsetmek istiyorum. Temel monitoring yeteneklerine ek olarak, özelleştirilmiş ve kullanıcı tarafından tanımlanan komutları çalıştırarak, ek metrikler toplamamızı sağlayan bu özelliktir. Zabbix ile izleyemediğiniz özel uygulamaları bu sayede monitor edebileceksiniz.
Zabbix’in kendi dökümanını kontrol etmek isterseniz buraya tıklayarak ulaşabilirsiniz.
İlk olarak nasıl kullanıldığını açıklamak istiyorum : /etc/zabbix/zabbix-agentd.conf dosyasında UserParameter satırını buluyoruz ve daha sonra aşağıdaki kurala uygun parametrelerimizi yazıyoruz.
UserParameter=<key>,<command>
– Basit Shell kod çalıştırmak için :
UserParameter=service_check,systemctl status nginx
– Script çalıştırmak isterseniz : ayrıca python, powershell gibi programların scriptlerinide çalıştırabilirsiniz.
UserParameter=service_check,/path/to/script.sh
UserParameter=service_check,python /path/to/external_script.py
– Dinamik olarak parametrelerinizi ayarlayabilirsiniz :
UserParameter=service_check[*],systemctl status $1
Dinamik olarak kullandığınız zaman parametre alanını Zabbix iteminizde belirtirken, Item key kısmına service_check[nginx] yazmalısınız.
Bunların örneklerini vereceğim zaten aşağıda o yüzden ilerleyen kısımlarda göreceğiz.
Şimdi Zabbix Agent tarafında neler yapıyoruz buna geldi sıra. Conf dosyamızı ayarlayalım.
İlk olarak Monitoring etmekte olduğumuz kullanıcımızın Ubuntu cihazına gidiyoruz ve nano /etc/zabbix/zabbix_agentd.conf dosyasına gidiyoruz ve UserParameter alanına giderek aşağıdaki satırları ekliyoruz.
> UserParameter=service.check1, systemctl status nginx | grep "Active:" | awk '{print $2, $3}'
> UserParameter=service.check2[*],systemctl status $1
> UserParameter=service.check3,sh /run/zabbix/check_service.sh
Bu üç parametreyi girmemizin sebebi 3 örneğide karşılaması amacıyladır. Kodlarımızı açıklamamız gerekirse;
Nginx programının status’ünü aldıran birinci satırda Active: kelimesinden sonra durumdaki değerleri almasını belirtiyoruz. Örnek olarak active (running) şeklinde. İkinci kısımda ise [*] yerine koyulacak değeri $1 ile eşleşmesini ve o değerin status bilgisini dönmesini istiyoruz. Üçüncü örnekte ise /run/zabbix/ altında bulunan check_service.sh script’inin çalışmasını istiyoruz. Buradaki önemli konu ise kesinlikle Script’iniz bu klasör altında olmalı, aksi halde Zabbix kullanıcısı ile izinli olmayan bir klasörde işlem yaptığınız Permission Denied hatası alıyorsunuz.
Check_service.sh script’imizin içerisine bu komudu yazdım aynı şekilde sizde yazabilirsiniz.
#! /bin/bash
systemctl status nginx | grep "Active:" | awk '{print $2, $3}'
Şimdi ise Zabbix tarafında Item’larımızı ekleyelim.
Name alanını açıklayıcı bir ad ile doldurun, Type olarak Zabbix Agent seçin ve Key kısmına UserParameter kısmına girdiğimiz değerleri girin. Service.check1 ve Service.check3 için aynı şekilde ekleme yapacaksınız.
Service.check2 için ise [] arasına nginx ya da istediğiniz servisleri yazıyorsunuz ve bu şekilde Item eklemelerimizi yapıyoruz.
Latest data kısmında aldığımız datalar bu şekilde olacaktır.
Aynı şekilde bu Service Item’ına bağlı bir Triggerım var oda aşağıdaki kurala sahiptir.
> last(/SistemDostu - UserParameter/service.check1,#1)<>"active (running)"
Bu sayede servisi durdurduğumuz zaman PROBLEM üretecek ve bize bilgi verecektir.
Şimdi ise bir adet Script ekleyecek ve bu Script’i Trigger Action olarak kullanacağız.
Alerts > Scripts > Create Script yolunu izliyoruz.
Açılan New Script penceresinde Name alanına açıklayıcı bir ad giriyoruz. Scope kısmında ise Action Operation seçiyoruz. Type kısmında Script seçiyor ardından Execute on kısmında Zabbix Agent seçiyoruz ve Commands kısmında sudo systemctl restart nginx yazıyoruz ve Add tuşu ile ekliyoruz.
Belirlemiş olduğumuz özelliklerde Script’imiz eklendi.
Alerts > Trigger Actions > Create Action yolunu izliyoruz.
Açılan New Action penceresinde Name alanına action’ımıza bir ad veriyoruz ve Conditions alanında bulunan Add tuşuna basıyoruz. Enabled yanındaki kutucuğun işaretli olduğunu kontrol edin. Görselde Add tuşunuda işaretlemişim ancak burada ona basmıyoruz yanlış olmuş orası. 🙂
New Condition penceresinde Type olarak Trigger seçiyoruz, Operator olarak Equals, Trigger Source kısmında ise Template seçiyoruz. Trigger kısmında ise Select tıklayarak Template’imizi ve içerisinde atama yapacağımız Trigger’ı buluyor ve ekliyoruz. Trigger Source alanında host yaparsak, belirli bir host içerisindeki Template ile atanan Trigger’ıda seçebiliriz ancak ben Template’e uyguladım ki eklenen her Host’ta PROBLEM oluştuğu zaman çalışması için. Ve son olarak Add tuşuna basarak Condition’ı Ekliyoruz.
Daha sonra New Action sayfasından ayrılmadan Operations kısmına geçiyoruz ve Operations alanı altında bulunan Add butonuna basıyoruz.
Operations details penceresinde ise Operation açılır menüsünden oluşturduğumuz Script’imizi seçiyoruz ve Target List altında bulunan Current host kutucuğunu işaretliyoruz. Diğer alanları değiştirmeden Add tuşuna basıyoruz.
Artık New Action penceresinde Operations kısmında ayarımızı gördüğümüze göre Add tuşu ile Trigger Action’ımızı ekleyebiliriz.
Aynı şekilde ayrıntıları ile eklendiğini görebilirsiniz.
Şimdi UserParameter’den farklı bir alan olduğundan dolayı Zabbix Agent ve Ubuntu tarafında yapacağımız ayarlamalar geldi sıra.
> sudo visudo
Komutu yardımıyla /etc/sudoers dosyasına girmelisiniz. Ancak bu dosyayı nano vb. programlarla manuel düzenlemeyin, bir yanlış düzenlemede tüm yetkilerden olabilirsiniz.
> zabbix ALL=(ALL) NOPASSWD:/bin/systemctl restart nginx
Satırını eklemeli ve komudumuzu zabbix kullanıcısı çalıştırırken şifresiz bir şekilde çalıştırabilsin.
Daha sonrasında ise nano /etc/zabbix/zabbix_agentd.conf dosyasına girmeli ve aşağıdaki satırları eklemelisiniz.
> AllowKey=system.run[*]
> DenyKey=system.run[*]
Ve tabi bu işlemleri yaptıktan sonra aşağıdaki kodu çalıştırmayı ihmal etmeyin. 🙂
> systemctl restart zabbix-agent
Sonrasında ise gidip servisi kapatın ve PROBLEM oluşmasını sağlayın. Oluşan PROBLEM’in Actions kısmına bastığınızda Remote Command Executed satırını göreceksiniz.
O Satırla birlikte PROBLEM’in RESOLVED olduğunu ve Trigger’ın kapandığını göreceksiniz.
Yani bu sayede Oluşan Trigger’ın Action kısmına bir Script ekledik ve bu sayede cihazımızda Service Restartlama kodunu çalıştırarak kendiliğinden kapanan servisi o anda yeniden başlatarak çalışır duruma getirdi.
Bir yazımında daha sonuna geldim arkadaşlar. Umarım yararlı bir yaz olmuştur. Bana destek vermek isterseniz YouTube üzerinde bulunan SistemDostu kanalıma abone olabilir ya da bir tık sağ ve solda olan alanlara basabilirsiniz. 😉 Hepimize kolay gelsin.
Dostum selamlar,
Senin yazılar sayende baya yol aldım, hatta DB farklı, server farklı frontend farklı 6.4 kurup 6 aydır aktif kullanmaya başladım ama, bu şekilde farklı sunucular kurup 7.0 versiyona geçiş planlayınca bir türlü başaramadım, her seferinde onlarca hata verdi. Bu konuda bireysel desteklerini rica ediyor, başarılarını memnuniyetle takipteyim.
Selam ve sevgilerimle.
Selamlarlar, yararlı olabildiysem ne mutlu umarım daha çok konuda ileride de yardımcı olabilirim. Ancak uzun zamandır Zabbix üzerinde çalışamadım ve dediğiniz konuya şu aşamada hakim değilim. İlerleyen zamanlarda umarım talebinizi gerçekleştirecek bir yazı yazabilirim. Şu aşamada internet üzerinden araştırma yapmalı ve çözüm yolları bulmalısınız diye düşünüyorum. Kusruma bakmayın lütfen iyi günler. 🙂