I’m old fashion and in some cases I like to compile my stuff, Zabbix is one of these cases. You can add/remove features directly with ./configure, and mess around with some timeouts of zabbix_server and zabbix_agentd for example. In this tutorial, we will not change anything on the source code
.
We are going install Zabbix version 2.4.6 with MySQL, Nginx and PHP-FPM. This is the stack of what I use in production environments.
Kurt Telep just created a Vagrantfile based on this tutorial, check it out here. Thanks Kurt for the contribution.
Configure the external repositories and install dependencies
[root@vagrant-centos67 ~]# mkdir -p /opt/sources/zabbix
[root@vagrant-centos67 ~]# cd /opt/sources
[root@vagrant-centos67 ~]# yum install -y wget
[root@vagrant-centos67 ~]# wget https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
[root@vagrant-centos67 ~]# rpm -ivh mysql-community-release-el6-5.noarch.rpm
# Create Nginx REPO
vi /etc/yum.repos.d/nginx.repo
# Add the following below:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
# Update and install required packages
yum update -y
yum install -y mysql-server php-mysql php-bcmath php-gd php-fpm php-xml php-ldap php-mbstring wget libcurl-devel openldap-devel java-1.7.0-openjdk-devel net-snmp-devel iksemel-devel libxml2-devel mysql-devel nginx vim
Download and install Zabbix
We are compiling Zabbix with java, jabber, libcurl, snmp and ldap support, for more options(IPMI for example) please run ./configure –help
[root@vagrant-centos67 opt]# cd /opt/sources/zabbix
[root@vagrant-centos67 zabbix]# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.6/zabbix-2.4.6.tar.gz
[root@vagrant-centos67 zabbix]# tar zxvf zabbix-2.4.6.tar.gz
[root@vagrant-centos67 zabbix]# cd zabbix-2.4.6
[root@vagrant-centos67 zabbix-2.4.6]# ./configure --enable-server --enable-agent --prefix=/usr/local --sysconfdir=/etc --enable-java --with-mysql --with-jabber --with-libcurl --with-net-snmp --with-ldap --with-iconv --with-libxml2
Configuration:
Detected OS: linux-gnu
Install path: /usr/local
Compilation arch: linux
Compiler: gcc
Compiler flags: -g -O2 -I/usr/include/mysql -g -fstack-protector -m64 -fPIC -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -I/usr/include/libxml2 -I/usr/include/rpm -I/usr/local/include -I/usr/lib64/perl5/CORE -I. -I/usr/include -I/usr/include -I/yes/include
Enable server: yes
Server details:
With database: MySQL
WEB Monitoring: cURL
Native Jabber: yes
SNMP: yes
IPMI: no
SSH: no
ODBC: no
Linker flags: -rdynamic -L/yes/lib -L/usr/lib64/mysql -L/usr/lib64 -L/usr/lib
Libraries: -lm -ldl -lrt -lresolv -lmysqlclient -liksemel -lxml2 -lnetsnmp -lldap -llber -lcurl
Enable proxy: no
Enable agent: yes
Agent details:
Linker flags: -rdynamic -L/yes/lib -L/usr/lib
Libraries: -lm -ldl -lrt -lresolv -lldap -llber -lcurl
Enable Java gateway: yes
Java gateway details:
Java compiler: javac
Java archiver: jar
LDAP support: yes
IPv6 support: no
***********************************************************
* Now run 'make install' *
* *
* Thank you for using Zabbix! *
* <http://www.zabbix.com> *
***********************************************************
make
make install
# Create group/user for Zabbix
groupadd zabbix
useradd -g zabbix zabbix
Configure MySQL
We will not make any configuration on MySQL, but keep in mind that in production environment you want to configure InnoDB, replication and other goodies.
[root@vagrant-centos67 zabbix]# /etc/init.d/mysqld start
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h vagrant-centos67.vagrantup.com password 'new-password'
...
[ OK ]
Starting mysqld: [ OK ]
# Add a password for root user
[root@vagrant-centos67 zabbix-2.4.6]# mysqladmin -uroot password 'topsecret'
Warning: Using a password on the command line interface can be insecure.
# Create database for Zabbix and populate it with the .sql files
[root@vagrant-centos67 zabbix-2.4.6]# cd /opt/sources/zabbix/zabbix-2.4.6/database/mysql/
[root@vagrant-centos67 zabbix-2.4.6]# mysql -uroot -ptopsecret
create database zabbix;
use zabbix;
source schema.sql;
source data.sql;
source images.sql;
Configure Zabbix Server and copy start scripts
cp /opt/sources/zabbix/zabbix-2.4.6/misc/init.d/fedora/core5/zabbix_server /etc/init.d/
cp /opt/sources/zabbix/zabbix-2.4.6/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/
# Configure /etc/zabbix_server.conf
For this tutorial we will only change the line 102 to DBPassword=topsecret
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start
# Check is Zabbix server is ok and running
[root@vagrant-centos67 zabbix-2.4.6]# cat /tmp/zabbix_server.log
6880:20151007:134754.283 Starting Zabbix Server. Zabbix 2.4.6 (revision 54796).
6880:20151007:134754.283 ****** Enabled features ******
6880:20151007:134754.283 SNMP monitoring: YES
6880:20151007:134754.283 IPMI monitoring: NO
6880:20151007:134754.283 WEB monitoring: YES
6880:20151007:134754.283 VMware monitoring: YES
6880:20151007:134754.283 Jabber notifications: YES
6880:20151007:134754.283 Ez Texting notifications: YES
6880:20151007:134754.283 ODBC: NO
6880:20151007:134754.283 SSH2 support: NO
6880:20151007:134754.283 IPv6 support: NO
6880:20151007:134754.283 ******************************
6880:20151007:134754.283 using configuration file: /etc/zabbix_server.conf
6880:20151007:134754.593 current database version (mandatory/optional): 02040000/02040000
6880:20151007:134754.594 required mandatory version: 02040000
6880:20151007:134754.657 server #0 started [main process]
6882:20151007:134754.664 server #1 started [configuration syncer #1]
6885:20151007:134754.673 server #4 started [poller #2]
6886:20151007:134754.674 server #5 started [poller #3]
6888:20151007:134754.675 server #7 started [poller #5]
6889:20151007:134754.675 server #8 started [unreachable poller #1]
6890:20151007:134754.675 server #9 started [trapper #1]
6892:20151007:134754.677 server #11 started [trapper #3]
6893:20151007:134754.677 server #12 started [trapper #4]
6894:20151007:134754.689 server #13 started [trapper #5]
6895:20151007:134754.689 server #14 started [icmp pinger #1]
6896:20151007:134754.690 server #15 started [alerter #1]
6897:20151007:134754.690 server #16 started [housekeeper #1]
6898:20151007:134754.690 server #17 started [timer #1]
6899:20151007:134754.690 server #18 started [http poller #1]
6901:20151007:134754.691 server #20 started [history syncer #1]
6903:20151007:134754.691 server #22 started [history syncer #3]
6906:20151007:134754.691 server #25 started [proxy poller #1]
6904:20151007:134754.691 server #23 started [history syncer #4]
6905:20151007:134754.691 server #24 started [escalator #1]
6907:20151007:134754.692 server #26 started [self-monitoring #1]
6884:20151007:134754.692 server #3 started [poller #1]
6883:20151007:134754.692 server #2 started [db watchdog #1]
6891:20151007:134754.692 server #10 started [trapper #2]
6887:20151007:134754.693 server #6 started [poller #4]
6902:20151007:134754.693 server #21 started [history syncer #2]
6900:20151007:134755.315 server #19 started [discoverer #1]
[root@vagrant-centos67 zabbix-2.4.6]#
Configure Nginx
mkdir -p /var/www/zabbix
[root@vagrant-centos65 mysql]# cp -r -p /opt/sources/zabbix/zabbix-2.4.6/frontends/php/* /var/www/zabbix/
[root@vagrant-centos65 mysql]# chown nginx. /var/www/zabbix/*
# Edit the file /etc/nginx/nginx.conf and paste the content below
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
gzip on;
gzip_static on;
gzip_comp_level 2;
gzip_min_length 20240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "MSIE [1-6]\.";
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:10m max_size=1000m inactive=60m;
}
# Edit the file /etc/nginx/conf.d/default.conf with the content
upstream php5-fpm-sock {
server unix:/var/run/php-fpm/php-fpm.socket;
}
server {
server_name localhost;
set $cache_uri $request_uri;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $cache_uri 'null cache';
}
if ($query_string != "") {
set $cache_uri 'null cache';
}
root /var/www/zabbix;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log main;
location / {
index index.html index.htm index.php;
proxy_read_timeout 600;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
set $skip_cache 1;
if ($cache_uri != "null cache") {
add_header X-Cache-Debug "$cache_uri $cookie_nocache $arg_nocache$arg_comment $http_pragma $http_authorization";
set $skip_cache 0;
}
fastcgi_cache_bypass $skip_cache;
# fastcgi_cache microcache;
fastcgi_cache_key $scheme$host$request_uri$request_method;
fastcgi_cache_valid any 8m;
#fastcgi_cache_use_stale updating;
fastcgi_cache_bypass $http_pragma;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_pass php5-fpm-sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/zabbix$fastcgi_script_name;
fastcgi_read_timeout 14400;
}
}
Configure PHP and PHP-FPM
# Edit the file /etc/php.ini and correct the values as following
post_max_size 16M
max_execution_time 300
max_input_time 300
date.timezone = America/Sao_Paulo (In my case)
# Configure PHP-FPM edit the file /etc/php-fpm.d/www.conf
[www]
listen = /var/run/php-fpm/php-fpm.socket
listen.backlog = -1
listen.owner = nginx
listen.group = nginx
listen.mode=0660
user = nginx
group = nginx
#request_slowlog_timeout = 10s
#slowlog = /var/log/php-fpm/slowlog-site.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 20
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 7
pm.max_requests = 150
pm.status_path = /status
request_terminate_timeout = 600s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
There is a bug in Zabbix when you install from source. Just run this code to fix it:
mkdir -p /var/lib/php/session
chown nginx. /var/lib/php/session
Start nginx/php-fpm and proceed to install
/etc/init.d/nginx start
/etc/init.d/php-fpm start
Try access http://localhost on your browser
Finish the installation
We are almost done, now we just need to configure zabbix(generate the config file), just follow the screenshots. The process is NNF, if you have any questions ask on the comments.
If you get the error below it’s probably because you forgot to configure php.ini file or to reload nginx/php-fpm
And we are done! We have Zabbix installed using a MySQL database and Nginx/PHP-FPM serving the frontend app.