Believe it or not, Zabbix 5 on Raspberry Pi can monitor up to 400 devices gathering 125 metrics every 5 minutes from each device (around 100 values per second)! I have tested this on Raspberry Pi 3 B+ and later on the Raspberry Pi 4 version.
You can use any SD card with 16G if you are planning to monitor a small number of devices like home network or small office. However, if you are planning to monitor hundreds of devices then a fast SD card is necessary like SanDisk Extreme 64GB (160 MB/s read and 90 MB/s write speed) or better.
Never heard of Zabbix before? Zabbix is 100% free open-source ultimate enterprise-level software designed for monitoring availability and performance of IT infrastructure components. You can read a case-study about Zabbix popularity and find out more about open-source movement in this article.
Zabbix server is installable on any Linux distribution, but in this tutorial, I will show you how to install the latest version Zabbix 5.0 LTS or 5.2 Standard release on Raspberry Pi OS (previously called Raspbian) and how to make key optimizations so that your RPI performs better and lasts longer.
Enough of talk lets do some work! First, we will install and configure Zabbix server, then a database and lastly the frontend – check the picture above for a better understanding of Zabbix architecture.
This guide is for installing Zabbix monitoring system (Server) on Raspberry Pi, while guide for installing Zabbix proxy on Raspberry Pi can be found on this link.
Note: You need to log in as a root user on your Linux server with “su -
” to successfully execute commands used in this tutorial.
Step 1: Install Raspberry Pi OS (Raspbian) on Raspberry Pi
If you don’t have already Rasbian installed (check with command “cat /etc/os-release
“) you can download Raspberry Pi OS (Raspbian) image from the official site (choose lite version) and write it on SD card following this guide.
Basically, all you need do is download the Raspberry Pi OS (Raspbian) Lite image and write it to an SD card with the Etcher tool.
Step 2: Connect to Raspberry via SSH
a. Enable SSH on device
Login to Raspberry (default username and password: pi / raspberry) and enable SSH service:
systemctl enable ssh systemctl start ssh
b. Find out RPi IP addres
[email protected]:~$ ip a | egrep "inet " inet 127.0.0.1/8 scope host lo inet 10.7.44.235/24 brd 10.7.44.255 scope global eth0
c. Connect to Rasberry Pi
From Linux terminal you can connect like this:
[email protected]:~$ ssh [email protected] The authenticity of host '10.7.44.235 (10.7.44.235)' can't be established. ECDSA key fingerprint is SHA256:ih9lUhmihqZMoK9ElwPLiL0eumVw/PCjBjIN8E6Fl3Y. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.7.44.235' (ECDSA) to the list of known hosts. [email protected]'s password: Linux raspberrypi 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l
Or use Putty if you are connecting from Windows:
Step 3: Install Zabbix server, frontend, and agent
Install Zabbix 5 .deb package on your Raspberry Pi OS (Raspbian). Choose 5.0 LTS release (stable, 5-year support) or 5.2 standard release (more features, 6-month support, more bugs).
Zabbix 5.0 LTS version (supported until May 31, 2025) wget https://repo.zabbix.com/zabbix/5.0/raspbian/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb apt update apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent OR Zabbix 5.2 standard version (supported until May 31, 2021) wget https://repo.zabbix.com/zabbix/5.2/raspbian/pool/main/z/zabbix-release/zabbix-release_5.2-1+debian$(cut -d"." -f1 /etc/debian_version)_all.deb dpkg -i zabbix-release_5.2-1+debian$(cut -d"." -f1 /etc/debian_version)_all.deb apt update apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent
You can find more information about Zabbix’s life cycle and release policies on the official website.
Step 4: Configure database on Rasberry Pi
In this installation, I will use password rootDBpass as root database password and zabbixDBpass as Zabbix database password. Consider changing your password for security reasons.
a. Install MariaDB
Install MariaDB database:
apt -y install mariadb-server
Once the installation is complete, start the MariaDB service and enable it to start on boot using the following commands:
systemctl start mariadb systemctl enable mariadb
b. Reset root password for database
mysql_secure_installation
Enter current password for root (enter for none): Press the Enter Set root password? [Y/n]: Y New password: <Enter root DB password> Re-enter new password: <Repeat root DB password> Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: Y Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y
c. Create database
mysql -uroot -p'rootDBpass' -e "create database zabbix character set utf8 collate utf8_bin;" mysql -uroot -p'rootDBpass' -e "grant all privileges on zabbix.* to [email protected] identified by 'zabbixDBpass';"
d. Import initial schema and data
Import shema and data (could last up to 10 min):
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p'zabbixDBpass' zabbix
e. Enter database password in Zabbix configuration file
Open zabbix_server.conf
file with command: “nano /etc/zabbix/zabbix_server.conf
” and add database password in this format anywhere in file:
DBPassword=zabbixDBpass
Save and exit file (ctrl+x, followed by y and enter).
Step 5: Start Zabbix server and agent processes
systemctl restart zabbix-server zabbix-agent systemctl enable zabbix-server zabbix-agent
Step 6: Configure Zabbix frontend
a. Configure PHP for Zabbix frontend
Open apache.conf with command:
nano /etc/zabbix/apache.conf
Uncomment 2 lines in apache.conf that starts with “# php_value date.timezone Europe/Riga
” by removing symbol “#
” and set the right timezone for your country, for example:
php_value date.timezone Europe/Amsterdam
Save and exit file (ctrl+x, followed by y and enter)
b. Restart Apache web server and make it start at system boot
systemctl restart apache2 systemctl enable apache2
c. Configure web frontend
Connect to your newly installed Zabbix frontend using URL “http://server_ip_or_dns_name/zabbix” to initiate the Zabbix installation wizard.
In my case, that URL would be “http://10.7.44.235/zabbix” because I have installed Zabbix on the server with IP address 10.7.44.235 (you can find the IP address of your server by typing “ip a
” command in the terminal).
Basically, in this wizard you only need to enter a password for Zabbix DB user and just click “Next step” for everything else. In this guide, I have used a zabbixDBpass as a database password, but if you set something else, be sure to enter the correct password when prompted by the wizard.






