Deploy Zabbix menggunakan Docker

zabbix docker

Untuk melakukan deploy Zabbix menggunakan docker, caranya sangat mudah dan sederhana. Sebelum melakukannya, sebaiknya kita sudah ada pemahaman tentang dasar mengenai docker agar kita lebih mudah memahami konsep apa yang akan kita kerjakan.

Kelebihan menggunakan konsep kontainerisasi adalah kita dapat melakukan deploy dengan lebih cepat sehingga kita bisa menggunakan service nya dengan lebih cepat juga. Dalam hal resource juga dapat lebih efisien karena kita tidak perlu melakukan instalasi OS secara berulang jika dalam satu host terdapat banyak service yang harus berjalan.

Deploy menggunakan Cara Manual

1. Buat network untuk menghubungkan antara container satu dengan yang lainnya untuk membangun satu service zabbix monitoring. Sebagai contoh, nama network disini adalah jaringan.

$ docker network create --driver bridge jaringan

2. Pull image yang dibutuhkan untuk zabbix monitoring. Contoh disini kita menggunakan MySQL sebagai database server nya.

$ docker image pull mysql:8.0
$ docker image pull zabbix/zabbix-java-gateway:alpine-6.2-latest
$ docker image pull zabbix/zabbix-server-mysql:alpine-6.2-latest
$ docker image pull zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest

3. Buat container-nya. Disini argumen yang digunakan harus saling sinkron, karena masing-masing container akan saling berhubungan.

Disini, storage pada container masing-masing bertipe bind yang terhubung dengan direktori lokal pada host. Kita dapat menentukan sendiri apakah storage akan menggunakan bawaan di dalam docker sendiri yang terbentuk saat membuat container, atau dengan bind ke folder host. Untuk fungsi bind sendiri adalah agar file-file yang digunakan oleh container dapat di-backup secara lokal.

Contoh disini, file-file yang digunakan oleh container ngelink ke folder /Users/zakky.muhammad/Docker/volumes dengan nama folder masing-masing yang telah ditentukan.

$ docker container create --name mysql-server \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="zabbix_pwd" \
    -e MYSQL_ROOT_PASSWORD="root_pwd" \
    --network=jaringan \
    --mount "type=bind,source=/Users/zakky.muhammad/Docker/volumes/mysql-server,destination=/var/lib/mysql" \
    mysql:8.0

$ docker container create --name zabbix-java-gateway \
    --network=jaringan \
    --restart unless-stopped \
    --mount "type=bind,source=/Users/zakky.muhammad/Docker/volumes/zabbix-java-gateway,destination=/var/lib/zabbix" \
	zabbix/zabbix-java-gateway:alpine-6.2-latest

$ docker container create --name zabbix-server-mysql \
    -e DB_SERVER_HOST="mysql-server" \
    -e MYSQL_DATABASE="zabbix" \
    -e MYSQL_USER="zabbix" \
    -e MYSQL_PASSWORD="zabbix_pwd" \
    -e MYSQL_ROOT_PASSWORD="root_pwd" \
    -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
    --network=jaringan \
    -p 10051:10051 \
    --restart unless-stopped \
    --mount "type=bind,source=/Users/zakky.muhammad/Docker/volumes/zabbix-server-mysql,destination=/var/lib/zabbix" \
	zabbix/zabbix-server-mysql:alpine-6.2-latest

$ docker container create --name zabbix-web-nginx-mysql \
	-e ZBX_SERVER_HOST="zabbix-server-mysql" \
	-e DB_SERVER_HOST="mysql-server" \
	-e MYSQL_DATABASE="zabbix" \
	-e MYSQL_USER="zabbix" \
	-e MYSQL_PASSWORD="zabbix_pwd" \
	-e MYSQL_ROOT_PASSWORD="root_pwd" \
	--network=jaringan \
	-p 80:8080 \
	--restart unless-stopped \
	zabbix/zabbix-web-nginx-mysql:alpine-6.2-latest

4. Kemudian start semua container.

$ docker start $(docker ps -aq)

Kita juga dapat melakukan start container satu-persatu.

$ docker start nama_container

