Zabbix SNMP OID Discovery ile Custom Template Oluşturma

By | 20 Mart 2022

Merhaba,

Bu makalemizde Zabbix üzerinde SNMP OID Discovery özelliğini kullanarak monitör etmek istediğimiz ve cihaza ait herhangi bir Template bulamadığımız cihaz için kendimiz bir Template hazırlıyor olacağız.

Senaryomuz şu şekilde olacak.

Elimizde monitör etmek istediğimiz 2 Adet Dell EMC SC 5020 Storage cihazı bulunmakta. Zabbix hazır Template’ler içinde ile bu cihaza ait bir Template bulunmuyor! Community üzerinde de araştırdığımızda yine hazırlanmış bir Template bulamadığımız için kendimiz bu işi yapıyor olacağız.
Storage cihazları kritik olduğu için öncelikle Power Supply, Fan ve Controller gibi en kritik donanımlarının yanı sıra üzerindeki Disk durumları ve Volume durumlarının da monitör edilmesi gerekmektedir.

Ben konunun net anlaşılması için oluşturacağımız Template üzerinde cihaza ait Fan’ların monitör edilmesini örnekleyeceğim. Devamında siz ihtiyacınıza göre bu Template üzerine eklemeler yapabilirisiniz.

Sözü fazla uzatmadan işlemlere bakalım.

2 adet Storage cihazımız Zabbix üzerinde SNMP protokolü ile ekli durumda. Mevcut gelen hazır Template’lerden Network Generic Device SNMP ile eşleştirilmiş ve bu Template’nin kabiliyetleri kadar monitoring imkanımız bulunmakta.

Latest data sekmesinden ilgili Storage cihazlarıma baktığımda aslında sadece cihazın Ethernet interface durumunu ve ayakta olup olmadığını görebiliyorum. Bu Template bize derinlemesine bir monitoring imkanı sunmuyor.

Şimdi Template sekmesinden kendi template oluşturma işlemimize başlayalım.

Create template diyerek devam ediyorum.

Template adımı, Visible Name ve group tanımlamasını yapıyorum. Description kısmına Template’i tanımlayacak bir ufak not düşüyorum.

Template oluştu. Üzerinde hiçbir Host, Item, Trigger, Dashboard vs bulunmuyor.

Şimdi Monitor etmek istediğimiz cihaza ait OID değerlerini bulmaya geldi. Bu noktada ciddi zaman harcamanız gerekiyor ve bulduğunuz OID’leri bir SNMP tester ile kontrol etmeniz gerekmekte. Ben buradaki linkte cihaza ait SNMP listesini buldum ve cihaz üzerinde gelen değerleri kontrol ettim.

Gördüğünüz gibi “1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.4” numaralı OID ile cihazdan SNMP protokolü ile Walk yaptığımızda bize cihaz üzerindeki Fanların adlarını getirdi.

Şimdi bu Fanların durumlarına bakalım.

Aynı şekilde bu sefer “1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.3” numaralı OID ile sorgu yaptığımda bana “1” değerini gönderiyor. Peki bu 1 ne anlama geliyor?

Onuda “scCtlrFanStatus” yazan fan durumunun adını meşhur OID sorgulama sitesi olan Circitor üzerinden kontol ettiğimde. ScStatus tablosunda olduğunu görüyorum.

İlgili tabloda bu OID için Operational Status için 3 değer dönebileceğini bunların 1/2/3 sırası ile up/down/degraded olduğunu görüntülüyorum.

Yani bizim storage cihazımızın 4 adet fanı olduğunu ve şuanda çalışır durumda olduklarını cihaz üzerinden SNMP OID kullanarak teyit etmiş olduk. Peki şimdi tüm bunların bir Template içinde olması ve bizim için alarm üretecek şekilde çalışması nasıl olacak ?

Evet bu konu bolca doküman okumak ve deneme yapmaktan geçiyor. Şimdi hem faydalandığım dokümanları hem de bunun nasıl olduğunu Zabbix üzerinde açıklayalım.

Öncelikle bu OID bilgilerini Template’imizin açıklama kısmına koyalım ki hem bulmamız kolay olsun hem de bu Template ile çalışacak kişilerin işine yarasın. 😎

Öncelikle Template üzerinde bir Discovery kuralı tanımlamamız gerekiyor. Bunu neden yapıyoruz; Fan, Power Supply yada neyi monitör etmek istiyorsak bunların tek tek eklemek yerine otomatik olarak yapacağız ve Fan Monitor etmek istiyorsak bu Discovery kuralı ile cihaz üzerindeki tüm Fanlar otomatik olarak keşfedilecek ve izlemeye alınacak. Tüm bu kurguyu Power Supply ve cihaz üzerindeki Disk monitör etme içinde kurgularsanız baya kolaylık olacaktır. Create discovery rule diyerek devam ediyorum.

