Zabbix Nedir? Nasıl Kullanılır…

Birol EMEKLİ
Devops Türkiye☁️ 🐧 🐳 ☸️
6 min readJul 20, 2019

--

Merhabalar,

Bu yazımda sizlere zabbix hakkında biraz bilgi ve deneyimlerimi paylaşacağım.

Zabbix, C ve PHP tabanlı, uç düğümlerdeki ağ hizmetleri, sunucular, servisler ve ağ donanımlarını izlemek için Alexei Vladishev tarafından geliştirilmiştir.

Günümüzde git gide büyüyen yapılardan dolayı sistem yöneticileri için bu uç düğümleri kontrolü büyük bir zorluk haline gelmiştir. Herhangi bir uç düğümde meydana gelen bir aksaklık, sorunla bir süre sonra bir şekilde karşılaşılması ile haber olunur hale gelmiştir. Çünkü sistemler ve servisler artık çok genişledi ve takip edilmesi zor bir halde…

İşte bu noktada zabbix işimize gerçektende çok yarayan bir tool. Zabbix üzerine tanımladığınız hostlarda, servislerde yada ağ cihazlarında herhangi bir anormallik tespit etmesi durumunda geliştirildiği sistem itibari ile bir çok aksiyonu sizin belirlediğiniz çerçevede gerçekleştirme sağlamaktadır.

Zabbix kurulumu nasıldır konusuna değinmeyeceğim çünkü artık kurulum yapmaya gerek kalmadan appliance olarak dağıtımları bulunmaktadır. Buradan appliance sürümlerine ulaşabilirsiniz. Böylece kurulum aşamalarından kurtulmuş olursunuz :)

Zabbix

Zabbix çalışma mantığını yukarıdaki resim üzerinden tanımlamaya çalışırsak.

İtem: Bilgi toplana modüldür ve her item farklı bir servis hakkında bilgi toplar. Ör: mysql bilgisini bir item alır, cpu bilgisini başka bir item
Trigger: Tetikleyici dersek direk bir çağrışım yapabilir. İtem'ın aldığı veride sizin belirlediğiniz durumlarda bir anormallik tespit edilirse trigger devreye girer.Ör: Mysql servisi için cevap veriyorsa 1 değeri döndürülür, fakar servis cevap vermiyorsa 0 değeri döner. Bu durumda siz mysql için 0 değeri aldığında bir trigger yazarsanız, servis cevap vermediğinde trigger devreye girmiş olur.Problem: Yukarıdaki örnekte belirtmiş olduğum problem modülünü içermektedir
Action: Bu modül ise servisin cevap vermemesi durumunda zabbix nasıl bir tepki versin onu belirliyoruz. Burada action modülü kullanmaz isek zabbix içeriğine girip triggerları izleyerek durumları kontrol edebiliriz. Fakat bir item'a bağlı bir trigger çalışmış ise bu trigger'a bağlı bir action gerçekleştirilip bu sorunun çözülmesi gerekmektedir.Action modülü bu sorunlara;
1 - Mail atarak
2 - SMS atarak
3 - Komut çalıştırarak müdahale edebilmektedir.

Gelin şimdi client makine üzerindeki mysql servisinin zabbix ile nasıl monitoring yapılacağını birlikte yapalım.

Ben appliance kurulumu yaptığım zabbix ile ilgili ayarlarla uğraşmadım direk ip adresi ile web üzerinden erişim sağlıyorum.

Giriş yaptığımda beni bu şekilde bir sayfa karşılıyor. Burada ilk olarak host ekleme işlemini gerçekleştireceğim fakat bunun için client makine üzerinde öncelikle zabbix agent kuralım ve daha sonra burdan bağlantıyı gerçekleştirelim.

Zabbix Server -> 172.16.4.134  Ubuntu
Web Client -> 172.16.4.184 Centos 7
Komut satırı işlemleri CLİENT üzerinde yapılacaklartır...wget https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpmsudo yum install zabbix-release-4.0-1.el7.noarch.rpmsudo yum install zabbix-agent

Yukarıdaki kurulumlardan sonra client makine üzerinde zabbix agent yapılandırmasına geçebiliriz.

vi /etc/zabbix/zabbix_agentd.conf#Dosyasında gerekli ayarları girelim.
Server= 172.16.4.134
ServerActive=172.16.4.134
#Restart edelim
systemctl restart zabbix-agent

