一、 zabbix简介:

zabbix是完全开源的工具,整合了cactinagios等特性

附:SNMP(udp 161  udp 162)

众多网络工具都支持此协议,比如常见路由交换,常见OS

其既可以做管理端也可以做被管理端

snmp协议大致有3个版本分别是v1 v2 v3

无论是v1 v2 的安全性是比较差的,因为传输是明文的, V3的认证密码用MD5/SHA摘要算法加密

 

很多工具支持网络管理的功能,而对于非网络设备(操作系统),可以完全抛开snmp这种不安全的架构来实现监控的。所以很多工具都是控制端和agent架构,他们有专属的agent

Zabbix的主要功能:

具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制)

支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)

支持分布式,能集中展示、管理分布式的监控点,扩展性强

server 提供通用接口(api 功能)可以自己开发完善各类监控(根据相关接口编写程序实现),编写插件容易,可以自定义监控项,报警级别的设置。

数据收集支持 snmp(包括 trapping and polling )IPMIJMXSSHTELNET

自定义的检测;自定义收集数据的频率;

服务器/代理和客户端模式;

灵活的触发器;可以定义非常灵活的问题阈值,称为触发器;

高可定制的报警;发送通知,可定制的报警升级,收件人,媒体类型。

CPU负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视等等。

硬件监控:Zabbix IPMI Interface

系统监控:ZabbixAgent Interface

Java监控:Zabbix JMX Interface

网络设备监控:Zabbix SNMP Interface

应用服务监控:Zabbix Agent UserParameter 

MySQL数据库监控:percona-monitoring-plulgins   

URL监控:Zabbix Web 监控

zabbix重要组件说明:

1zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;

2database storage:专用于存储所有配置信息,以及由zabbix收集的数据;

3web interfacezabbixGUI接口;

4proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;

5agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端;

另外,zabbix serverproxyagent都有自己的配置文件以及log文件,重要的参数需要在这里配置,后面会详细说明。

一个监控系统运行的大概的流程是这样的:

agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:

主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy

被动:serveragent请求获取监控项的数据,agent返回数据。

zabbix常用的监控架构平台

1server-agentd模式:

这个是最简单的架构了,常用于监控主机比较少的情况下。

2server-proxy-agentd模式:

这个常用于比较多的机器,使用proxy进行分布式监控,有效的减轻server端的压力。

zabbix的系统架构:

wKiom1mAfdTQPESeAAIpR4Oyw8I708.png

Zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。借助Zabbix,可以很轻松地减轻运维人员们繁重的服务器管理任务,实现业务系统的持续运行。下面会逐步介绍Zabbix分布式监控系统的部署及使用

配置好IPDNS 、网关,确保使用远程连接工具能够连接服务器

zabbix监控服务器:192.168.130.76  #zabbix的服务端(若要监控本机,则需要配置本机的zabbix agent)

Zabbix agent被监控主机:192.168.130.78#zabbix的客户端(被监控端,需要配置Zabbix agent

二、Zabbix部署前的LNMP环境的搭建过程(脚本安装)


#!/bin/bash

#:lnmp  install

echo "使用yum源 (支持本地yum) "

echo "上传:

mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

nginx-1.10.2.tar.gz

pcre-8.39.tar.gz

zlib-1.2.8.tar.gz

libmcrypt-2.5.7.tar.gz

php-5.6.27.tar.gz"

echo "输入“yes or no"

read a

case $a  in 

yes) 

echo ""

;;

no)

exit 0

;;

esac

echo "mysql安装"

rpm -e --nodeps  mariadb &> /dev/null

cd /usr/src

tar zxf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz  &> /dev/null

mv mysql-5.7.18-linux-glibc2.5-x86_64/ /usr/local/mysql &> /dev/null

echo "1.二进制安装成功"

groupadd mysql &> /dev/null

useradd -r -g mysql -s  /bin/false mysql &> /dev/null

echo "2.创建用户组"

rm -rf  /etc/my.cnf

echo '

[mysqld]

#datadir=/var/lib/mysql

#socket=/var/lib/mysql/mysql.sock

server_id=1

port=3306

user=mysql

socket=/tmp/mysql.sock

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

pid-file=/usr/local/mysql/data/mysql.pid



# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd


[mysqld_safe]

log-error=/usr/local/mysql/data/mysql.err

#pid-file=/var/run/mariadb/mariadb.pid


#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

' > /etc/my.cnf

echo "3.编辑主配"

mkdir -p /usr/local/mysql/data &> /dev/null

chmod 750 /usr/local/mysql/data/ &> /dev/null

chown  -R mysql:mysql /usr/local/mysql/ &> /dev/null

echo  "4.创建目录,修改权限"

cd /usr/local/mysql/ &> /dev/null