Bu kısımda toplamda 4 alana müdahale edeceğiz.

  1. Name: Fan Module Discovery (Adını veriyorum, kendi oluşturduğum bir isim)
  2. Type: Mutlaka SNMP Agent seçili olmalı. (Cihazı SNMP ile monitör ettiğimiz için)
  3. Key: Fan.Module (Bu tanımlama tamamen benim yazdığım bir şey siz başka isimde verebilirsiniz)
  4. SNMP OID: discovery[{#FANNAME},1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.4,{#FANSTATUS},1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.3]

Yazıyorum, bunun nereden biliyorum diye sorabilirsiniz. İlgili doküman burada.

Biz 2 adet OID kullanacağız bunlardan bir tanesi Fan Adını veriyor diğeri ise Fan Durumunu veriyordu. Bunu bende dokümandan kopya çekerek

  • {#FANNAME},1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.4
  • {#FANSTATUS},1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.3

Yukarıdaki gibi 2 tane makro ardına ilgili OID değerlerini yazarak discovery[ ] tanımlamasının içine yerleştirdim. {#FANNAME},{#FANSTATUS} makroları benim oluşturduğum isimlendirmedir siz başka isimde verebilirsiniz. OID değerleri ise ilgili makro ardında geliyor. Yani {#FANNAME} makrosunun ardından Fan Name OID’si gelmelidir. Bu makroları daha sonra birçok noktada kullanıyor olacağız.

Son olarak Update interval süresini 5m olarak ayarlıyorum. Bu ayarlama discovery’nin 5 dk da bir çalışacağı anlamına geliyor. Fan için çok kısa ancak bizim hızlı sonuç almamız için şimdilik bu şekilde ayarlamış oldum. 1h aslında ideal olacaktır. Fan Modulü için her 5dk da bir discovery yapmaya gerek yok.

Add diyerek discovery tanımlamamı yapıyorum.

Artık oluşturduğum DELL-SC5020 isimli template üzerinde bir adet Fan Module Discovery adında discovery kuralı tanımlanmış durumda ancak hiçbir Item prototip’ı yok. Discovery çalışıp birşeyler bulacak ancak bunlar herhangi bir Item’a dönüşmez isek bulduklarının hiçbir anlamı olmayacak. O yüzden Item Prototypes kısmına tıklıyorum.

Create item prototype diyerek bu discovery için bir Item oluşturmaya başlıyorum. Burada önemli olan nokta  oluşturduğunuz her discovery için bir Item prototype oluşturmamızdır! Bir discovery ile birden çok OID discover edebiliriz ancak her bir yakalamak istediğimiz için ayrı ayrı Item prototype oluşturmak gereklidir.

Bu kısımda yine aşağıdaki alanları dolduruyoruz.

  1. Name: Fan Module Name: {#FANNAME} (Bir isim veriyorum ve yanına OID ile gelecek olan makroyu yazıyorum.)
  2. Type: SNMP seçili olacak çünkü onunla monitoring yapıyoruz.
  3. Key: Fan.Status [{#FANNAME}] (Her bir ITEM key birbirinden benzersiz olmalı o yüzden {#FANNAME} makrosunu kullanarak bunu benzersiz kılıyorum.)
  4. Type of information: Numeric(unsigned) (Fan durumundan dönecek değer rakam olduğu için bunu seçiyorum)
  5. SNMP OID: 1.3.6.1.4.1.674.11000.2000.500.1.2.16.1.3.{#SNMPINDEX} (Buraya Fan Status bilgisini getirecek olan OID yazılıyor ve sonuna {#SNMPINDEX} ile her bir Fan eşleşmesini bulması sağlanıyor. Dokümanda bu şekilde tarif edilmiş.)

Item prototype tanımlamamız bu kadar. İsim olarak discover edilen her bir Fan Modülü kendi adı ile gelecek ve eklenecek. Item status olarak ise o Fan Modülüne ait status bilgisi monitör edilecek. Add diyerek bitiriyorum.

Fan Module Name adı ile tanımlamam yukarıdaki gibi tamamlandı. Artık bir discovery kuralım ve bir tane de Item prototype’ım mevcut.

Şimdi ilgili Storage cihazlarıma oluşturduğum bu Template’i linkleyelim. Her iki Storage’i de seçiyorum ve Mass update diyerek topluca bu değişikliği yapıyorum.

Link Template > Replace > Kendi Template’imi ekliyorum ve Update diyorum.

İlgili Storage cihazları artık benim oluşturduğum Template ile eşleşti.

3-5 dk bekledikten sonra her iki cihaz içinde 4 adet Item geldiğini görüyorum.

Latest data sekmesinden gelen bu Item adlarına ve Value değerlerine bakıyorum. Her bir Storage cihazı için 4 adet Fan Modülü buldu ve ekledi.

Sadece bir Storage seçiyorum ve Fan 1-2-3-4 olarak görüntülüyorum. Last Value yazan kısımda 1 yazması bu Fan Modüllerinin çalıştığı anlamına geliyor.

Herhangi bir tanesinin üzerinde tıklıyorum ve Configuration yazan kısımdan ayarlarına gidiyorum.

Bu ekranda Dicovery ile gelen tüm Item değerlerini görüntülüyorum. Bu kısımda mavi ile belirttiğim yer discovery ile bulunan 2. değer ve bu Fan Modülü de 2. Modül.  Aşağı kısımdan Test yazan yere tıklıyorum.

Get Value diyorum ve Storage üzerinden bu değeri manuel çağırıyorum.

Gelen değer 1 yani ilgili OID için bize Value olarak gösterdiği burda manuel bir kontrol yapmış olduk. Yani herhangi bir sorun yaşasaydık burada bir hata dönecekti ve bizde onun peşinden gidip çözmeye çalışacaktık.

Şimdi Latest data ekranında yazan bu 1 değerlerinin anlamının Fan Modülünün çalıştığı anlamına geldiğini söylemiştim bunu biz biliyoruz ancak başka kişiler bu 1 değerinin ne anlama geldiğini anlamayacaktır. O yüzden şimdi bunu görsel olarak Value Map özelliğini kullanarak düzeltelim.

Template düzenleme ekranına geliyorum ve Value Mapping yazan kısımdan düzenleme işlemine geçiyorum.

Add diyerek bir Map ekliyorum.

Map adına Status diyorum ve 1-2-3 değerlerine karşılık görmek istediğim görsel değerleri yazıyorum. Bizim OID değerimizin sonucu 1(up), 2(down) ve 3(degreded) buna göre düzenliyorum.

Update diyerek Value Map kaydını tamamlıyorum.

Şimdi oluştuduğum Template üzerinde Item Prototypes kısmına geçiyorum ve oluşan Item’lar kullanması için aşağıdan Value Map Select diyorum.

Oluşturduğum Value Map Status isimli Map’i seçiyorum.

Update diyorum ve kaydediyorum.

Bunun hızlı bir şekilde etki etmesi için Storage cihazlarından birini seçiyorum ve Discovery objesini Execute now diyerek hemen uyguluyorum. Yoksa 3-5 dk bekleyince de uygulayacaktır bu uygulama Discovery içindeki update zamanına göre olacak ancak ben hemen olsun diye bu şekilde yaptım.

Tekrar Latest data kısmına geldiğimde artık Up yazısını da görüyorum. Bu şekilde gayet okunaklı olmuş oldu.

Şimdi görsel olarak Item objemize bir tanımlama yapalım ki bu template üzerinde başka monitoring OID tanımlamaları yaparsak ileride bulması kolay olsun. Tag kısmına tıklıyorum.

Name: component, Value:Fan diyorum ve kaydediyorum.

Tekrar latest data sekmesine geldiğimde artık bir tag value değerimde oldu ve yanında yazıyor. İleride bu template üzerinde Volume, Disk vs gibi objeler geldiğinde belki 100’lerce Item olacak ve bu tagler ile kolayca birbirinden ayırmış olacağız.

Şimdi sıra geldi bu Fan Module Item’larına birer Trigger tanımlamaya. Evet Item’larımız var her bir Storage cihazı için 4 adet Fan Modülü bulduk ve çalıştığını görüyoruz ancak çalışmaz ise bize alarm gelmesini istiyoruz bunun için bu Item’lara birer Trigger prototype tanımlamamız gerekiyor ki alarm alabilelim. Create trigger prototype diyerek Trigger tanımlamaya başlıyorum.

Burada da yine dinamik bir alarm gelmesi için oluşturduğum {#FANNAME} makrosunu kullanıyorum ki alarm oluştuğunda ilgili Fan Modul adı dinamik olarak gelsin yani Fan 1 arızası gibi en başta yazsın istiyorum. Severity olarak Disaster seçiyorum ve Add diyerek bir expression eklemeye geçiyorum.

Select prototype diyorum ve kendi oluşturduğum prototype’lar içinden seçim yapmak üzere devam ediyorum.

Zaten bir tane Fan Module Name adında prototype objemiz var ve onu seçerek ilerliyorum.

Fuction olarak last() function kullanıyorum ve result kısmına 2 değerini yazıyorum. Bu şu anlama geliyor eğer Item 2 değerini dönderiyorsa Trigger tetiklensin ve Alarm gelsin. Insert diyerek bu condition’u ekliyorum.

Aynısını kopyalıyorum.

Araya bir (or) mantıksal ifadesi koyarak diğerini de yapıştırıyorum ve bu sefer ona 3 değerini yazıyorum. Expression constructor yazan kısımdan bu condition değerlerini test etmeye geçiyorum.

Test yazan kısma tıklıyorum.

Value yazan kısma ile olarak 1 yazıyorum ve Test diyorum, dönen False ile Trigger kontrolünü yapıyorum Trigger tetiklenmiyor 1 için doğru sonuç vermiş oldu.

Bu sefer 2 yazarak deniyorum ve Trigger tetiklendi yani or sonucunda True değerini aldık neden çünkü or condition için bir tanesi sağlanmış oldu.

Aynı denemeyi 3 değeri içinde kontrol ediyorum ve çalıştığını görüyorum.

En son Trigger description alanına hem global makrolardan hem de anlaşılabilir bir açıklama yazıyorum ve Add diyerek Trigger tanımlamamı yapıyorum.

Oluşturduğum Trigger başarılı bir şekilde eklendi.

Aynı şekilde Host üzerinde uygulandı mı diye beklememek için Host discovery objesini Execute diyerek tetikliyorum.

Tetikleme başarılı.

Artık Host üzerinde geldiğimde her bir Fan Modülü için birer tane Trigger objesi de oluşmuş durumda ve Tetiklenmeye hazır.

İçerisine girdiğimde Value olarak OK statüsünde çünkü Fan Modülleri çalışıyor.

Diğer Storage için tetikleme yapmıyorum ve 2 dakika sonra onunda Trigger objelerinin oluştuğunu görüntülüyorum.

Artık bu Template’i XML, YAML veya JSON olarak dışarı alabilirim ve başka bir yerde kullanabilirim yada yedek olarak muhafaza ederim. Yarın bir gün ihtiyaç olursa başka bir yerde import ederek kullanırım.

Bu makalemizin sonuna geldik, uzun bir yazı dizisi oldu ve burada oluşturduğumuz Template içine sadece Fan Modüllerini ekledik. Daha birçok obje bu şekilde discover edilerek bu Template’e kazandırılabilir ve zenginleşirilebilir.

Bu objeler;

  • Fan Modüle (Tamamladık)
  • Power Supply Modülü
  • Controller Modülü
  • Volume Objeleri
  • Fiziksel Diskler ve sağlık durumları

Yukarıdaki gibi Storage için en kritik tüm objeler bu Template içine Discovery ile eklenir ise ve tüm Trigger’ları hazırlanırsa kedinize ait Custom bir Template yapmış olursunuz.

Hazırladığım Template indirmek ve kendi ortamınızda göz atmak isterseniz buradan indirebilirsiniz. İndirdikten sonra farklı kaydet diyerek .xml formatında kaydederek Zabbix Template ortamınıza import edebilirsiniz.

Başka bir makalede görüşmek üzere.

4 thoughts on “Zabbix SNMP OID Discovery ile Custom Template Oluşturma

  1. ismail

    merhabalar yazılarınızın devamını bekliyorum teşekkür ederim. çok faydalı bir kaynak oluşturuyorsunuz.

    Reply
  2. Cevat Kılıç

    Süper Ya eline sağlık bizde bu olayı çözmeye çalışıyorduk.

    Reply
  3. ismail

    hocam merhabalar sizin adımları yaptım tek farklı siz fanları kontrol etmişsiniz ben port trafiğini kontrol etmek istiyorum ve sıcaklık değerini sizin hostlara discovery rule u ekleyene kadar normal fakat siz eklediğinizde değerler gelmiş fakat ben eklediğimde boş değer geliyor hiç sekme oluşturmuyor. snmp oid value leri doğru.

    Reply
  4. Samet

    Çok değerli bir yazı 3 gündür bu olayı arıyordum. Aynı model cihazımız var birde çok güzel bir örnek oldu.
    Şimdi diğer componentleride ekleyeceğim. İyi Çalışmalar. Diğer yazılarınızı bekliyoruz.

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.