Zabbix
Transkrypt
Zabbix
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
„passive proxy” – można skonfigurować tylko jeden
gateway per Zabbix server lub Zabbix proxy
– Zabbix Sender – commandline’owe utyliszcze sł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
# Path to 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? ☺