bin/mysqld  --initialize-insecure  --user=mysql &> /dev/null

echo "5.初始化,空密码"

cp /usr/local/mysql/support-files/mysql.server   /etc/init.d/mysqld &> /dev/null

service mysqld start &> /dev/null

#echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile

#. /etc/profile &> /dev/null

ln -s /usr/local/mysql/bin/*  /usr/local/sbin

rm -rf /usr/src/mysql*

echo "6.设置mysql的root用户密码(123)"

mysqladmin -uroot password "123"



echo "nginx安装"


yum clean all &> /dev/null 

echo "1.nginx依赖包安装" 

yum -y install gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel &> /dev/null

cd /usr/src/

tar zxf zlib-1.2.8.tar.gz

tar zxf pcre-8.39.tar.gz

echo "2.nginx运行用户创建" 

groupadd www

useradd -g www www  -s /sbin/nologin 

cd /usr/src

echo "3.nginx源码包解压" 

tar zxf nginx-1.10.2.tar.gz &> /dev/null

cd nginx-1.10.2/

echo  "4.nginx 安装" 

./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=/usr/src/pcre-8.39 --with-zlib=/usr/src/zlib-1.2.8 --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www  &> /dev/null

make  &> /dev/null

make install &> /dev/null

if [ $? -eq 0 ]

then

echo "nginx安装成功" 

else

echo "nginx安装失败"

exit 1

fi

echo "5.优化nginx"

ln -s /usr/local/nginx1.10/sbin/nginx   /usr/local/sbin/ &> /dev/null 

nginx -t &> /dev/null 

echo "6.nginx服务脚本复制"

echo '#!/bin/bash

# chkconfig: 2345 99 20

# description: Nginx Service Control Script

PROG="/usr/local/nginx1.10/sbin/nginx"

PIDF="/usr/local/nginx1.10/logs/nginx.pid"

case "$1" in

start)

netstat -anplt |grep ":80" &> /dev/null &&pgrep "nginx" &> /dev/null

if [ $? -eq 0 ]

then

echo "Nginx service already running."

else

     $PROG -t &> /dev/null

if [ $? -eq 0 ] ; then 

       $PROG

echo "Nginx service start success."

else

     $PROG -t

fi

fi

   ;;

stop)

netstat -anplt |grep ":80" &> /dev/null &&pgrep "nginx" &> /dev/null

if [ $? -eq 0 ]

then

kill -s QUIT $(cat $PIDF)

echo "Nginx service stop success." 

else

echo "Nginx service already stop"

fi

   ;;

restart)

    $0 stop

    $0 start

    ;;

status)

netstat -anplt |grep ":80" &> /dev/null &&pgrep "nginx" &> /dev/null

if [ $? -eq 0 ]

then

echo "Nginx service is running."

else

echo "Nginx is stop."

fi

  ;; 

reload)

netstat -anplt |grep ":80" &> /dev/null &&pgrep "nginx" &> /dev/null

if [ $? -eq 0 ]

then

    $PROG -t &> /dev/null

if [ $? -eq 0 ] ; then

kill -s HUP $(cat $PIDF)

echo "reload Nginxconfig success."

else

      $PROG -t

fi

else

echo "Nginx service is not run." 

fi

    ;;

  *)

echo "Usage: $0 {start|stop|restart|reload}"

exit 1

esac' > /etc/init.d/nginx 

chmod +x  /etc/init.d/nginx

echo "7.修改nginx.conf文件"

rm -rf /usr/local/nginx1.10/conf/nginx.conf

echo '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;

        }

   }

} ' > /usr/local/nginx1.10/conf/nginx.conf

sed "s/   valid_referers none blocked  www.benet.com benet.com;/   valid_referers none blocked  `ifconfig | grep inet | head -1 | awk '{print $2}'`;/" -i  /usr/local/nginx1.10/conf/nginx.conf

sed "s/            fastcgi_cache cache_fastcgi;/#            fastcgi_cache cache_fastcgi;/" -i /usr/local/nginx1.10/conf/nginx.conf

echo "8.添加为系统服务"

chkconfig --add nginx

chkconfig nginx on

echo "9.启动Nginx服务"

service nginx start  &> /dev/null

netstat -anpt  | grep nginx

if [ $? -eq 0 ]

then

echo "nginx启动成功"

else

echo "nginx启动失败"

exit 1

fi

echo "10.停止防火墙"

systemctl  stop   firewalld.service   &> /dev/null



echo "PHP安装"

echo "1.安装依赖包"

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 &> /dev/null

if [ $? -eq 0 ]

then

echo "依赖包安装成功"

else

echo "依赖包安装失败"

exit 1

fi

echo "2.安装libmcrypt"

cd /usr/src/

tar zxf libmcrypt-2.5.7.tar.gz 

cd libmcrypt-2.5.7/

./configure   &> /dev/null

make &> /dev/null

make install &> /dev/null

if [ $? -eq 0 ]

then

echo "libmcrypt 安装成功"

else 

echo "libmcrypt 安装失败"

exit 1

fi

echo "3.安装php5.6"

cd /usr/src/

tar zxf php-5.6.27.tar.gz

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  &> /dev/null

make &> /dev/null 

make install &> /dev/null 

if [ $? -eq 0 ]

then

echo "php 安装成功"

else

echo "php 安装失败"

exit 1

fi

echo "4.php优化"

rm -rf /etc/php.ini

cp -rf /usr/src/php-5.6.27/php.ini-production /etc/php.ini

echo "修改php.ini"

sed "s/;date.timezone =/date.timezone = PRC/" -i /etc/php.ini

sed "s/expose_php = On/expose_php = Off/" -i /etc/php.ini

sed "s/short_open_tag = Off /short_open_tag = On /" -i /etc/php.ini

sed "s/post_max_size = 8M/post_max_size = 16M/" -i /etc/php.ini

sed "s/max_execution_time = 30/max_execution_time = 300/" -i /etc/php.ini

sed "s/max_input_time = 60/max_input_time = 300/" -i /etc/php.ini

sed "s/;always_populate_raw_post_data = -1/always_populate_raw_post_data = -1/" -i /etc/php.ini

sed "s/;mbstring.func_overload = 0/mbstring.func_overload = 0/" -i /etc/php.ini

rm -rf /etc/init.d/php-fpm

echo "添加fpm服务"

cp -rf /usr/src/php-5.6.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chmod +x /etc/init.d/php-fpm 

chkconfig --add php-fpm

chkconfig php-fpm on

echo "修改php-fpm.conf"

rm -rf /usr/local/php5.6/etc/php-fpm.conf

cp -rf /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf

sed "s/;pid/pid/" -i  /usr/local/php5.6/etc/php-fpm.conf 

sed "s/user = nobody/user = www/" -i  /usr/local/php5.6/etc/php-fpm.conf 

sed "s/group = nobody/group = www/" -i  /usr/local/php5.6/etc/php-fpm.conf 

sed "s/pm.max_children = 5/pm.max_children = 300/" -i  /usr/local/php5.6/etc/php-fpm.conf

sed "s/pm.start_servers = 2/pm.start_servers = 10/" -i  /usr/local/php5.6/etc/php-fpm.conf

sed "s/pm.min_spare_servers = 1/pm.min_spare_servers = 10/" -i  /usr/local/php5.6/etc/php-fpm.conf

sed "s/pm.max_spare_servers = 3/pm.max_spare_servers = 50/" -i  /usr/local/php5.6/etc/php-fpm.conf

echo "5.php-fpm启动"

service php-fpm start &> /dev/null

if [ $? -eq 0 ]

then

echo "启动成功"

else

echo "启动失败"

exit 

fi

netstat -anpt | grep 9000

echo "6.编写test1.php测试页"

echo '<?php

phpinfo();

?>

' > /usr/local/nginx1.10/html/test1.php



echo "6.编写test2.php测试页"

echo '<?php

$link=mysql_connect('127.0.0.1','root','123');

if($link) echo "ok";

mysql_close();

?> ' > /usr/local/nginx1.10/html/test1.php

至此,LNMP部署完毕。


三、监控系统Zabbix-3.2.1的安装

zabbix-server端的操作

zabbix服务器端要提前安装好LNMP环境(mysqlnginxphp5的安装目录均是/usr/local

创建Zabbix运行的用户:

[root@mysqla ~]#groupadd zabbix

[root@mysqla ~]#useradd -g zabbix zabbix

安装libcurlnet-snmp:

[root@mysqla ~]#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

注:OpenIPMI-devel libssh2-devel软件包使用centos在线yum软件源安装

安装Fping:

[root@mysqla ~]# tar zxf fping-3.12.tar.gz

[root@mysqla ~]# cd fping-3.12/

[root@mysqla fping-3.12]# ./configure && make && make install

[root@mysqla fping-3.12]# chown root:zabbix /usr/local/sbin/fping

[root@mysqla fping-3.12]# chmod 4710 /usr/local/sbin/fping

安装Zabbix Server:

[root@mysqla ~]# tar zxf zabbix-3.2.1.tar.gz

[root@mysqla ~]# cd zabbix-3.2.1/

[root@mysqla zabbix-3.2.1]# ./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, 那么会生成getsender两条命令. 如下, 用于接收agent发生过来的信息, 同时发送给server.

[root@mysqla zabbix-3.2.1]#make && make install

添加系统软连接

[root@mysqla ~]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/

[root@mysqla ~]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/

Zabbix Server配置与启动
创建Zabbix数据库和MySQL用户:

mysql> create database zabbix character set utf8;

Query OK, 1 row affected (0.01 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@mysqla zabbix-3.2.1]# cd database/mysql/

[root@mysqla mysql]# pwd

/root/zabbix-3.2.1/database/mysql

[root@mysqla mysql]# ls

data.sql  p_w_picpaths.sql  schema.sql

进行zabbix初始数据导入

[root@mysqla mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < schema.sql

[root@mysqla mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < p_w_picpaths.sql

[root@mysqla mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < data.sql

编辑/usr/local/zabbix/etc/zabbix_server.conf:

root@mysqla ~]# 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=3306

FpingLocation=/usr/local/sbin/fping

#mkdir -p /usr/local/zabbix/logs
#chown -R zabbix:zabbix /usr/local/zabbix

启动Zabbix Server:

# /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@mysqla zabbix-3.2.1]# cat /etc/ld.so.conf

include ld.so.conf.d/*.conf

/usr/local/mysql/lib

/usr/local/lib

[root@mysqla zabbix-3.2.1]# ldconfig

再次执行zabbix_server启动

# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf

[root@mysqla init.d]# netstat -anpt |grep zabbix_server

tcp    0  0 0.0.0.0:10051    0.0.0.0:*      LISTEN      27199/zabbix_server

添加开机启动脚本

[root@mysqla ~]# cd zabbix-3.2.1/

# cp misc/init.d/fedora/core/zabbix_server /etc/rc.d/init.d/zabbix_server

# cp misc/init.d/fedora/core/zabbix_agentd /etc/rc.d/init.d/zabbix_agentd

[root@mysqla zabbix-3.2.1]# chmod +x /etc/rc.d/init.d/zabbix_server

[root@mysqla zabbix-3.2.1]# chmod +x /etc/rc.d/init.d/zabbix_agentd

[root@mysqla zabbix-3.2.1]# chkconfig --add zabbix_server

[root@mysqla zabbix-3.2.1]# chkconfig --add zabbix_agentd

[root@mysqla zabbix-3.2.1]# chkconfig zabbix_server on

[root@mysqla zabbix-3.2.1]# chkconfig zabbix_agentd on

修改zabbix开机启动脚本中的zabbix安装目录

vi /etc/rc.d/init.d/zabbix_server #编辑服务端配置文件

BASEDIR=/usr/local/zabbix/ #zabbix安装目录

PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid    #pid文件路径

:wq! #保存退出

vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件

BASEDIR=/usr/local/zabbix/ #zabbix安装目录

PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid  #pid文件路径

:wq! #保存退出

[root@mysqla zabbix-3.2.1]# systemctl daemon-reload

[root@mysqla zabbix-3.2.1]# /etc/init.d/zabbix_server stop

Stopping zabbix_server (via systemctl):                    [  OK  ]

[root@mysqla zabbix-3.2.1]# netstat -anpt | grep zabbix

[root@mysqla zabbix-3.2.1]# /etc/init.d/zabbix_server start

Starting zabbix_server (via systemctl):                    [  OK  ]

[root@mysqla zabbix-3.2.1]# netstat -anpt | grep zabbix

tcp  0    0 0.0.0.0:10051   0.0.0.0:*  LISTEN      28106/zabbix_server

设置防火墙规则

[root@mysqla zabbix-3.2.1]# firewall-cmd --permanent --add-port=10051/tcp

success

[root@mysqla zabbix-3.2.1]# firewall-cmd --reload

success

配置zabbix web页面

在安装目录将frontends拷贝到指定的web root:

[root@mysqla ~]# cd /root/zabbix-3.2.1/

[root@mysqla zabbix-3.2.1]# cp -r frontends/php/ /usr/local/nginx1.10/html/zabbix

[root@mysqla zabbix-3.2.1]# chown  -R  www:www  /usr/local/nginx1.10/html/zabbix/

注:/usr/local/nginx/htmlNginx默认站点目录 wwwNginx运行账户

:PHP需要至少开启扩展:

gd,bcmath,ctype,libXML,xmlreader,xmlwriter,session,sockets,mbstring,gettext,mysql
如下,查看是否包括了上面所提到的扩展模块

[root@mysqla ~]# /usr/local/php5.6/bin/php -m

[PHP Modules]

bcmath

bz2

Core

ctype

curl

date

dom

ereg

fileinfo

filter

ftp

gd

gettext

hash

iconv

json

libxml

mbstring

mcrypt

mhash

mysql

mysqli

openssl

pcntl

pcre

PDO

pdo_sqlite

Phar

posix

Reflection

session

shmop

SimpleXML

soap

sockets

SPL

sqlite3

standard

sysvsem

tokenizer

xml

xmlreader

xmlrpc

xmlwriter

zip

zlib

安装web

访问Web界面http://192.168.31.225/zabbix,进行相关web配置,配置完成后使用默认用户admin(密码:zabbix)登陆即可

进入ZABBIX WEB安装画面

wKiom1mAfdXhYuu1AAB3FRSpf_c602.png

进入ZABBIX检测画面

wKioL1mAfdXRFiBxAAChf9MrvLE585.png

对数据库进行设置,这里如果数据库在本地的话端口可以使用0

wKiom1mAfdWge90GAACFIzC75MU248.png

点击Next step 一下步进行zabbix server 细节的设置  这一步可以默认

wKioL1mAfdayzejVAABXNZIMekc083.png

点击安装,安装完成后  如果没有错误就会进入完成画面

完成画面有设置文件放在服务器的位置,请记下来wKioL1mAfdfy5aBMAACBdsXC8lU115.png

wKiom1mAfdewnKzqAABhwS92bFw361.png

点击Finish 完成 

使用Admin  用默认密码 zabbix 登录

wKiom1mAgSaCErC3AAAm_IXi7iE083.png

登录后画面如下

wKioL1mAfdiwTcXJAACz2Uu-SrQ945.png

至此 ZABBIX的基础安装完成

注:

1. 显示简体中文界面

在安装数据库时已经将zabbix库设置了utf-8字符

首先确定zabbix开启了中文支持功能:
登录到zabbix服务器的数据目录下(前面部署的zabbix数据目录是/usr/local/nginx1.10/html/zabbix/),打开 locales.inc.php文件

[root@mysqla include]# pwd

/usr/local/nginx1.10/html/zabbix/include

[root@mysqla include]# vi locales.inc.php

function getLocales() {

return [

                'en_GB' => ['name' =>_('English (en_GB)'),     'display' => true],

                'en_US' => ['name' =>_('English (en_US)'),     'display' => true],

                'bg_BG' => ['name' =>_('Bulgarian (bg_BG)'),   'display' => false],

                'zh_CN' => ['name' =>_('Chinese (zh_CN)'),     'display' => true],

                'zh_TW' => ['name' =>_('Chinese (zh_TW)'),     'display' => false],

                'cs_CZ' => ['name' =>_('Czech (cs_CZ)'),       'display' => true],

                'nl_NL' => ['name' =>_('Dutch (nl_NL)'),       'display' => false],

 

登陆zabbix后,点击右上角的用户图标,将语言设置为中文

wKioL1mAfdnRfoWXAABi40KYpEQ160.png

按照如图选择Chinese(zh_CN)点击update

wKiom1mAfdmAQbMnAABY49Tz8pw431.png

解决zabbix绘图中出现中文乱码问题:

a.windows下控制面板->字体->选择一种中文字库例如楷体

wKioL1mAfdqC2k0GAAGDIjQkpUg224.png

b.把它拷贝到zabbixweb端的fonts目录下例如:/usr/local/nginx1.10/html/zabbix/fonts/,并且把TTF后缀改为ttf

[root@mysqla fonts]# pwd

/usr/local/nginx1.10/html/zabbix/fonts

[root@mysqla fonts]# ls

DejaVuSans.ttf  simkai.ttf

并且将之前的字体文件DejaVuSans.ttf移动到别处

c.然后,接着修改代码include/defines.inc.php文件中的字体配置,将里面关于字体设置从DejaVuSans替换成simkai  

vi替换技巧:%s/DejaVuSans/simkai
其中:simkai为字库名字,不包含ttf后缀

# cd/usr/local/nginx1.10/html/zabbix

# vi include/defines.inc.php

vi编辑器的末行模式下输入%s/DejaVuSans/simkai

这样,修改后,zabbix监控图形中的中文字就不会出现乱码了

四、zabbix客户端的安装

既然要监控我们就要添加要监控的主机,在添加主机之前我们首先要在被检测主机上面安装agent,安装agent比较简单,我们也是按照安装server的流程,下载软件包,在编译的时候,我们只选择agent

192.168.31.250作为zabbix的被监控端,提供webmysql应用

安装Zabbix,配置Zabbix agent:

[root@server1 ~]# tar zxf zabbix-3.2.1.tar.gz

[root@server1 ~]# cd zabbix-3.2.1/

[root@server1 zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-agent

[root@server1 zabbix-3.2.1]# make&& make install

[root@server1 zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/

[root@server1 zabbix-3.2.1]# mkdir -p /usr/local/zabbix/logs

[root@server1 zabbix-3.2.1]# groupadd zabbix

[root@server1 zabbix-3.2.1]# useradd -g zabbix zabbix

[root@server1 zabbix-3.2.1]# chown -R zabbix:zabbix /usr/local/zabbix/

配置开机自动启动:

[root@server1 ~]# chkconfig --add zabbix_agentd

[root@server1 ~]# chkconfig zabbix_agentd  on

修改zabbix开机启动脚本中的zabbix安装目录

vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件

BASEDIR=/usr/local/zabbix/ #zabbix安装目录

PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid  #pid文件路径

:wq! #保存退出

[root@server1 zabbix-3.2.1]# systemctl daemon-reload

编辑zabbix_agentd.conf

[root@server1 zabbix-3.2.1]# vi /usr/local/zabbix/etc/zabbix_agentd.conf

内容如下:

[root@server1 zabbix-3.2.1]# 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=192.168.31.225

ListenPort=10050

ServerActive=192.168.31.225

Hostname=192.168.31.250

Timeout=15

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/

注:

其中ServerServerActive都指定zabbixserverIP地址,不同的是,前者是被动后者是主动。也就是说Server这个配置是用来允许192.168.31.225这个ip来我这取数据。而serverActive192.168.31.225的意思是,客户端主动提交数据给他。

Hostname=XXX,这个定义的名字必须和web页面里面host的名字一样。

启动zabbix_agentd:

[root@server1 ~]# /etc/init.d/zabbix_agentd start

Starting zabbix_agentd (via systemctl):                    [  OK  ]

[root@server1 ~]# netstat -anpt | grep zabbix_agentd

tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      12926/zabbix_agentd

[root@server1 ~]# firewall-cmd --permanent --add-port=10050/tcp

success

[root@server1 ~]# firewall-cmd --reload

success

到此,zabbix3.2.1监控系统的基本环境安装完成

实现zabbix添加监测项

添加对Linux主机的监控

在浏览器中打开:http://192.168.31.225/zabbix

登录zabbix,先在配置”-“主机里添加主机监控,监控os资源:内存,cpuio,负载,带宽等.

登录zabbix,先在配置”-“主机单击创建主机wKiom1mAfdqj4P34AAAisY5sjwE981.png

点击主机标签,填写相关信息

wKiom1mAfdqg5lbwAABa3HO9RjY067.png

wKioL1mAfdvz_hoeAAAQkTNss44589.png

注意:下图中的主机名称要和zabbix_agentd.conf文件中设置的Hostname后面的名称一致!

主机名称:192.168.31.250

群组:Linux servers

agent代理程序接口ip192.168.31.250

已启用:勾选

其它选项默认即可

切换到模板

wKioL1mAgz_CBMXZAAAXMUach9o739.png

选择

选择:Template OS Linux

点添加

wKioL1mAfdvBj4xMAAAdstL7xkQ261.png

添加

wKiom1mAfdyTXYxoAAAdxW2jLh0745.png

至此,Zabbix监控Linux主机设置完成。

wKioL1mAfdzAoDngAABrDii0ku4861.png

配置过一段时间后,观察下监控图效果出来了没:

wKioL1mAfd3xXyqqAADjuvjIDbk892.png


zabbix3.0 server已自带mysql的模板了,只需配置好agent客户端,然后在web端给主机增加模板就行了。

Zabbix_agent客户端操作
1)首先在客户端的mysql里添加权限,即本机使用zabbix账号连接本地的mysql

mysql> grant all on *.* to zabbix@'localhost' identified by "123456”;
mysql> flush privileges;
2)在zabbix_agent服务目录下创建.my.cnf 连接文件
        zabbix安装目录是/usr/local/zabbix
[root@server1 ~]# cd /usr/local/zabbix/etc/
[root@server1 ~]# cat .my.cnf 
[client]
user=zabbix
password=123456

注意:

如果在数据库grant授权时,针对的是localhost,这个.my.cnf里面就不用加host参数了【如上配置】

但如果grant授权时针对的是本机的ip(如192.168.31.250),那么在.my.cnf文件里就要加上host参数进行指定了

即在.my.cnf文件就要加上:

host=192.168.31.250

socket= /usr/local/mysql/mysql.sock

user=zabbix
password=123456

(3)配置MySQLkey文件
    这个可以从zabbix3.2安装时的解压包里拷贝过来

zabbix_server服务端安装时解压目录

/root/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf  拷贝到zabbix_agent客户端上的/usr/local/zabbix/etc/zabbix_agentd.conf.d/ 目录下的
[root@server1 ~]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/

[root@server1 zabbix_agentd.conf.d]# pwd

/usr/local/zabbix/etc/zabbix_agentd.conf.d

# cp /root/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf  ./
[root@server1 zabbix_agentd.conf.d]# ls userparameter_mysql.conf

userparameter_mysql.conf
然后查看 userparameter_mysql.conf 文件,看到类似 HOME=/var/lib/zabbix 的路径设置,把路径全都替换为 /usr/local/zabbix/etc/,也就是上面的.my.cnf文件所在的目录路径。
另外,注意userparameter_mysql.conf 文件里的mysql命令路径(提前做好mysql的系统环境变量,以防mysql命令不被系统识别)

如下:

[root@server1 zabbix_agentd.conf.d]# cat userparameter_mysql.conf

# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.

 

# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].

# Key syntax is mysql.status[variable].

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/usr/local/zabbix/etc/ mysql -N | awk '{print $$2}'

 

# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].

# Key syntax is mysql.size[<database>,<table>,<type>].

# Database may be a database name or "all". Default is "all".

# Table may be a table name or "all". Default is "all".

# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".

# Database is mandatory if a table is specified. Type may be specified always.

# Returns value in bytes.

# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table

UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc/ mysql -N'

UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc/ mysqladmin ping | grep -c alive

UserParameter=mysql.version,mysql -V

4)按照上面修改完之后检查一下,然后重启zabbix_agent

[root@server1 ~]# pkill -9 zabbix_agent

[root@server1 ~]# netstat -anpt | grep zabbix_agent

[root@server1 ~]# /usr/local/zabbix/sbin/zabbix_agentd

[root@server1 ~]# netstat -anpt | grep zabbix_agent

tcp   0      0 0.0.0.0:10050   0.0.0.0:*    LISTEN      15400/zabbix_agentd

接着在zabbix_server服务端进行命令行测试[下面的192.168.31.250是客户端的ip

若下面报错

[root@localhost zabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.31.250 -p 10050 -k "mysql.status[Uptime]"

sh: mysql: command not found

解决方法:

userparameter_mysql.conf中关于mysql命令前面添加绝对路径

[root@mysqla ~]#/usr/local/zabbix/bin/zabbix_get -s 192.168.31.250 -p 10050 -k "mysql.status[Uptime]"

12593

[root@mysqla ~]#

如果出现类似这一串key的数字,就说明配置ok,服务端能监控到客户端的mysql数据了!
成功啦,之后在监控界面增加主机对应的MySQL模板就ok了。

注:zabbix_get命令介绍

参数说明:

-s --host:指定客户端主机名或者IP

-p --port:客户端端口,默认10050

-I --source-address:指定源IP,写上zabbix serverip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。

-k --key:你想获取的key

zabbix_get获取数据

获取负载

# zabbix_get -s 192.168.31.250 -p 10050 -k "system.cpu.load[all,avg15]"

获取主机名

# zabbix_get -s 192.168.31.250 -p 10050 -k "system.hostname"

5)登录zabbix监控界面,在配置”-“模板里可以看到自带的mysql监控模板

wKiom1mAfd7j0_E9AACQx2mDKhQ995.png

在相应主机监控配置里添加mysql的监控模版(zabbix自带的)即可。

wKioL1mAfd7gkim9AABb63rLtaU580.png

下面是mysql监控项的效果图:

1】监控mysql的带宽:在zabbix前端可以实时查看mysql发送接收的字节数。其中bytes received表示从所有客户端接收到的字节数,bytes sent表示发送给所有客户端的字节数。

wKiom1mAfd7wEQcIAAC6DUSLnAc116.png

2】监控mysql的操作状态:在zabbix前端可以实时查看各种SQL语句每秒钟的操作次数。

wKioL1mAfd-TIU4IAADbqo9ucu4116.png

zabbix3.2.1邮件报警设置:

Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常。

Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。

具体操作:

以下操作在Zabbix监控服务端进行

下载sendemail软件

然后安装那两个依赖包,命令是:

yum install perl-Net-SSLeay perl-IO-Socket-SSL -y

解压软件,然后将sendemail复制到/usr/local/bin/目录下,并加上可执行权限,然后修改用户和群组。

[root@mysqla ~]# tar zxf sendEmail-v1.56.tar.gz

[root@mysqla ~]# cd sendEmail-v1.56/

[root@mysqla sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail

[root@mysqla sendEmail-v1.56]# chown zabbix:zabbix /usr/local/bin/sendEmail

[root@mysqla sendEmail-v1.56]# ll /usr/local/bin/sendEmail

-rwxr-xr-x. 1 zabbix zabbix 80213 Nov 21 21:26 /usr/local/bin/sendEmail

执行# /usr/local/bin/sendEmail -h查看sendEmail的帮助

#/usr/local/bin/sendEmail -f bpcyh1@126.com -t bpcyh1@126.com -s smtp.126.com -u "hello" -o message-content-type=html -o message-charset=utf8 -xu bpcyh1@126.com -xp 123abc -m "abcfdd"

命令主要选项说明:
/usr/local/bin/sendEmail                     #命令主程序
-f  from@126.com                          #发件人邮箱
-t to@126.com                              #收件人邮箱
-s smtp.126.com                           #发件人邮箱的smtp服务器
-u "我是邮件主题"                               #邮件的标题
-o message-content-type=html          #邮件内容的格式,html表示它是html格式
-o message-charset=utf8                   #邮件内容编码
-xu from@126.com                       #发件人邮箱的用户名
-xp WEE78@12l$                             #发件人邮箱密码
-m "我是邮件内容"                             #邮件的具体内容

进入/usr/local/zabbix/share/zabbix/alertscripts/目录

然后在这个目录下创建报警脚本sendmail.sh

[root@mysqla alertscripts]# vi mail.sh

下面是脚本内容(涂颜色部分是你的邮箱和密码,-f-xu参数后面跟邮箱,-xp后面跟授权码)

#!/bin/bash

to=$1

subject=$2

body=$3

/usr/local/bin/sendEmail -o tls=auto -f bpcyh1@126.com -t "$to" -s smtp.126.com -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu bpcyh1@126.com -xp 123abc -m "$body" 

[root@mysqla alertscripts]# chmod +x mail.sh

执行脚本测试发邮件

[root@mysqla alertscripts]# ./mail.sh bpcyh1@126.com test 123

*******************************************************************

 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client

is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER

together with SSL_ca_file|SSL_ca_path for verification.

 If you really don't want to verify the certificate and keep the

connection open to Man-In-The-Middle attacks please set

SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.

*******************************************************************

at /usr/local/bin/sendEmail line 1906.

invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415

注:进行发送邮件测试时,出现了第一个报错

原因sendemail软件和perl5里面的ssl版本不兼容导致的,通过修改sendemail里面的内容可以解决这个问题。

解决方法:

sendemail1906行的内容,从

if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {

修改为

if (! IO::Socket::SSL->start_SSL($SERVER)) {

即不指定SSL的版本,让程序来自己选择

不管你使用的是163/126邮箱还是qq邮箱,你都必须开通pop3服务,而且126/qq邮箱还要求使用第三方客户端发送邮件是必须使用授权码登录,使用账号密码验证时,会出现下面图片中的错误。

sendEmail[5102]: ERROR => ERROR => SMTP-AUTH: Authentication to smtp.126.com:25 failed.

至于邮箱的授权码,自己登录126邮箱去设置就好。

经过上面两个问题的处理后就可以正常发送邮件如下所示显示成功提示

[root@mysqla alertscripts]# ./mail.sh bpcyh1@126.com test 123

Nov 21 22:50:47 mysqla sendEmail[5195]: Email was sent successfully!

zabbix web端配置

上面的邮件脚本配置好后,就要在web端添加报警媒介,在web页面的管理,报警媒介类型页面,点击右边的创建媒体类型

wKiom1mAfd-z2oZfAAA1e0j4C3Q635.png

进入创建页面,然后输入名称邮件报警脚本,类型选择脚本,名称选择mail.sh,点击添加按钮,添加三个脚本参数,分别是{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESAGE},分别对于mail.sh中的tosubjectbody。添加完成后点下面的添加按钮,我们的报警媒介就创建完成了

wKiom1mAfeDT1Jy6AABIQbhBjAE737.png

wKioL1mAfeCwZQNUAABNGZXO-G8928.png

创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择我们的用户admin也可新建一个用户,点击用户名就进入到用户配置界面。点击报警媒介,然后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后点击添加,就将创建好的报警媒介关联到我们的用户上面了。

wKioL1mAfeHgTK0JAAAnErgxhH4790.png

wKiom1mAfeHB0BW4AAAhfryzjSA230.png

现在需要做的是,创建一个触发动作,即系统出现故障时,触发这个动作,然后给我们的邮箱发送报警邮件。点击配置,选择动作,然后点击右边的创建动作。

在动作这一页名称中写入我们定义的动作名以及触发条件

wKioL1mAfeGxM39dAAAmfMoVJqU318.png

设置操作

wKiom1mAfeKhR4WXAABTqN4fhfg359.png

wKioL1mAfeLi4WXiAAAPq7rseJM452.png

步骤是1-3,也即是从1开始到3结束。一旦故障发生,就是执行Email.sh脚本发生报警邮件给zabbix用户。 
假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
如果改成1-00是表示不限制.无限发送  

设置“恢复操作”wKioL1mAfj7xkAc0AAA8rXQ7aBY469.png

添加好以后就可以看到我们添加的动作名,以及该动作已启用的状态。

wKiom1mAfj7hinIVAABNzSjNZHo961.png

报警测试

192.16831.250服务器的zabbix_agent进程关闭。

发现可以正常收到故障报警邮件

wKioL1mAfj-ixQmRAAGAMqaSAeM271.png

最后,点击报表“->”动作日志“,可以看到触发动作的次数(右边还看查看到邮件发送状态已发送)。wKiom1mAfj-wUbztAACBSbzRFxY451.png