实验环境
主机名 | 操作系统版本 | 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
- 安装依赖包
[root@console local]# yum install libaio* -y
- 解压安装
[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
- 新建用户
运行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)
- 修改mysql文件权限为mysql.mysql
[root@console local]# cd mysql [root@console mysql]# chown -R mysql.mysql ./*
- 执行初始化操作,生成一个系统库叫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
- 修改mysql目录下的文件属主为root,属组为mysql
[root@console mysql]# chown -R root .
- 修改data目录属主、属组为mysql
[root@console mysql]# chown -R mysql.mysql /data
- 拷贝修改mysql的配置文件
copy写好的my.cnf到/etc/目录下。 - 拷贝mysql的启动脚本,并加入系统服务
[root@console mysql]# cp support-files/mysql.server /etc/init.d/mysqld [root@console mysql]# chkconfig --add mysqld
- 启动mysql
[root@console mysql]# service mysqld start
- 配置环境变量,配置完重新打开一个shell
[root@console mysql]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH
- 修改root密码,因为一装完root密码是空的
[root@console ~]# mysql -uroot mysql
mysql> UPDATE user SET Password=PASSWORD('wisedu123') where USER='root'; mysql> FLUSH PRIVILEGES;
此时再以root登录就需要密码了。 - 删除两个匿名帐号
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源:
CentOS 7:# rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm # yum install php54w php54w-mysql php54w-mbstring php54w-bcmath php54w-gd php54w-xml -y
# 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
具体的监控配置实例见下一篇文章。