源码包下载
zlib :
http://www.zlib.net/fossils/zlib-1.2.8.tar.gz
pcre:
https://ftp.pcre.org/pub/pcre/pcre-8.39.tar.gz
boost:
https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
nginx:
http://nginx.org/download/nginx-1.10.2.tar.gz
mysql:
http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17.tar.gz
libmcrypt:
ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
php:
http://ftp.ntu.edu.tw/php/distributions/php-5.6.27.tar.gz
fping:
http://fping.org/dist/fping-3.12.tar.gz
zabbix:
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.4.10/zabbix-3.4.10.tar.gz
zabbix简介:
zabbix重要组件说明:
1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;
2)database storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3)web interface:zabbix的GUI接口;
4)proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5)agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端;
另外,zabbix server、proxy、agent都有自己的配置文件以及log文件,重要的参数需要在这里配置,后面会详细说明。
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
zabbix常用的监控架构平台
1、server-agentd模式:
这个是最简单的架构了,常用于监控主机比较少的情况下。
2、server-proxy-agentd模式:
这个常用于比较多的机器,使用proxy进行分布式监控,有效的减轻server端的压力。
查看系统版本:
[root@admin ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
安装编译工具及库文件
yum -y install make apr* autoconf automake curl-devel gcc gcc-c++ openssl openssl-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* libtool* libxml2 libxml2-devel patch libcurl-devel bzip2-devel freetype-devel cmake bison ncurses ncurses-devel
Mysql安装
shell> tar -zxvf boost_1_59_0.tar.gz -C /usr/local/
添加用户:
shell> groupadd mysql #添加mysql用户组
shell> useradd -r -g mysql -s /bin/false mysql #添加mysql用户
解压软件包:
shell> tar -xf mysql-5.7.17.tar.gz
删除已安装数据库
shell> rpm -qa|grep mysql
创建目录
shell> mkdir /usr/local/mysql
shell> mkdir /usr/local/mysql/data
shell> chown -R mysql.mysql /usr/local/mysql/
配置mysql预编译参数
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/data/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost_1_59_0
· -DCMAKE_INSTALL_PREFIX:安装路径
· -DMYSQL_DATADIR:数据存放目录
· -DWITH_BOOST:boost源码路径
· -DSYSCONFDIR:my.cnf配置文件目录
· -DEFAULT_CHARSET:数据库默认字符编码
· -DDEFAULT_COLLATION:默认排序规则
· -DENABLED_LOCAL_INFILE:允许从本文件导入数据
· -DEXTRA_CHARSETS:安装所有字符集
编译安装:
shell> make -j `grep processor /proc/cpuinfo | wc -l` && make install
-j参数表示根据CPU核数指定编译时的线程数,可以加快编译速度。默认为1个线程编译,经测试单核CPU,1G的内存,编译完需要将近1个小时
初始化系统数据库
shell> cd /usr/local/mysql/
shell> cd bin/
./mysqld --initialize --user=mysql --datadir=/usr/local/data/ --basedir=/usr/local/mysql --socket=/tmp/mysql.sock
如果使用–initialize参数初始化系统数据库之后,会在~/.mysql_secret文件中生成root用户的一个临时密码,同时也在初始化日志中打印出来了,如下图红圈中所示:
shell> ./mysql_ssl_rsa_setup
shell> chown -R root .
shell> chown -R mysql data
复制并修改mysql配置文件
shell> cp support-files/my-default.cnf /etc/my.cnf
shell> vim /etc/my.cnf
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/data
socket=/tmp/mysql.sock
user=mysql
配置mysql服务
shell> cd support-files/
shell> cp -a mysql.server /etc/init.d/mysqld
shell> chkconfig --add mysqld# 添加到系统服务
shell> chkconfig mysqld on # 开机启动
shell> service mysqld start
shell> service mysqld stop
shell> service mysqld restart
修改数据库密码:
shell> cd bin/
安装Nginx
解压zlib
[root@Admin ~]# tar zxf zlib-1.2.8.tar.gz
说明:不需要编译,只需要解压就行。
解压pcre
[root@Admin ~]# tar zxf pcre-8.39.tar.gz
[root@Admin ~]# groupadd www
[root@Admin ~]# useradd -g www www -s /sbin/nologin
解压源码包:
[root@Admin ~]# tar zxf nginx-1.10.2.tar.gz
[root@Admin nginx-1.10.2]# cd nginx-1.10.2/
./configure --prefix=/usr/local/nginx1.10 --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/root/pcre-8.39 --with-zlib=/root/zlib-1.2.8 --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www && make && make install
[root@Admin nginx-1.10.2]# ln -s /usr/local/nginx1.10/sbin/nginx /usr/local/sbin/
[root@Admin nginx-1.10.2]# nginx
[root@Admin nginx-1.10.2]# netstat -antp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 99063/nginx: master
安装php
[root@Admin ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@Admin ~]# cd libmcrypt-2.5.7/
[root@Admin libmcrypt-2.5.7]# ./configure && make && make install
[root@Admin libmcrypt-2.5.7]# cd
[root@Admin ~]# tar zxf php-5.6.27.tar.gz
编译PHP
[root@Admin ~]# cd php-5.6.27/
./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-zlib --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl && make && make install
[root@Admin php-5.6.27]# cp php.ini-production /etc/php.ini
编辑配置文件/etc/php.ini ,修改后的内容如下:
找到:;date.timezone = 修改为:date.timezone = Asia/Shanghai #设置时区
找到:expose_php = On 修改为:expose_php = Off #禁止显示php版本的信息
找到:short_open_tag = Off 修改为:short_open_tag = On //支持php短标签
找到:post_max_size = 8M修改为:post_max_size = 16M //上传文件大小
找到:max_execution_time = 30修改为:max_execution_time = 300 //php脚本最大执行时间
找到:max_input_time = 60修改为:max_input_time = 300 //以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制
找到:;always_populate_raw_post_data = -1修改为:always_populate_raw_post_data = -1
找到:;mbstring.func_overload = 0修改为:mbstring.func_overload= 0
创建php-fpm服务启动脚本:
[root@Admin php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@Admin php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@Admin php-5.6.27]# chkconfig --add php-fpm
[root@Admin php-5.6.27]# chkconfig php-fpm on
提供php-fpm配置文件并编辑:
[root@Admin php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@Admin php-5.6.27]# vi /usr/local/php5.6/etc/php-fpm.conf
修改内容如下:
pid = run/phpfpm.pid
user = www
group = www
listen =127.0.0.1:9000
pm.max_children = 300
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers =50
启动php-fpm服务:
[root@Admin php-5.6.27]# service php-fpm start
Starting php-fpm done
[root@Admin php-5.6.27]# netstat -anpt | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 110892/php-fpm: mas
配置nginx支持php
[root@Admin php 5.6.27]# cat /usr/local/nginx1.10/conf/nginx.conf
user www www;
worker_processes 4;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /status {
stub_status on;
}
}
}
[root@Admin php-5.6.27]# nginx -t
nginx: the configuration file /usr/local/nginx1.10/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx1.10/conf/nginx.conf test is successful
[root@Admin php-5.6.27]# killall -s HUP nginx
至此,LNMP部署完毕。
安装zabbix
admin端的操作
zabbix服务器端要提前安装好LNMP环境(mysql,nginx,php5的安装目录均是/usr/local)
创建Zabbix运行的用户:
[root@Admin ~]# groupadd zabbix
[root@Admin ~]# useradd -g zabbix zabbix
安装libcurl和net-snmp:
yum -y install net-snmp net-snmp-devel curl-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel OpenIPMI-devel libssh2-devel pcre* libevent-devel
注:OpenIPMI-devel 和libssh2-devel软件包使用centos在线yum软件源安装
安装Fping:
[root@Admin ~]# tar zxf fping-3.12.tar.gz
[root@Admin ~]# cd fping-3.12/
[root@Admin fping-3.12]# ./configure && make && make install
[root@Admin fping-3.12]# chown root:zabbix /usr/local/sbin/fping
[root@Admin fping-3.12]# chmod 4710 /usr/local/sbin/fping
安装Zabbix Server:
[root@Admin fping-3.12]# cd
[root@Admin ~]# tar -xf zabbix-3.4.10.tar.gz
[root@Admin ~]# cd zabbix-3.4.10/
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi
注意:编译时最好带上--enable-java这个参数,方便后续监控tomcat程序所用。--with-ssh2 是不需要在客户端服务器上面安装Zabbix agent,如果需要使用ssh检查,需要在编译的时候加上这项,最低需要libssh2 1.0.0版本,需要安装ssh开发包--with-openipmi用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、电源供应等。如果添加了--enable-proxy, 那么会生成get和sender两条命令. 如下, 用于接收agent发生过来的信息, 同时发送给server.
[root@Admin zabbix-3.4.10]# make && make install
添加系统软连接
[root@Admin zabbix-3.4.10]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/
[root@Admin zabbix-3.4.10]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
ZabbixServer配置与启动创建Zabbix数据库和MySQL用户:
mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected, 1 warning (0.00 sec)
导入Zabbix初始数据:切换到zabbix的解压目录下
[root@Admin zabbix-3.4.10]# cd database/mysql/
[root@Admin mysql]# pwd/root/zabbix-3.4.10/database/mysql
[root@Admin mysql]# lsdata.sql images.sql schema.sql
[root@Admin mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Admin mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Admin mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
编辑/usr/local/zabbix/etc/zabbix_server.conf:
[root@Admin mysql]# grep -v "^#" /usr/local/zabbix/etc/zabbix_server.conf | grep -v "^$"
LogFile=/usr/local/zabbix/logs/zabbix_server.log
PidFile=/usr/local/zabbix/logs/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBPort=3306F
pingLocation=/usr/local/sbin/fping
[root@Admin mysql]# mkdir -p /usr/local/zabbix/logs
[root@Admin mysql]# chown -R zabbix:zabbix /usr/local/zabbix/
启动Zabbix Server:
[root@Admin mysql]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
解决方法:
在ld.so.conf中加入/usr/local/mysql/lib
[root@Admin mysql]# find / -name libmysqlclient.so.20
/root/mysql-5.7.13/libmysql/libmysqlclient.so.20
/usr/local/mysql/lib/libmysqlclient.so.20
[root@Admin mysql]# vi /etc/ld.so.conf
[root@Admin mysql]# cat /etc/ld.so.confi
nclude ld.so.conf.d/*.conf
/root/mysql-5.7.13/libmysql/
/usr/local/mysql/lib/
加载/etc/ld.so.conf文件生效并再次启动zabbix_server
[root@Admin mysql]# ldconfig
[root@Admin mysql]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
[root@Admin mysql]# netstat -anpt | grep zabbix_server
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 15820/zabbix_server
添加开机启动脚本
[root@Admin ~]# cd zabbix-3.4.10/
[root@Admin zabbix-3.4.10]# cp misc/init.d/fedora/core/zabbix_server /etc/rc.d/init.d/zabbix-server
[root@Admin zabbix-3.4.10]# cp misc/init.d/fedora/core/zabbix_agentd /etc/rc.d/init.d/zabbix-agent
[root@Admin zabbix-3.4.10]# chmod +x /etc/rc.d/init.d/zabbix-server
[root@Admin zabbix-3.4.10]# chmod +x /etc/rc.d/init.d/zabbix-agent
[root@Admin zabbix-3.4.10]# chkconfig --add zabbix-server
[root@Admin zabbix-3.4.10]# chkconfig --add zabbix-agent
[root@Admin zabbix-3.4.10]# chkconfig zabbix-server on
[root@Admin zabbix-3.4.10]# chkconfig zabbix-agent on
修改zabbix开机启动脚本中的zabbix安装目录
[root@Admin zabbix-3.4.10]# vi /etc/rc.d/init.d/zabbix-server #编辑服务端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix安装目录
PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid #pid文件路径
:wq! #保存退出
[root@Admin zabbix-3.4.10]# vi /etc/rc.d/init.d/zabbix-agent #编辑客户端配置文件
BASEDIR=/usr/local/zabbix/
#zabbix安装目录PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid #pid文件路径
:wq! #保存退出
[root@Admin zabbix-3.4.10]# /etc/init.d/zabbix-server stop
Stopping zabbix_server [ OK ]
[root@Admin zabbix-3.4.10]# netstat -antp | grep zabbix
[root@Admin zabbix-3.4.10]# /etc/init.d/zabbix-server start
Starting zabbix_server [ OK ]
[root@Admin zabbix-3.4.10]# netstat -antp | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 17223/zabbix_server
配置zabbix web页面在安装目录将frontends拷贝到指定的web root:
[root@Admin zabbix-3.4.10]# pwd/root/zabbix-3.4.10
[root@Admin zabbix-3.4.10]# cp -r frontends/php/ /usr/local/nginx1.10/html/zabbix
[root@Admin zabbix-3.4.10]# chown -R www:www /usr/local/nginx1.10/html/zabbix/
注:/usr/local/nginx/html为Nginx默认站点目录 www为Nginx运行账户注:PHP需要至少开启扩展:
gd,bcmath,ctype,libXML,xmlreader,xmlwriter,session,sockets,mbstring,gettext,mysql
如下,查看是否包括了上面所提到的扩展模块
[root@Admin zabbix-3.4.10]# /usr/local/php5.6/bin/php -m
[PHP Modules]
bcmath bz2 Core ctype curl date dom ereg fileinfo filter ftp gd gettext hash iconvjson libxml mbstring mcrypt mhash mysql mysqli openssl pcntl pcrePDO pdo_sqlite Phar posix Reflection session shmop SimpleXML soap socketsSPL sqlite3 standard sysvsem tokenizer xml xmlreader xmlrpc xmlwriter zip zlib
[Zend Modules]
安装web
访问Web界面http://localhost/zabbix,进行相关web配置,配置完成后使用默认用户admin(密码:zabbix)登陆即可
解决zabbix绘图中出现中文乱码问题:
a.从windows下控制面板->字体->选择一种中文字库例如“楷体”
并且将之前的字体文件DejaVuSans.ttf移动到别处
c.然后,接着修改代码include/defines.inc.php文件中的字体配置,将里面关于字体设置从DejaVuSans替换成simkai
vi替换技巧:%s/DejaVuSans/simkai
其中:simkai为字库名字,不包含ttf后缀
[root@Admin fonts]# cd /usr/local/nginx1.10/html/zabbix/
[root@Admin zabbix]# vi include/defines.inc.php
在vi编辑器的末行模式下输入%s/DejaVuSans/simkai
这样,修改后,zabbix监控图形中的中文字就不会出现乱码了
zabbix客户端的安装
既然要监控我们就要添加要监控的主机,在添加主机之前我们首先要在被检测主机上面安装agent,安装agent比较简单,我们也是按照安装server的流程,下载软件包,在编译的时候,我们只选择agent
10.10.10.50作为zabbix的被监控端,提供web和mysql应用
安装Zabbix,配置Zabbix agent:
[root@Admin ~]#tar zxf zabbix-3.4.10.tar.gz
[root@Admin ~]# cd zabbix-3.4.10/
[root@Admin zabbix-3.4.10]# ./configure --prefix=/usr/local/zabbix --enable-agent && make && make install
[root@Admin zabbix-3.4.10]# cp misc/init.d/fedora/core/admind /etc/init.d/
[root@Admin zabbix-3.4.10]# mkdir -p /usr/local/zabbix/logs
[root@Admin zabbix-3.4.10]# groupadd zabbix
[root@Admin zabbix-3.4.10]# useradd -g zabbix zabbix
[root@Admin zabbix-3.4.10]# chown -R zabbix:zabbix /usr/local/zabbix/
配置开机自动启动:
[root@Admin zabbix-3.4.10]# chkconfig --add admin
[root@Admin zabbix-3.4.10]# chkconfig admind on
修改zabbix开机启动脚本中的zabbix安装目录
vi /etc/rc.d/init.d/admin
#编辑客户端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix
安装目录
PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid
#pid文件路径
:wq! #保存退出
编辑zabbix_agentd.conf
[root@Admin zabbix-3.4.10]# vi /usr/local/zabbix/etc/zabbix_agentd.conf
内容如下:
[root@Admin zabbix-3.4.10]#grep -v "^#" /usr/local/zabbix/etc/zabbix_agentd.conf | grep -v "^$"
PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=10.10.10.50
ListenPort=10050ServerActive=192.168.0.103
Hostname=10.10.10.50
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
注:
其中Server和ServerActive都指定zabbixserver的IP地址,不同的是,前者是被动后者是主动。也就是说Server这个配置是用来允许110.10.10.50这个ip来我这取数据。而serverActive的10.10.10.50的意思是,客户端主动提交数据给他。
Hostname=XXX,这个定义的名字必须和web页面里面host的名字一样。
启动zabbix_agent:
[root@Admin zabbix-3.4.10]# /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
[root@Admin zabbix-3.4.10]# netstat -anpt | grep zabbix_agent
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 18142/zabbix_agent