Aug 5, 2024 4 min read

Zabbix: The Ultimate Guide to Self-Hosting

Zabbix: The Ultimate Guide to Self-Hosting
Table of Contents

Zabbix is a powerful open-source monitoring platform designed to track the performance and availability of systems, servers, and networks. Its flexibility, robust customization options, and full data control make it an excellent choice for self-hosting. This guide provides a step-by-step walkthrough for deploying, configuring, and managing Zabbix, covering installation, reverse proxy setup, logging, backups, updates, and advanced configurations.

Installing Zabbix

📦 Docker/Docker Compose Setup

To quickly deploy Zabbix using Docker, create a docker-compose.yml file with Zabbix components (server, frontend, database) and customize the configuration as needed.


version: '3.5'

services:

zabbix-db:

image: mysql:8.0

environment:

MYSQL_ROOT_PASSWORD: root_password

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbix_password

MYSQL_DATABASE: zabbix

volumes:

- ./zabbix-db:/var/lib/mysql

restart: always

zabbix-server:

image: zabbix/zabbix-server-mysql:latest

environment:

DB_SERVER_HOST: zabbix-db

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbix_password

MYSQL_DATABASE: zabbix

volumes:

- ./zabbix-server:/var/lib/zabbix

depends_on:

- zabbix-db

ports:

- "10051:10051"

restart: always

zabbix-web:

image: zabbix/zabbix-web-nginx-mysql:latest

environment:

ZBX_SERVER_HOST: zabbix-server

DB_SERVER_HOST: zabbix-db

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbix_password

MYSQL_DATABASE: zabbix

ports:

- "8080:8080"

depends_on:

- zabbix-server

- zabbix-db

restart: always

Deploy the containers using the following commands:


docker-compose up -d

Verify containers are running:


docker ps

🚀 Manual Installation

Install Zabbix on a Linux server by downloading and configuring its binaries. Below, we’ll install Zabbix Server with MySQL on Ubuntu 22.04.


sudo apt update && sudo apt install -y wget gnupg2 lsb-release

## Add Zabbix repository

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-1+ubuntu22.04_all.deb

sudo dpkg -i zabbix-release_6.0-1+ubuntu22.04_all.deb

sudo apt update

## Install Zabbix server, frontend, and agent

sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent

## Configure MySQL database

sudo mysql -u root -p -e "CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;"

sudo mysql -u root -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'zabbix_password';"

sudo mysql -u root -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';"

## Import initial schema

zcat /usr/share/doc/zabbix-server-mysql/*.sql.gz | mysql -u zabbix -p zabbix

## Start Zabbix services

sudo systemctl enable zabbix-server zabbix-agent apache2

sudo systemctl start zabbix-server zabbix-agent apache2

Access the Zabbix frontend at http://<your-server-ip>/zabbix.

Configuring Nginx as a Reverse Proxy

🌐 Nginx Configuration

Use Nginx to route traffic to your Zabbix frontend.


sudo apt install -y nginx

sudo nano /etc/nginx/sites-available/zabbix

Add the following configuration:


server {

listen 80;

server_name your-domain.com;

location / {

proxy_pass http://localhost:8080;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

Activate the configuration:


sudo ln -s /etc/nginx/sites-available/zabbix /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl restart nginx

🔒 SSL/TLS Setup

Secure your Zabbix instance with Let's Encrypt.


sudo apt install -y certbot python3-certbot-nginx

sudo certbot --nginx -d your-domain.com

Schedule automatic renewal:


sudo systemctl enable certbot.timer

🛠️ Testing and Reloading Nginx

Verify the configuration and reload Nginx:


nginx -t && sudo systemctl reload nginx

Logging and Debugging Zabbix

🗃️ Enabling Debug Logs

Edit the Zabbix configuration file to increase log verbosity.


sudo nano /etc/zabbix/zabbix_server.conf

Set the log level:


DebugLevel=4

Restart the server:


sudo systemctl restart zabbix-server

📄 Viewing Logs

Access Zabbix logs for troubleshooting:


tail -f /var/log/zabbix/zabbix_server.log

For Docker setups:


docker logs <container_id>

🛠️ Troubleshooting Common Issues

Check for database connection errors in the logs. If seen, verify credentials in zabbix_server.conf.

📤 Exporting Logs

Forward logs to ELK Stack for advanced analysis:


sudo apt install -y filebeat

sudo nano /etc/filebeat/filebeat.yml

Add a configuration to ship Zabbix logs to your ELK endpoint.

Backup and Restore

🗂️ File-Based Backups

Backup Zabbix configuration files:


tar -czvf zabbix-config-backup.tar.gz /etc/zabbix

🔄 Database Backups

Export the Zabbix database:


mysqldump -u zabbix -p zabbix > zabbix-db-backup.sql

Restore the database:


mysql -u zabbix -p zabbix < zabbix-db-backup.sql

📅 Automated Backup Scripts

Create a cron job for periodic backups:


echo "0 2 * * * root mysqldump -u zabbix -p<password> zabbix > /var/backups/zabbix-db-backup-$(date +\%F).sql" | sudo tee /etc/cron.d/zabbix-backups

Updating and Upgrading Zabbix

⬆️ Updating Docker Images

Update Zabbix containers to the latest version:


docker-compose pull

docker-compose up -d

🛠️ Manual Updates

For manual installations, download the latest package from the Zabbix repository and follow the installation steps.

🔍 Checking for Updates

Visit the Zabbix download page or run:


apt list --upgradable | grep zabbix

Leveraging Zabbix’s Unique Features

🔧 Enabling APIs

Enable the Zabbix API to integrate with third-party tools:

  1. Go to the Zabbix frontend.

  2. Navigate to Administration > API tokens.

  3. Generate a token for API access.

Test the API with curl:


curl -X POST -H "Content-Type: application/json" -d '{

"jsonrpc": "2.0",

"method": "apiinfo.version",

"id": 1,

"auth": "your_token",

"params": []

}' http://your-domain.com/api_jsonrpc.php

🌟 Advanced Configurations

Integrate Zabbix with Grafana:

  1. Install the Grafana Zabbix plugin.

  2. Add Zabbix as a data source in Grafana.

  3. Create dashboards for advanced visualizations.

Wrapping Up

This guide has walked you through deploying, configuring, and managing Zabbix, a robust self-hosted monitoring platform. From installation and reverse proxy setup to logging, backups, and leveraging APIs, you now have the tools to maximize Zabbix's capabilities. Get started today and experience the full power of this open-source monitoring solution!

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to Selfhosted Ninja.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.