There are a few famous software monitor systems, and Zabbix (wikipedia) is one of them. Zabbix is an enterprise-class open source software for monitoring of servers, networks, and applications.

You can compare Zabbix with any other multi-agent monitor systems and decide which one is suitable for you. We will focus on Zabbix on Ubuntu today.

At this guide, we will setup two machines. Both machines are Ubuntu 12.04 LTS. Most guides on the internet are installed with Apache/MySQL. We will setup with Nginx/Percona as example.

We will install the server machine first (on a Linode), and then the agent machine (on an AWS EC2). (You can do the same works on a Digital Ocean Droplet.

1. Setup Zabbix Server (on a Linode)

Let's say this Zabbix Server is named "Tokyo01" which is located at Linode Tokyo. Before installing Zabbix server, we have installed Nginx and Percona already.

First we add a PPA to get the most up-to-date Zabbix packages:
(You can use nano or any other editor to replace vim here.)

sudo vim /etc/apt/sources.list

Add these lines at the bottom of the file:

# Zabbix Application PPA
deb http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main
deb-src http://ppa.launchpad.net/tbfr/zabbix/ubuntu precise main

Save and close the file (sources.list).

Add the PPA's key to make apt-get knows the source:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C407E17D5F76A32B

Now, it's time to update:

sudo apt-get update

Good job. All above are the same works that we will do again on the Zabbix Agent machine later (also in the future). Next, we will still focus on Zabbix Server setup steps:

sudo apt-get install zabbix-server-mysql zabbix-frontend-php

System may ask you for the MySQL root's password during the installation process.

1.1 MySQL Configuration

Once you finished the package installation, next we can start the configurations.

sudo vim /etc/zabbix/zabbix_server.conf

Find and update at least these three parameters:


Save and close the file.

Create one MySQL database and one MySQL user with the same password you just saved in /etc/zabbix/zabbix_server.conf .
Then we're going to import the SQL files:

cd /usr/share/zabbix-server-mysql/
sudo gunzip *.gz
mysql -u zabbix -p zabbix < schema.sql
mysql -u zabbix -p zabbix < images.sql
mysql -u zabbix -p zabbix < data.sql

Yes. Please type the same password of the MySQL user "zabbix" you just choosed.

1.2 PHP Configuration

We need to modify php.ini for letting PHP process our monitor data smoothly. The part of "{your configuration}" could be "apache2" (if you use apache), "cgi" or "fpm", "cli" depends on your PHP environment. At this guide, we will setup nginx to use fastcgi later, we will edit /etc/php5/cgi/php.ini .

sudo vim /etc/php5/{your configuration}/php.ini

Search and modify these parameters within your php.ini:

post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = UTC

Save and close the file.

Then, we can have a copy from Zabbix for PHP configuration, and edit it:

sudo cp /usr/share/doc/zabbix-frontend-php/examples/zabbix.conf.php.example /etc/zabbix/zabbix.conf.php
sudo vim /etc/zabbix/zabbix.conf.php

Find and modify the parameters to fit your situation:

$DB["DATABASE"]                 = 'zabbix';
$DB["USER"]                     = 'zabbix';
$DB["PASSWORD"]                 = 'Your.Password.Here';

Save and close it.

Good. We have two more files to go.

Restart the PHP if need.

service php-fastcgi restart

1.3 Nginx Configuration

Here is my nginx site configuration file that you can reference, and save as /etc/nginx/sites-available/monitor :

server {
    listen 80;

    # change these three lines to fit your site
    server_name monitor.example.com;
    access_log /srv/www/logs/monitor/naccess.log;
    error_log /srv/www/logs/monitor/nerror.log;
    root /usr/share/zabbix;

    # if you want to limit specific IP
    #allow type.your.IP.here;
    #deny all;

    location / {

            if ($scheme ~ ^http:){
                rewrite ^(.*)$  https://$host$1 permanent;
            index                   index.php;
            error_page              403 404 502 503 504  /zabbix/index.php;

            location ~ \.php$ {
                    if (!-f $request_filename) { return 404; }
                    expires                 epoch;
                    include                 /etc/nginx/fastcgi_params;
                    fastcgi_index   index.php;
                    fastcgi_param SCRIPT_FILENAME /usr/share/zabbix/$fastcgi_script_name;

            location ~ \.(jpg|jpeg|gif|png|ico)$ {
                    access_log      off;
                    expires         33d;


Once you done it, make sure to enable this site (replace the filename "monitor" to yours):

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/monitor monitor
service nginx restart

Finally, we have one more file to edit, and ready to run!

1.4 Start the Zabbix Server

Let's take a look at Zabbix init file:

sudo vim /etc/default/zabbix-server

Find this and say "yes":


Save and close this file, and we are ready to start Zabbix server now:

sudo service zabbix-server start

2. The First Time Login

If everything goes correct, you can open the browser and link to the IP or url you set in nginx site, and see this:
(In our example site configuration file, it would be "http://monitor.example.com/" )

Enter this default set to login:

Username = admin
Password = zabbix

Please make sure to change your admin's password once you get in. (Please).

3. Setup Zabbix Agent on the Same Machine with Zabbix Server (on a Linode)

3.1 Install Zabbix Agent

It's always easier to have a monitor agent on the same machine where installed with monitor server. We will not meet any port, firewall related issues and make sure our monitor system runs well.

We are on the same machine, therefore we don't need to process steps 1.0 to setup PPA and apt-get update again. We can install zabbix agent package now:
sudo apt-get install zabbix-agent

Once finished the installation, we can edit the agent configuration file:

vim /etc/zabbix/zabbix_agentd.conf

Find and edit these three parameters:
(Choose your Hostname in your case. We use "Tokyo01" at this guide.)


Save and close it.

Done and ready to go.

sudo service zabbix-agent restart

3.2 Configuration Hosts

Get back to our browser interface (http://monitor.example.com). Go to "Configuration" --> "Hosts" --> "Zabbix Server" (or your Hostname):

Move the "Linux servers" from the right-hand side box to the left-hand side.

At the bottom, change the "Status" to be "Monitored".

Click "Save'.

(Wait for a couple seconds.)

Go to the page: "Monitoring" --> "Latest data"

--> find a item that you're interested in --> click on "Graph" to see its chart.

4. Setup Zabbix Agent on Another Machine (on an AWS EC2)

At this guide, we didn't modify the Zabbix working port numbers. We will keep it, and show you how to do the setup if your Zabbix agent machines are located within AWS data centers.

You can either use AWS Management Console or AWS CLI to modify your EC2 Security Group.

Make sure you choose the correct "Region" before your any operation.

Add one Inbound port "10050" with a specific IP of your Zabbix Server at "Source" field (format: "xxx.yyy.zzz.mmm/32". (You should not use "" except you want to share with everyone.) 

Once you set the security group done, you can follow the steps 3.0~3.2 to install Zabbix Agent.

5. Follow-ups, and More

Next we are going to monitor Percona/MySQL servers, Nginx servers, and more :-)

You can also find some reference at Zabbix documents: https://www.zabbix.com/documentation/doku.php?id=2.2/manual

This guide has tested on: Linode, Digital Ocean, and AWS.


Post a Comment