Fork me on GitHub
Fork me on GitHub

zabbix安装配置

实验环境

主机名 操作系统版本 IP地址 安装软件
console CentOS 7.0 114.55.29.246 Httpd、Nginx、MySQL、Zabbix
log1 CentOS 7.0 114.55.29.86 Zabbix agent
log2 CentOS 7.0 114.55.29.241 Zabbix agent

安装准备

为了安全考虑,zabbix只使用普通用户运行,如果你的系统没有名叫zabbix的用户,你需要创建一个用户,如下:

[root@console local]# groupadd zabbix
[root@console local]# useradd -g zabbix zabbix
[root@console local]# id zabbix
uid=1000(zabbix) gid=1000(zabbix) groups=1000(zabbix)

安装MySQL

console主机安装mysql5.6。下载地址:http://mirrors.sohu.com/mysql

  1. 安装依赖包
    [root@console local]# yum install libaio* -y
    
  2. 解压安装
    [root@console local]# tar zxf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz 
    [root@console local]# ln -sv mysql-5.6.27-linux-glibc2.5-x86_64 mysql
    
  3. 新建用户
    运行mysql最好不要用root去运行,而以普通用户身份。添加用户mysql。
    [root@console local]# groupadd -r -g 300 mysql
    [root@console local]# useradd -g mysql -r -s /sbin/nologin -u 300 mysql
    [root@console local]# id mysql
    uid=300(mysql) gid=300(mysql) groups=300(mysql)
    
  4. 修改mysql文件权限为mysql.mysql
    [root@console local]# cd mysql
    [root@console mysql]# chown -R mysql.mysql ./*
    
  5. 执行初始化操作,生成一个系统库叫mysql,它里面保存着有当前所有能够使用mysql服务器的用户帐号、所有数据库的名字、每个库中表的名字、表中字段的名字等等。
    脚本路径:/usr/local/mysql/scripts
    创建数据文件目录:
    [root@console mysql]# mkdir -pv /data/{mydata,binlog}
    [root@console mysql]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mydata
    [root@console mysql]# ls /data/mydata
    
  6. 修改mysql目录下的文件属主为root,属组为mysql
    [root@console mysql]# chown -R root .
    
  7. 修改data目录属主、属组为mysql
    [root@console mysql]# chown -R mysql.mysql /data
    
  8. 拷贝修改mysql的配置文件
    copy写好的my.cnf到/etc/目录下。
  9. 拷贝mysql的启动脚本,并加入系统服务
    [root@console mysql]# cp support-files/mysql.server /etc/init.d/mysqld 
    [root@console mysql]# chkconfig --add mysqld
    
  10. 启动mysql
    [root@console mysql]# service mysqld start
    
  11. 配置环境变量,配置完重新打开一个shell
    [root@console mysql]# vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin:$PATH
    
  12. 修改root密码,因为一装完root密码是空的
    [root@console ~]# mysql -uroot mysql 
    
    mysql> UPDATE user SET Password=PASSWORD('wisedu123') where USER='root';
    mysql> FLUSH PRIVILEGES;
    

    此时再以root登录就需要密码了。
  13. 删除两个匿名帐号
    mysql> use mysql
    mysql> SELECT host,user,password FROM user;
    
    mysql> DROP USER ''@localhost;
    mysql> DROP USER ''@console;
    


    安装Zabbix3.0.1

    官方说3.0以上版本是在redhat7以上运行的,我之前在redhat6.6尝试编译安装也是可以的。

    安装依赖包

    [root@console ~]# yum install net-snmp-devel libxml2-devel libcurl-devel  libssh2-devel unixODBC-devel -y
    

    安装JDK

    如果zabbix需要监控JMX应用的程序,在编译zabbix的时候就需要–enable-java,同时也需要安装配置好JDK。
    # mkdir /usr/java
    # tar zxf jdk-8u73-linux-x64.gz -C /usr/java/
    # vim /etc/profile
    # source /etc/profile
    

    安装php环境

    zabbix的服务端程序是用php写的,因此需要一个支持LAMP架构的服务器平台。
    CentOS 6:
    CenOS 6的yum源中自带的php解释器版本过低,是 5.3版本,需要>=5.4版本才可以。这里使用 Webtatic EL6的YUM源来安装php5.4,我们首先安装Webtatic EL6 YUM源:
    # rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm 
    # yum install php54w php54w-mysql php54w-mbstring php54w-bcmath php54w-gd php54w-xml -y
    
    CentOS 7:
    # yum install php php-fpm php-mysql php-mbstring php-bcmath php-gd php-xml -y
    

编译安装zabbix server