That’s it, you have installed Zabbix monitoring system 5.0!
Step 7: Login to frontend using Zabbix default login credentials
Use Zabbix default admin username “Admin” and password “zabbix” (without quotes) to login to Zabbix frontend at URL “http://server_ip_or_dns_name/zabbix” via your browser.
In my example, I have installed Zabbix on server 10.7.44.235 so I will enter in my browsers URL field http://10.7.44.235/zabbix (you can find the IP address of your server by typing “ip a
” command in the terminal)

CONGRATULATIONS!
You have successfully installed Zabbix 5 Server on Raspberry Pi and now you can monitor anything!
No need to change anything else as other steps are optional.
CONTINUE TO LEARN MORE:
Optimizing Raspberry Pi OS, Zabbix Server and MySQL database.
Step 8: Optimizing Raspberry Pi (optional)
When you are using Zabbix on Raspberry Pi you have two problems: the lifespan of the SD card because of limited number of read/writes and SD card performance.
Zabbix needs every IOPS that he can get for the best user experience.
You can make some tweaks on the OS level that will mitigate the mention problems.
a. Reduce the frequency of swap usage
Open sysctl.conf file with: “nano /etc/sysctl.conf
” and add this line to the file:
vm.swappiness = 1
Save and exit file (ctrl+x, followed by y and enter)
b. Disable access time property for directories
If you don’t care about files or directories access time property you can completly disabled it by the noatime and nodiratime mount options in “/etc/fstab
” file.
Open fstab file with “nano /etc/fstab"
and change only “defaults
” and “defaults,noatime
” (do not change anything else!) to this:
PARTUUID=6c586e13-01 /boot vfat defaults,noatime,nodiratime,fmask=0122 0 2 PARTUUID=6c586e13-02 / ext4 defaults,noatime,nodiratime 0 1
Save and exit file (ctrl+x, followed by y and enter)
c. Turn off system log
Open journald.conf file with “nano /etc/systemd/journald.conf
“, uncomment the line that starts with “Storage=auto
” by removing symbol #
and change to “Storage=none
“.
Save and exit file (ctrl+x, followed by y and enter).
d. Increase swap size
Before, we have set “swappines=1
” so that swap memory is avoided at all costs. However, sometimes Zabbix will need more memory (DB backup, housekeeping and similar). Because of that, we will increase the default swap file from 100M to 1000M.
Open dphys-swapfile file with “nano /etc/dphys-swapfile
” and change “CONF_SWAPSIZE=100
” to:
CONF_SWAPSIZE=1000
Save and exit file (ctrl+x, followed by y and enter).
e. Reboot
Use “reboot
” command to reboot Raspberry Pi.
Step 9: Optimizing Zabbix Server (optional)
Don’t bother with this optimization if you are monitoring a small number of devices, but if you are planning to monitor a large number of devices then continue with this step.
Open zabbix_server.conf
file with command: "nano /etc/zabbix/zabbix_server.conf
” and add this configuration anywhere in file:
StartPollers=100 StartPollersUnreachable=50 StartPingers=50 StartTrappers=10 StartDiscoverers=15 StartPreprocessors=15 StartHTTPPollers=5 StartAlerters=5 StartTimers=2 StartEscalators=2 CacheSize=128M HistoryCacheSize=32M HistoryIndexCacheSize=16M TrendCacheSize=16M ValueCacheSize=128M
Save and exit file (ctrl+x, followed by y and enter).
This is not a perfect configuration, keep in mind that you can optimize it even more. Let’s say if you don’t use ICMP checks then set the “StartPingers
” parameter to 1 or if you don’t use active agents and active proxies then set “StartTrappers
” to 1 and so on. You can find out more about the parameters supported in a Zabbix server configuration file in the official documentation.
If you try to start the Zabbix server you will receive an error “[Z3001] connection to database 'Zabbix' failed: [1040] Too many connections
” in the log “/var/log/zabbix/zabbix_server.log
” because we are using more Zabbix processes than MySQL can handle. We need to increase the maximum permitted number of simultaneous client connections and optimize MySQL – so move to the next step.
Step 10: Optimizing MySQL database (optional)
a. Create custom MySQL configuration file
Create file “10_my_tweaks.cnf
” with “nano /etc/mysql/mariadb.conf.d/10_my_tweaks.cnf
” and paste this configuration:
[mysqld] max_connections = 454 innodb_buffer_pool_size = 400M innodb-log-file-size = 128M innodb-log-buffer-size = 128M innodb-file-per-table = 1 innodb_buffer_pool_instances = 8 innodb_old_blocks_time = 1000 innodb_stats_on_metadata = off innodb-flush-method = O_DIRECT innodb-log-files-in-group = 2 innodb-flush-log-at-trx-commit = 2 tmp-table-size = 96M max-heap-table-size = 96M open_files_limit = 65535 max_connect_errors = 1000000 connect_timeout = 60 wait_timeout = 28800
Save and exit the file (ctrl+x, followed by y and enter) and set the correct file permission:
chown mysql:mysql /etc/mysql/mariadb.conf.d/10_my_tweaks.cnf chmod 644 /etc/mysql/mariadb.conf.d/10_my_tweaks.cnf
Two things to remember!
Configuration parameter max_connections must be larger than the total number of all Zabbix processes plus 200. You can use the command below to automatically check the number of Zabbix processes and add 200 to that number:
[email protected]:~ $ egrep "^Start.+=[0-9]" /etc/zabbix/zabbix_server.conf | awk -F "=" '{s+=$2} END {print s+200}' 454
The second most important parameter is innodb_buffer_pool_size, which determines how much memory can MySQL get for caching InnoDB tables and index data. You should set that parameter to 70% of system memory if only database is installed on server.
However, in this case, we are sharing a server with Zabbix and Apache processes so you should set innodb_buffer_pool_size to 40% of total system memory – that would be 400M because Raspberry Pi 3 B+ has 1G RAM (set 800M if you have Raspberry Pi 4 that has 2G RAM).
I didn’t have any problems with memory, but if your Zabbix server crashes because of lack of memory, reduce “innodb_buffer_pool_size
” and restart MySQL server.
Note that if you follow this configuration, you will receive “Too many processes on the Zabbix server
” alarm in Zabbix frontend due to the new Zabbix configuration. It is safe to increase the trigger threshold or turn off that alarm (select “Problems” tab → left click on the alarm → select “Configuration” → remove the check from “Enabled” → hit the “Update” button)
b. Restart Zabbix and MySQL service
Stop and start the services in the same order as below:
systemctl stop zabbix-server systemctl stop mysql systemctl start mysql systemctl start zabbix-server
Step 11: Partition MySQL tables
This step is probably the most important for Raspberry Pi’s performance.
Partition MySQL tables in 5 minutes following this simple guide, but don’t use the default setting. Keep history data for 1 day and trend data for 60 days if you have small SD card (smaller than 64GB).
Step 12: How to manage Zabbix / MySQL / Apache server
Sometimes you will need to check or restart Zabbix, MySQL or Apache service – use commands below to do that.
Zabbix Server systemctl zabbix-server MySQL Server systemctl mysql Apache Server systemctl apache2 Zabbix Agent systemctl zabbix-agent
Step 13: Upgrade between minor versions
I wrote about these upgrade procedures in my post about Zabbix upgrade. Zabbix’s team releases new minor versions at least once a month. The main purpose of minor upgrades is to fix bugs (hotfix) and sometimes even bring new functionality. Therefore, try to do a minor upgrade of Zabbix at least once a month.
There is no need for backups when doing a minor upgrade, they are completely safe. With this command you can easily upgrade mintor versions of 5.0.x (for example, from 5.0.1 to 5.0.5):
apt install --only-upgrade 'zabbix.*'
And restart Zabbix server afterward:
systemctl restart zabbix-server
Thank you for reading.