Rozszerzanie agentów Zabbix

W tej sekcji przedstawiono instrukcje krok po kroku dotyczące rozszerzania funkcjonalności agenta Zabbix za pomocą parametru użytkownika.

Poniższy przykład pobiera liczbę instrukcji wykonanych przez serwer MySQL. Opisane kroki dotyczą zarówno agenta Zabbix, jak i agenta Zabbix 2.

Ten przykład ilustruje działanie parametrów użytkownika. W przypadku monitorowania środowiska produkcyjnego MySQL rozważ użycie predefiniowanych szablonów MySQL, które nie wymagają parametrów użytkownika.

Krok 1: Przygotowanie dostępu do MySQL

agent działa jako użytkownik systemu operacyjnego zabbix. Nie używaj konta MySQL root, ponieważ może ono korzystać z uwierzytelniania opartego na gniazdach, co może uniemożliwić agentowi nawiązanie połączenia. Zamiast tego utwórz dedykowanego użytkownika MySQL:

CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '<password>';

Zapisz dane uwierzytelniające w pliku, który jest dostępny do odczytu wyłącznie dla użytkownika zabbix, na przykład /etc/zabbix/mysql_monitor.cnf (ścieżka zależy od systemu operacyjnego i metody instalacji Zabbix):

[client]
user=zbx_monitor
password=<strong password>

Ustaw właściciela i uprawnienia pliku:

sudo chown zabbix:zabbix /etc/zabbix/mysql_monitor.cnf
sudo chmod 600 /etc/zabbix/mysql_monitor.cnf

Przekaż ten plik jawnie za pomocą --defaults-extra-file (musi to być pierwsza opcja przekazana klientowi MySQL), zamiast polegać na ~/.my.cnf, ponieważ zmienna środowiskowa HOME demona może być nieustawiona lub mieć inną wartość, niż oczekujesz. Jeśli MySQL używa niestandardowej ścieżki gniazda, dodaj do tego samego pliku wiersz socket=.

Krok 2: Napisanie polecenia

Napisz niestandardowy skrypt lub polecenie pobierające wymagany parametr i upewnij się, że działa ono w takich samych warunkach jak demon agenta.

Poniższe polecenie zwraca liczbę instrukcji wykonanych przez serwer MySQL:

/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

Możesz przetestować polecenie jako użytkownik zabbix; powinno ono wyświetlić pojedynczą liczbę:

sudo -u zabbix sh -c "/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e \"SHOW GLOBAL STATUS LIKE 'Questions'\" | /usr/bin/awk '{print \$2}'"

Krok 3: Dodaj polecenie do konfiguracji Zabbix agent

Zamiast edytować główny plik konfiguracyjny agent (zabbix_agentd.conf lub zabbix_agent2.conf), utwórz osobny plik w katalogu uwzględnionym przez parametr Include. Oddzielne pliki są łatwiejsze w zarządzaniu i jest mniejsze prawdopodobieństwo, że zostaną zmienione podczas aktualizacji pakietów.

Na przykład utwórz plik /etc/zabbix/zabbix_agentd.d/mysql.conf (/etc/zabbix/zabbix_agent2.d/mysql.conf dla Zabbix agent 2) z następującą zawartością:

UserParameter=mysql.questions,/usr/bin/mysql --defaults-extra-file=/etc/zabbix/mysql_monitor.cnf -N -B -e "SHOW GLOBAL STATUS LIKE 'Questions'" | /usr/bin/awk '{print $2}'

mysql.questions to unikalny klucz pozycji. Musi być unikalny w obrębie konfiguracji agent.

Parametr można przetestować, uruchamiając Zabbix agent z flagą -t. Test należy uruchomić jako użytkownik zabbix i określić plik konfiguracyjny, jeśli nie znajduje się on w domyślnej lokalizacji:

Dla Zabbix agent:

sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t mysql.questions

Dla Zabbix agent 2:

sudo -u zabbix zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -t mysql.questions

Oczekiwany wynik zawiera liczbę, na przykład:

mysql.questions                               [t|4567]

Krok 4: Przeładuj i przetestuj parametr użytkownika

Przeładuj parametry użytkownika z pliku konfiguracyjnego, uruchamiając następujące polecenie:

Dla Zabbix agent:

sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R userparameter_reload

Dla Zabbix agent 2:

sudo zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -R userparameter_reload

Uruchom polecenie jako root lub jako użytkownik systemu operacyjnego, który uruchamia agenta.

Alternatywnie uruchom ponownie agenta, aby zastosować zmiany konfiguracji.

Możesz przetestować parametr względem uruchomionego agenta za pomocą narzędzia zabbix_get, na przykład z serwera Zabbix:

zabbix_get -s <IP address> -k mysql.questions

W tym przypadku <IP address> to adres IP hosta, na którym działa agent, z którym łączy się zabbix_get. Adres IP hosta, na którym działa zabbix_get, musi być wymieniony w parametrze Server agenta.

Aby ten test zadziałał, agent musi akceptować kontrole pasywne (w przypadku Zabbix agent parametr StartAgents nie może mieć wartości 0). Jeśli agent jest skonfigurowany wyłącznie do kontroli aktywnych, pomiń ten test i po wykonaniu ostatniego kroku sprawdź pozycję w sekcji Monitoring > Latest data.

Krok 5: Utwórz pozycję

Utwórz nową pozycję na monitorowanym hoście z kluczem pozycji mysql.questions.

Wybierz typ pozycji: Zabbix Agent lub Zabbix Agent (active).

W przypadku Zabbix agent (pasywnego) adres serwera Zabbix lub proxy musi być wymieniony w parametrze Server agenta. W przypadku Zabbix agent (aktywnego) parametr ServerActive musi określać serwer Zabbix lub proxy, a parametr Hostname agenta musi dokładnie odpowiadać nazwie hosta skonfigurowanej we frontendzie.

Wybierz Typ informacji pozycji. agent zawsze zwraca wartość jako tekst; Typ informacji określa, jak Zabbix interpretuje i przechowuje tę wartość po wykonaniu wszystkich kroków wstępnego przetwarzania.

W przypadku surowego licznika skumulowanego wybierz Numeric (unsigned). Aby zmierzyć liczbę instrukcji na sekundę, wybierz Numeric (float) i dodaj krok wstępnego przetwarzania Change per second.