本節內容:
- 實驗環境
- 安裝准備
- 安裝MySQL
- 安裝Zabbix3.0.1
- 其他主機安裝agent
一、實驗環境
主機名 | 操作系統版本 | 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嘗試編譯安裝也是可以的。
1.安裝依賴包
[root@console ~]# yum install net-snmp-devel libxml2-devel libcurl-devel libssh2-devel unixODBC-devel -y
2.安裝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
3.安裝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
4.編譯安裝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
5.初始化數據庫
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,就不需要導入任何腳本。
6.配置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_*
7.啟動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/
8.停止zabbix server
# killall -9 zabbix_server
9.安裝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; }
9.1 使用httpd
9.1.1 安裝httpd
我這里使用httpd2.4。
[root@console ~]# yum install -y httpd
9.1.2 部署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.
9.2 使用Nginx
9.2.1 安裝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
9.2.2 啟動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
9.2.3 部署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一樣。
9.2.4 切割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
1.添加用戶
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)
2.安裝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
3.配置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

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
4.啟動agent
# cd /usr/local/zabbix-3.0.1/sbin/ # ./zabbix_agentd
查看端口是否監聽,默認agent端口是10050:
# lsof -i :10050
可以查看日志:
# tail -100f /var/log/zabbix_agentd.log
5.停止agent
# killall -9 zabbix_agentd
具體的監控配置實例見下一篇文章。