Zabbix -Monitoring IT bez taśmy klejącej Paweł Tomala Barcamp 15 czerwca 2015
Agenda Czym jest Zabbix i po co nam to? Przegląd architektury i dostępnych funkcjonalności Wydajność systemu Scenariusze rozproszonego monitoringu High Availability Zabbix API - jak zasilać Zabbixa danymi z zewnętrznych systemów
Czym jest Zabbix i po co nam to? Rozwiązanie do monitoringu typu All-in-One Access Control Application Development Business Analytics Capacity Configuration Inventory Security Możemy wykorzystać Zabbixa w 99,9% przypadków w jakiejkolwiek dziedzinie związanej z IT Open Source GPL v2 nie ma ukrytych kosztów i wersji Enterprise -> http://www.zabbix.com/license.php
Download Virtual appliance Instalacja pakietów: RHEL, CentOS, Debian, Ubuntu REPO http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabb ix-release-2.4-1.el6.noarch.rpm http://www.zabbix.com/download.php Instalacja ze źródeł
Małe co nieco na temat historii rozwoju Zabbixa źródło informacji www.zabbix.com
Przegląd architektury i dostępnych funkcjonalności Komponenty Zabbixa Zabbix server Baza danych: MySQL oraz PostgreSQL Zabbix Web UI Zabbix proxy server Zabbix Java Gateway do wykorzystania tylko jako passiveproxy można skonfigurować tylko jeden gateway per Zabbix server lub Zabbix proxy Zabbix Sender commandline owe utyliszczesłużące do wysyłania performance u do serwera Zabbixa
Wydajność Mierzona w NVPS New Values Per Second Single Zabbix node (według oficjalnej informacji na stronie producenta) 25 000 hostów 100 metryk sprawdzanych co minutę Large environment 32 000+ hostów http://blog.zabbix.com/scalable-zabbix-lessonson-hitting-9400-nvps/2615/
Wydajność c.d Co robić gdy mamy problem z wydajnością? parametryzacja bazy danych strojenie ilości procesów pooler a oraz trapper a strojenie rozmiaru internal cache a partycjonowanie tabeli z danymi historycznymi wyłączenie housekeeper a analiza częstotliwości zbierania danych analiza złożoności trigger ów
Zalety proxy Zabbixa Pełni rolę data collectora zatem zdejmuje nam część load u z serwera Zabbixa Doskonale się sprawdza w środowiskach zamkniętych Konfiguracja proxy per vlan
Active/Passive Zabbix Proxy Passive Zabbix Proxy Placed usually in a lower level network security zone (e.g. DMZ) Wymaga tylko jednego otwartego portu TCP z serwera Zabbixa Sama nie inicjuje żadnej komunikacji Active Zabbix Proxy Placed usually in a higher network security zone Podobnie jak proxa pasywna wymaga tylko jednego portu otwartego ale w kierunku serwera Zabbixa Serwer Zabbixa nie inicjuje żadnej komunikacji
Konfiguracja serwera proxy Zabbixa https://bignosekates.wordpress.com/2013/06/04/installing-zabbix-proxy/ zabbix_proxy.conf ### Option: ProxyMode # Proxy operating mode # 0 - proxy in the active mode # 1 - proxy in the passive mode # # Mandatory: no # Default: ProxyMode=1 ### Option: DBName # Database name. DBName=zabbix ### Option: DBUser # Database user. Ignored for SQLite. DBUser=zabbix ### Option: DBPassword # Database password. Ignored for SQLite. DBPassword=zabbix ### Option: DBSocke # Pathto MySQL socket. DBSocket=/var/lib/mysql/mysql.sock # Option: DBPort # DBPort=3306
Zabbix API Podstawowe źródło wiedzy -> https://www.zabbix.com/documentation/2.4/ manual/api Najczęściej wykorzystywane metody: Get Create Update delete
Zabbix API część praktyczna create hostgroup get hostgroup get template create host exists host get host update host delete host
Create Hostgroup example my $json2 = { jsonrpc => '2.0', method => 'hostgroup.create', params => { "name" => "Barcamp servers" }, "id" => "1", "auth" => $authid };
Get Hostgroup example my $json2 = { jsonrpc => '2.0', method => 'hostgroup.get', params => { "output" => "extend", "filter" => { "name" => [ "Barcamp servers" ] } }, "auth" => $authid, "id" => 1 };
Get Template example my $json2 = { jsonrpc => '2.0', method => 'template.get', params => { "output" => "extend", "filter" => { "host" => [ "Template OS Linux" ] } }, "auth" => $authid, "id" => 1 };
Create Host example my $json2 = { jsonrpc => '2.0', method => 'host.create', params => { "host" => "Barcamp Linux server", "interfaces" => [ { "type" => "1", "main" => "1", "useip" => "1", "ip" => "192.168.3.1", "dns" => "", "port" => "10050" } ], "groups" => [ { "groupid" => "10" } ], "templates" => [ { "templateid" => "10001" } ], }, "id" => "1", "auth" => $authid };
Exists Host example my $json2 = { jsonrpc => '2.0', method => 'host.exists', params => { "host" => "Barcamp Linux server" }, "auth" => $authid, "id" => 1 };
Get Host example my $json2 = { jsonrpc => '2.0', method => 'host.get', params => { "output" => "extend", "filter" => { "host" => [ "Barcamp Linux server" ] } }, "auth" => $authid, "id" => 1 };
Update Host example my $json2 = { jsonrpc => '2.0', method => 'host.update', params => { "hostid" => "10111", "proxy_hostid" => "10105" }, "auth" => $authid, "id" => 1 };
Delete Host example my $json2 = { jsonrpc => '2.0', method => 'host.delete', params => [ "10111" ], "auth" => $authid, "id" => 1 };
Eny Kłeszczyns?