5. Kemudian kita akses service zabbix dengan mengakses alamat IP pada host, misalkan http://192.168.1.100. Tetapi mungkin kita akan menemui notifikasi error pada database di awal dan harus sedikit menunggu terlebih dahulu sampai container benar-benar menjalankan service nya secara utuh.

Dalam praktik ini, file-file database mysql tersimpan dalam direktori /Users/zakky.muhammad/Docker/volumes/mysql-server/. Jika sewaktu-waktu ada masalah atau kita ingin melakukan restore, maka kita dapat menggunakan semua isi di dalam folder ini. Tapi pada praktiknya, beberapa kali percobaan langkah ini susah untu dilakukan.

Jika kasusnya kita melakukan deploy dengan jenis database server nya adalah MySQL, maka lebih aman kita melakukan backup dengan cara export database ke file.sql.

Backup & Restore (Cara Manual)

Backup

$ docker exec NAMA_CONTAINER /usr/bin/mysqldump -u root --password=root_pwd NAMA_DATABASE > backup.sql

Restore

$ cat backup.sql | docker exec -i NAMA_CONTAINER /usr/bin/mysql -u root --password=root_pwd NAMA_DATABASE

Menggunakan Docker Compose dari Zabbix Official

Cara ini dibilang lebih mudah dan guaranteed karena semua container yang dibutuhkan sudah disediakan oleh Zabbix.

1. Download docker compose terbaru.

$ curl -SL https://github.com/docker/compose/releases/download/v2.11.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

2. Link-kan docker compose executable ke /usr/bin/ agar terbaca di terminal.

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

3. Ambil semua script dan file yang dibutuhkan dari Github milik Zabbix. Nanti akan terdapat folder zabbix-docker yang terdownload.

$ git clone https://github.com/zabbix/zabbix-docker.git

4. Run docker compose untuk membuat zabbix monitoring. Contoh disini kita menggunakan zabbix dari ubuntu dan MySQL.

Nanti mulai dari pull image, pembuatan container dan menjalankan container akan otomatis berjalan sendiri sesuai dengan yang telah didefinisikan di dalam file .yaml tersebut.

$ docker-compose -f ./docker-compose_v3_ubuntu_mysql_latest.yaml up -d

5. Kemudian tunggu sampai service benar-benar berjalan utuh dan dapat digunakan.

Untuk mengganti parameter seperti user dan password baik untuk zabbix atau mysql, kita dapat ubah pada hidden file di dalam folder env_vars.

Backup & Restore (Docker-Compose)

Selama folder zabbix-docker yang telah kita clone dari github masih ada, maka kita dapat menggunakannya untuk dipindah atau di-deploy di tempat lain dengan data history data yang sudah ada. Semua perubahan masih akan tetap tersimpan disana.

Tambahan: Commit dan Push

$ docker commit zabbix-web-nginx-mysql zakkymuhammad/zabbix-web-nginx-mysql:v3
$ docker commit zabbix-server-mysql zakkymuhammad/zabbix-server-mysql:v3
$ docker commit zabbix-java-gateway zakkymuhammad/zabbix-java-gateway:v3
$ docker commit mysql-server zakkymuhammad/mysql-server:v3

Untuk melakukan commit, dapat melihat cara di atas. Jadi container yang saat ini digunakan, akan dibuat image yang dapat di push ke repository. Contoh, container mysql-server dibuat image dengan nama zakkymuhammad/mysql-server:v3.

$ docker push zakkymuhammad/zabbix-web-nginx-mysql:v3
$ docker push zakkymuhammad/zabbix-server-mysql:v3
$ docker push zakkymuhammad/zabbix-java-gateway:v3
$ docker push zakkymuhammad/mysql-server:v3

Kemudian image-image tersebut dapat di push menggunakan perintah docker push.

Jadi cara ini dapat juga digunakan untuk menyimpan perubahan yang terjadi pada container. Jadi ketika kita membutuhkan untuk menggunakannya lagi, kita tinggal pull image nya dari repository milik kita.

Referensi:
https://www.zabbix.com/documentation/current/en/manual/installation/containers
https://github.com/zabbix/zabbix-docker

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.