Yukarıdaki ayarlardan sonra artık client makine üzerinde zabbix agent restart ederek işlemi tamamlamış oluyor. Burada agent server tarafından gelecek isteği bekler. Server client üzerine hangi item için istek yollarda agent o servis ile ilgili bilgileri porttan iletir.

Şimdi zabbix üzerinden host tanımlamasına geçelim.

Zabbix web arayüzünden Configuration -> Hosts bölümüne giriyoruz. Kurmuş olduğum clienti tanıtacağız.

Zabbix Hosts Ekleme
Zabbix Hosts Ekleme

Bu bölümden Host sekmesinde bir isim veriyorum ve client makinenin IP adresini belirtiyorum. Default olarak 10050 portunu kullanıyor değiştirmediğim için öyle bırakıyorum. Daha sonra Templates sekmesinden hangi servisleri dinleyeceksem onları seçiyorum ve add diyorum. Daha sonra tekrar Hosts sekmesine tıklıyorum.

Hosts Listesi

Burada ilk bir kaç dk yeşil olmayabilir istek ve cevap geldikten sonra artık yeşil olarak gözükmektedir. Burada Web Server yanında bazı Items Trigger’lar seçilen template ile otomatik gelmektedir. Buradan etkileşim kurarak actionlar oluşturulabilir.

Şimdi mysql servisinin durumunu dashboard üzerinde gösterelim. İlk olarak burada client üzerinde mysql’de kullanıcı oluşturmamız ve bunu agent tarafında göstermemiz gerekmektedir.

mysql> create user 'zabbix'@'localhost' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT USAGE ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY 'Password';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

Yukarıda mysql üzerinde zabbix kullanıcı oluşturma aşaması gözükmektedir. Şimdi agent tarafında mysql ile ilişkili dosyayı oluşturalım.

vi /etc/zabbix/zabbix_agentd.conf.d/userparameter_mysql.conf# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
# Key syntax is mysql.size[<database>,<table>,<type>].
# Database may be a database name or "all". Default is "all".
# Table may be a table name or "all". Default is "all".
# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
# Database is mandatory if a table is specified. Type may be specified always.
# Returns value in bytes.
# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

Eğer bu dosya yoksa oluşturalım ve yukarıdakini içerisine olduğu gibi yapıştıralım. Bu dosya içerisinde /var/lib/zabbix belirtilen yere mysql erişim bilgilerini ekleyelim.

vi /var/lib/zabbix/.my.cnf[client]
user = zabbix
password = Password
[mysqladmin]
user=zabbix
password=Password

#Restart edelim
systemctl restart zabbix-agent

Bu dosyayı oluşturduktan sonra agenti restart ediyorum. Bu aşamalardan sonra Web Server hostu üzerinde Items bölümüne girdiğimizde MySQL ile ilgili alanları inceleyelim.

MySQL İtems Konfigürasyon Öncesi

Yukarıda gözükeceği üzere MySQL items konfigürasyon öncesi bilgi alamadığı için uyarı vermektedir.

Server ve client iletişim kurduktan sonraki hali yukarıdaki gibi olacaktır. Mysql items artık bilgi toplamaya başlamış ve uyarı kaybolmuştur.

Şimdi iletişim sağlandığına göre dashboard kısmına geçebiliriz.

Monitoring -> All Dashboard -> Create Dashboard diyerek yeni bir dashboard oluşturalım. Daha sonra dashboard üzerinde Add widget ile dashboard ekranını görselleştirelim.

Buda sonun resmi olsun :) Bu şekilde MySQL servisini durumunu görselleştirmiş ve geçmişe yönelik takibini sağlamış olduk. Buraya oluşturduğumuz templateler ile ilgili tüm grapları ekleyebiliriz. Sağ tarafta ise ram kullanımını göstermektedir.

Bu yazıda zabbix hakkında genel bir bilgi ve basit bir giriş yaparak client üzerindeki bir servisin takibini yapmış bulunduk. Trigger ve action kısımlarına da girecektim fakat yazı daha fazla uzamasın onu bir başka yazıda anlatacağım.

Bir başka yazımda görüşmek ümidiyle

HOŞÇAKALIN :)

--

--