如果仅安装server,并支持将数据放入mysql数据中,可使用类似如下配置命令:
./configure –enable-server –with-mysql –with-net-snmp –with-libcurl
如果仅安装proxy,并支持将数据放入mysql数据中,可使用类似如下配置命令:
./configure –prefix=/usr –enable-proxy –with-net-snmp –with-mysql –with-ssh2
如果仅安装agent,可使用类似如下配置命令:
./configure –enable-agent
在console主机上同时安装server和agent,并支持将数据放入mysql数据中:

[root@console local]# cd /usr/local/
[root@console local]# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.1/zabbix-3.0.1.tar.gz
[root@console local]# tar zxf zabbix-3.0.1.tar.gz 
[root@console local]# cd zabbix-3.0.1/
[root@console zabbix-3.0.1]# ./configure --prefix=/usr/local/zabbix-3.0.1/ --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-ipv6 --with-ssh2 --enable-java --with-unixodbc

[root@console zabbix-3.0.1]# make && make install

初始化数据库

For Zabbix server and proxy daemons, as well as Zabbix frontend, a database is required. It is not needed to run Zabbix agent.
数据库初始化脚本在/usr/local/zabbix-3.0.1/database/mysql,分别是schema.sql、images.sql和data.sql。
注意:导入顺序不能变。
先在MySQL中创建zabbix数据库:

[root@console ~]# mysql -uroot -p
mysql> create database zabbix default charset utf8;
mysql> grant all on zabbix.* to zabbix@localhost identified by 'wisedu';
mysql> grant all on zabbix.* to zabbix@'%.%.%.%' identified by 'wisedu';
mysql> flush privileges;

然后退出,使用zabbix用户登录mysql并导入数据:

[root@console ~]# mysql -uzabbix -p
mysql> use zabbix;
mysql> source /usr/local/zabbix-3.0.1/database/mysql/schema.sql

如果你仅仅是初始化proxy的数据库,那么schema.sql够了。如果初始化server,那么接着导入下面两个sql:

mysql> source /usr/local/zabbix-3.0.1/database/mysql/images.sql
mysql> source /usr/local/zabbix-3.0.1/database/mysql/data.sql

如果是初始化agent,就不需要导入任何脚本。

配置zabbix server

因为上面我在编译加了–prefix=/usr/local/zabbix-3.0.1/参数,所以配置文件路径在:/usr/local/zabbix-3.0.1/etc。如果在编译时没有加这个参数,默认配置文件在/usr/local/etc/。

[root@console mysql]# cd /usr/local/zabbix-3.0.1/etc/


修改server配置文件,备份原配置文件,然后去掉注释:

[root@console etc]# mv zabbix_server.conf zabbix_server.conf.bak
[root@console etc]# cat zabbix_server.conf.bak | grep -v "#" | grep -v "^$" > zabbix_server.conf

最终改后的配置文件内容如下:

[root@console etc]# cat zabbix_server.conf
LogFile=/var/log/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=wisedu
# 注意mysql服务器上的mysql.sock文件路径,一般zabbix server和mysql在同一台就改为/tmp/mysql.sock,否则不修改
DBSocket=/tmp/mysql.sock
Timeout=4
LogSlowQueries=3000


修改agent配置文件:

[root@console etc]# mv zabbix_agentd.conf zabbix_agentd.conf.bak
[root@console etc]# cat zabbix_agentd.conf.bak | grep -v "#" | grep -v "^$" > zabbix_agentd.conf

agent配置文件内容如下:

[root@console etc]# cat zabbix_agentd.conf
LogFile=/var/log/zabbix_agentd.log
Server=114.55.29.246
# 主动向zabbix server发送监控内容
ServerActive=114.55.29.246
Hostname=console
Include=/usr/local/zabbix-3.0.1/etc/zabbix_agentd.conf.d/*.conf

创建日志文件:

[root@console etc]# touch /var/log/{zabbix_server.log,zabbix_agentd.log} 
[root@console etc]# chmod 777 /var/log/zabbix_*

启动zabbix server

[root@console ~]# cd /usr/local/zabbix-3.0.1/sbin/
[root@console sbin]# ./zabbix_server

查看10051端口,端口默认是10051。
一大堆进程。

可以查看启动日志:

[root@log sbin]# tail -100f /var/log/zabbix_server.log

常见启动错误:
./zabbix_server: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解决:

# ln -s /usr/local/mysql/lib/libmysqlclient.so.18  /usr/lib64/

停止zabbix server

# killall -9 zabbix_server

安装zabbix web界面(和server端装在一台机器)

zabbix的服务端程序是用php写的,因此需要一个支持LAMP架构的服务器平台。Web服务器可以使用Httpd或者Nginx。
鉴于zabbix最近爆出来的漏洞:zabbix的jsrpc的profileldx2参数存在insert方式的SQL注入漏洞,攻击者可以无需授权登陆即可登陆zabbix管理系统,也可通过script等功能轻易直接获取zabbix服务器的操作系统权限。建议升级到最新的zabbix-3.0.4版本,或者使用nginx,这样可以在server段加入如下配置处理这个漏洞:

if ($request_uri ~ ^(.+\.php)(.*)$) {
        set $req $2;
}
if ($req ~* "union[+|(%20)]") {
        return 503;
}
if ($req ~* "and[+|(%20)]") { 
       return 503;
}
if ($req ~* "select[+|(%20)]") { 
       return 503;
}
if ($req ~* "or[+|(%20)]") { 
       return 503;
}
if ($req ~* "concat[+|(%20)]") { 
       return 503;
}
if ($req ~* "cost[+|(%20)]") { 
       return 503;
}

使用httpd

安装httpd

我这里使用httpd2.4。

[root@console ~]# yum install -y httpd

部署zabbix web

将ZABBIX安装目录下 frontends/php 下面的php源代码文件拷贝到web服务器html文件目录下面。
先建立一个子目录,将zabbix终端php文件拷贝到该子目录里面,执行下面的命令:

[root@console ~]# cd /var/www/html/
[root@console html]# mkdir /var/www/html/zabbix
[root@console html]# cp -ar /usr/local/zabbix-3.0.1/frontends/php/* ./zabbix/

启动httpd:

[root@console html]# systemctl start httpd.service
[root@console ~]# systemctl enable httpd.service

访问:
http://114.55.29.246/zabbix/
(1) You should see the first screen of the frontend installation wizard.

(2) 检查环境

查看到几处不符合要求,需修改该PHP文件配置文件参数:

# vim /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai

然后重启httpd和mysql,不重启mysql下面sql连接时还是会报错。

[root@console ~]# systemctl restart httpd.service 
[root@console ~]# service mysqld restart

重新访问,全部依赖都通过:

(3) 输入之前在MYSQL后台设置的zabbix数据库信息:

DBName=zabbix
DBUser=zabbix
DBPassword=wisedu


报错:

解决:

[root@console ~]# mkdir /var/lib/mysql
[root@console ~]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

点击下一步,还是报错:

解决:

mysql> grant all on zabbix.* to 'zabbix'@'console' identified by 'wisedu';
mysql> flush privileges;

如果以上方法试过后,还报下面的错误:

Error connecting to database: Can't connect to MySQL server on ''114.55.29.246''

请检查SELinux是否关闭。

[root@console ~]# /usr/sbin/sestatus -v


关闭SELinux:

[root@console ~]# setenforce 0
[root@console ~]# vim /etc/sysconfig/selinux



(4) 输入zabbix服务器端的详细信息

(5) 检查一下设置情况

(6) 下载配置文件,并把它放置在/var/www/html/zabbix/conf/ 目录下

Alternatively, you can install it manually:
Download the configuration file
Save it as “/var/www/html/zabbix/conf/zabbix.conf.php”

[root@console conf]# cd /var/www/html/zabbix/conf/
[root@console conf]# chown zabbix.zabbix zabbix.conf.php

(7) 点击Finish

(8) Zabbix frontend is ready! The default user name is Admin, password zabbix.

使用Nginx

安装openresty

log2主机上安装openresty

# yum install readline-devel pcre-devel openssl-devel gcc -y
# cd /usr/local
# tar zxf openresty-1.9.7.3.tar.gz
# cd openresty-1.9.7.3/
# ./configure --with-http_stub_status_module
# gmake && gmake install

安装完成后,在/usr/local/下多了个openresty目录,nginx部署安装在/usr/local/openresty/nginx。
将nginx加入系统服务:
Redhat7之前的版本:
(1) 上传nginx启动脚本到/etc/init.d/目录下
(2) 授权脚本执行权限

[root@log2 init.d]# chmod a+x nginx

(3) 加入系统服务

[root@log2 init.d]# chkconfig --add nginx

(4) nginx开启自启动

[root@log2 init.d]# chkconfig nginx on

(5) nginx启停重载

service nginx start/stop/restart/reload

Redhat7版本:
(1) 启动服务单元
把写好的nginx.service放到/etc/systemd/system/目录下。
(2) 设置开机启动

[root@log2 ~]# systemctl enable nginx.service

(3) 启动/停止/重载nginx服务

systemctl start/stop/reload nginx.service

启动php

Nginx是没办法以模块化方式或者CGI方式跟php结合的,php就可以工作在fastcgi模式下。即单独启动为服务。

# vim /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai

启动:

# systemctl start php-fpm.service

部署zabbix web

将zabbix安装目录下 frontends/php 下面的php源代码文件拷贝到web服务器html文件目录下面。

# mkdir /usr/local/openresty/nginx/html/zabbix
# cp -ar /usr/local/zabbix-3.0.1/frontends/php/* /usr/local/openresty/nginx/html//zabbix/

修改nginx配置文件:

# cd /usr/local/openresty/nginx/conf/
# cp nginx.conf nginx.conf.bak

配置文件内容:

#user  nobody;
worker_processes  1;

error_log  logs/error.log info;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
        worker_connections  1024;
}

http {
        include       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  logs/access.log  main;

        proxy_buffer_size  128k;
        proxy_buffers   32 32k; 
        proxy_busy_buffers_size 128k;

           sendfile        on;
           #tcp_nopush     on;

        #keepalive_timeout  0;
        keepalive_timeout  65;

        #gzip  on;

           server {
                listen       80;
                    server_name  zabbix.wisedu.com;

                     #charset koi8-r;

                     access_log  logs/zabbix.access.log  main;

                      index index.php index.html index.html;
                     root /usr/local/openresty/nginx/html;

                  if ($request_uri ~ ^(.+\.php)(.*)$) {
                                set $req $2;
                     }
                     if ($req ~* "union[+|(%20)]") {
                                return 503;
                     }
                     if ($req ~* "and[+|(%20)]") { 
                                return 503;
                    }
                     if ($req ~* "select[+|(%20)]") { 
                                return 503;
                    }
                     if ($req ~* "or[+|(%20)]") { 
                                return 503;
                    }
                     if ($req ~* "concat[+|(%20)]") { 
                                return 503;
                    }
                     if ($req ~* "cost[+|(%20)]") { 
                                return 503;
                    }

                     location / {
                                try_files $uri $uri/ /index.php?$args;
                      }

                     location ~ .*\.(php)?$ {
                                fastcgi_buffer_size 128k;
                                fastcgi_buffers 4 256k;
                                fastcgi_busy_buffers_size 256k;
                              expires -1s;
                              try_files $uri =404;
                                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                                include fastcgi_params;
                                fastcgi_param PATH_INFO $fastcgi_path_info;
                                fastcgi_index index.php;
                                fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name;
                                fastcgi_pass 127.0.0.1:9000;
                    }

                       error_page   500 502 503 504  /50x.html;
                   location = /50x.html {
                                 root   html;
                       }
                }
}

浏览器访问url进行安装,安装过程和上面httpd一样。

切割Nginx日志

如果开启Nginx的debug日志,就需要考虑到切割日志:

# cd /etc/logrotate.d/
# vim nginx
/usr/local/openresty/nginx/logs/*.log {
        notifempty
        weekly
        rotate 4
        nocompress
        copytruncate
        postrotate
        service nginx reload
        endscript
}

其他主机安装agent

log1和log2主机安装agent。

添加用户

Zabbix agent也不能用root用户运行,要以zabbix用户身份运行。否则:

# ./zabbix_agentd
zabbix_agentd [15530]: user zabbix does not exist
zabbix_agentd [15530]: cannot run as root!

添加用户:

# groupadd zabbix
# useradd -g zabbix zabbix
# id zabbix
uid=1000(zabbix) gid=1000(zabbix) groups=1000(zabbix)

安装agent

从console主机上将zabbix源代码包copy过来:

[root@console local]# scp -p zabbix-3.0.1.tar.gz root@114.55.29.86:/usr/local/
[root@console local]# scp -p zabbix-3.0.1.tar.gz root@114.55.29.241:/usr/local/

# yum install -y gcc
# cd /usr/local/
# tar zxf zabbix-3.0.1.tar.gz
# cd zabbix-3.0.1/
# ./configure --prefix=/usr/local/zabbix-3.0.1/ --enable-agent
# make && make install

配置agent

# cd /usr/local/zabbix-3.0.1/etc/
# mv zabbix_agentd.conf zabbix_agentd.conf.bak
# cat zabbix_agentd.conf.bak | grep -v "#" | grep -v "^$" > zabbix_agentd.conf

修改后的agent配置文件内容如下:

# cat zabbix_agentd.conf
LogFile=/var/log/zabbix_agentd.log
Server=114.55.29.246
# 主动向zabbix server发送监控内容
ServerActive=114.55.29.246
# 本机的主机名或IP地址
Hostname=log1
Include=/usr/local/zabbix-3.0.1/etc/zabbix_agentd.conf.d/*.conf

创建日志文件:

# touch /var/log/zabbix_agentd.log
# chmod 777 /var/log/zabbix_agentd.log

启动agent

# cd /usr/local/zabbix-3.0.1/sbin/
# ./zabbix_agentd

查看端口是否监听,默认agent端口是10050:

# lsof -i :10050

可以查看日志:

# tail -100f /var/log/zabbix_agentd.log

停止agent

# killall -9 zabbix_agentd

具体的监控配置实例见下一篇文章。