Dlaczego zmieniłem Munin na Zabbix?
Długo zabierałem się z tą decyzją, ale w końcu zdecydowałem się. Dlaczego tak długo? Zapraszam do wpisu.
Główną motywacją zmiany z Munin na Zabbix była popularność Zabbixa na forach internetowych czy grupach związanych z tematyką sysops i devops. Oprócz popularności, zaczęło mi brakować funkcjonalności informowania mnie o problemach z serwerem i wirtualnymi maszynami. Ponieważ Munin nie ma (nie miał?) możliwości informowania mnie o problemach, zdarzało się, że po wejściu na dashboard widziałem żółte podświetlenie. Najczęściej problemem była przestrzeń dyskowa. Na szczęście było to tylko ostrzeżenie, ale gdybym nie zdecydował się sprawdzić, nie wiedziałbym, że problem potencjalnie istnieje
Dlaczego zwlekałem ze zmianą?
Zabbix is a mature and effortless enterprise-class open source monitoring solution
Powodem dla którego zwlekałem było słowo enterprise. Instalacja Munina była prosta i miałem gotowy skrypt. Ot apt-get install i skopiowanie kilka pluginów odpowiedzialnych za wyświetlanie poszczególnych parametrów. Jednak Zabbix jest enterprise. Pytanie, czy potrzebuję takiej wielkiej kobyły do zarządzania serwerem i 10 wirtualnymi maszynami? Czy poradzę sobie z konfiguracją?
Nie taki diabeł straszny jak go malują
Jednak postanowiłem spróbować rozwiązania.
Zanim uruchomiłem powyższy stos na serwerze, chciałem zrobić ogólne rozeznanie w Zabbix u siebie lokalnie.
Uruchomiłem u siebie na komputerze i zacząłem klikać. Pomimo wielu opcji konfiguracyjnych, konfiguracja do monitoringu serwera dla wybranych hostów jest stosunkowo prosta ze względu na wykorzystanie template’ów, które definiują jakie dane będą zbierane, jakie wykresy będą wyświetlane oraz jakie rodzaje alertów będą wysyłane.
Instalacja Zabbix z docker-compose
Ponieważ staram się jak najwięcej rzeczy konteneryzować, szukałem rozwiązania Dockerowego. Poniżej przedstawiam gotowego docker-compose dla Zabbix server jeśli ktoś chciałby skorzystać. Zmieńcie tylko hasło do bazy 😉
version: '3.5'
volumes:
zabbix-data-alertscripts:
zabbix-data-externalscripts:
zabbix-data-export:
zabbix-data-modules:
zabbix-data-enc:
zabbix-data-ssh_keys:
zabbix-data-mibs:
zabbix-data-snmptraps:
zabbix-nginx-nginx:
zabbix-nginx-modules:
zabbix-mysql:
services:
mysql:
image: mysql:8.0
restart: unless-stopped
container_name: zabbix-mysql
command:
- mysqld
- --character-set-server=utf8
- --collation-server=utf8_bin
- --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_USER=zabbix
- MYSQL_DATABASE=zabbixdb
- MYSQL_PASSWORD=GENERATE_HERE_STRONG_MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD=GENERATE_HERE_STRONG_MYSQL_ROOT_PASSWORD
volumes:
- zabbix-mysql:/var/lib/mysql:rw
zabbix-server-mysql:
image: zabbix/zabbix-server-mysql
restart: unless-stopped
container_name: zabbix-server-mysql
ports:
- "10051:10051"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- zabbix-data-alertscripts:/usr/lib/zabbix/alertscripts:ro
- zabbix-data-externalscripts:/usr/lib/zabbix/externalscripts:ro
- zabbix-data-export:/var/lib/zabbix/export:rw
- zabbix-data-modules:/var/lib/zabbix/modules:ro
- zabbix-data-enc:/var/lib/zabbix/enc:ro
- zabbix-data-ssh_keys:/var/lib/zabbix/ssh_keys:ro
- zabbix-data-mibs:/var/lib/zabbix/mibs:ro
- zabbix-data-snmptraps:/var/lib/zabbix/snmptraps:rw
environment:
- DB_SERVER_HOST=mysql
- MYSQL_DATABASE=zabbixdb
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=GENERATE_HERE_STRONG_MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD=GENERATE_HERE_STRONG_MYSQL_ROOT_PASSWORD
depends_on:
- mysql
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql:6.2.0-ubuntu
restart: unless-stopped
container_name: zabbix-web-nginx-mysql
ports:
- "8080:8080"
- "443:8443"
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- zabbix-nginx-nginx:/etc/ssl/nginx:ro
- zabbix-nginx-modules:/usr/share/zabbix/modules/:ro
environment:
- ZBX_SERVER_HOST=zabbix-server-mysql
- DB_SERVER_HOST=mysql
- MYSQL_DATABASE=zabbixdb
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=GENERATE_HERE_STRONG_MYSQL_PASSWORD
- MYSQL_ROOT_PASSWORD=GENERATE_HERE_STRONG_MYSQL_ROOT_PASSWORD
depends_on:
- mysql
- zabbix-server-mysql
Podsumowanie
Po testach, czas na wdrożenie. Jak wcześniej wspominałem, dzięki Dockerowi przejście na serwer było banalnie proste.
Jedyna rzecz, która pozostała do zrobienia to skonfigurowanie agentów na poszczególnych wirtualnych maszynach. Ale o tym w następnym wpisie 😀