Zabbix是一个企业级的、开源的、分布式的监控套件
Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题作出相应. Zabbix可以利用存储数据提供杰出的报告及图形化方式. 这一特性将帮助用户完成容量规划.
安装zabbix之前应保证服务器上已经搭建LAMP或LNMP,本文采用LNMP,并给出搭建LNMP的全过程,请不要参考我原来关于LNMP的安装文章,本文有部分不同是针对zabbix的,不然后边安装zabbix会出现问题。
LNMP安装
nginx安装:
到nginx官网下载nginx源码,源码安装nginx,安装之前需要先安装编译工具
解压nginx
安装nginx之前,创建一个nginx用户
进入nginx解压后目录
编译安装nginx,编译配置,执行
./configure --prefix=/usr/local/lnmp/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
编译配置完成后,然后执行
make && make install
如果上边两步都没有报错,则nginx就安装完成。然后将nginx加入到环境变量中,重新加载环境变量,这样的话,linux任何路径下都可以使用nginx的相关命令启动、关闭,平滑重启ngnix
启动nginx,在本地浏览器输入nginx IP地址访问,出现以下界面,这是nginx的默认首页
mysql安装:
源码安装mysql,安装之前需要安装部分包依赖,本文安装的mysql是用cmake
下载mysql源码包,解压mysql
进入mysql解压后目录,执行
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306
上边命令因博主手残,打错了部分,主要是目录路径,但不影响后边使用,后边的配置也是根据这个目录配置的,正确命令为
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql/ -DMYSQL_DATADIR=usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306
如果可以的话,建议将错就错,后边不会出问题,如果按照正确命令,需要改变目录路径,或者参考我的另一篇关于LNMP基本安装的博文。
然后执行make && make install,cmake安装看着比较炫酷
安装完成后,将mysql加入到环境变量中,修改/etc/profile,添加
新建mysql用户
进入mysql的安装目录下的support-file,执行
另外需要注意进入mysql的安装目录下的scripts/下执行以下命令,对数据库初始化,不然mysql启动会出错
回到mysql安装目录,执行
博主发现如果不修改data拥有者,会报如下错误
修改过data目录的owner,重新启动mysql服务,成功
安装php:
源码安装php,安装php之前需要安装libmcrypt,不然会报错,下载libmcrypt源码安装包,解压libmcrypt
进入libmcrypt解压目录下,执行
然后执行make && make install
然后进入libmcrypt解压目录下的libltdl,执行
./configure --prefix=/usr/local/lnmp/php/module/libmcrypt --enable-ltdl-install
然后执行make && make install
然后到libmcrypt解压目录下,执行
./configure --prefix=/usr/local/lnmp/php/module/mcrypt --with-libmcrypt-prefix=/usr/local/lnmp/php/module/libmcrypt
编译配置完成后,然后执行make && make install
查看libmcrypt的安装目录
博主参考的文档因为报错还要安装mhash,我的没有报错,但也安装了mhash,建议其他人也安装,下载mhash源码安装包,进入解压目录执行
编译配置完成后,然后执行make && make install完成安装
建立两个符号链接
修改/etc/ld.so.conf,添加
至此,libmcrypt的安装配置完成。
开始安装php,安装之前依旧要安装部分包依赖,直接yum安装即可
yum -y install libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel gmp-devel
下载php源码安装包,解压php源码安装包
进入php解压目录下,执行以下命令,注意,这里和我原来写的LNMP基础配置有部分不同,添加有--with-ldap和--enable-bcmath,这些不同主要是针对zabbix的。
./configure --prefix=/usr/local/lnmp/php/ --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=/usr/local/lnmp/mysql/data/mysql.sock/ --with-openssl --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --without-pear --with-gettext --with-gmp --with-ldap --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-bcmath --with-mysqli=/usr/local/lnmp/mysql/data/mysql.sock/bin/mysql_config --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt=/usr/local/lnmp/php/module/libmcrypt/ --with-mhash
安装报错
解决方案
再次执行编译配置
编译配置完成后,然后执行make && make install完成安装。
拷贝一份php配置文件到php安装目录下
拷贝一份php启动文件到/etc/init.d/下,这样系统才能识别php服务
到php安装目录下的etc/下,拷贝一份配置文件,和上边的配置文件不同哦
修改配置文件
启动php服务,成功
将php和nginx结合,修改nginx配置文件,把有关php的location块的注释删除,注意include行为fastcgi.conf
重新加载nginx配置文件
进入nginx安装目录下的html/下,新建index.php
访问nginx IP地址+/index.php
LNMP搭建完成
开始zabbix安装,可以源码安装,也可以rpm安装,zabbix两种方式都有提供,本文采用源码安装,下载zabbix源码安装包并解压
修改php安装目录下的etc/下的配置文件php.ini,注意date.timezone、mbstring.func_overload、max_execution、max_input_time、post_max_size行
进入mysql
新建数据库zabbix,赋予数据库zabbix权限
使用zabbix登录mysql,成功
进入zabbix解压目录,导入zabbix数据库到mysql下
注意三个数据库的导入顺序,不然导入会失败,这里提供两种方法,网上大多是是第一种,我一开始第一种失败了,采用的第二种,再次实验时又成功了
开始安装zabbix,安装之前需要安装相应的包依赖,但博主在一开始有好多就安装不上去,几经周折,找到一个比较好用的yum源,请先配置好yum源再进行后续操作
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
安装相应包依赖,这是博主试了好几次才确定所有要装的包依赖,应该比较全,如果后边还会报缺少什么包依赖,会在文章末尾提供部分解决方案。
yum -y install mysql-devel net-snmp-devel curl-devel perl-DBI php-gd php-mysql php-bcmath php-mbstring php-xm unixODBC-devel libssh2-devel libevent-devel openladp openldap-devel java-devel OpenIPMI-devel
./configure --prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-server --enable-proxy --enable-agent --enable-ipv6 --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi --with-unixodbc --with-ldap --with-ssh2 --enable-java
编译配置完成后,然后执行make && make install完成zabbix安装。
在这里make && make install时发现有报错,网上查询是jdk版本问题,但不做操作,后边安装依旧正常,不太清楚为什么,还希望知道的能指点一下,补充,我做的时候报错了后边没问题,后来重新做,不行,zabbix的配置文件找不到。
解决方案:查看jvm和jdk版本是否一致
发现不一致,找到问题根源,原因是我的是自己装的jdk,没有替换原来的jdk,这里还应注意,如果查询出来java版本和自己装的版本不一致,请删除/usr/bin/java,重新加载环境变量,此处错误和这个类似,以下为解决方案
再次make && make install,正常,etc下也有zabbix的配置文件
拷贝zabbix_server和zabbix_agentd的启动文件到/etc/init.d下,这样zabbix服务才能为系统识别,从而可以启动关闭
修改zabbix_server和zabbix_agentd的启动文件,主要是把BASEDIR改为zabbix安装目录
进入/etc/zabbix下,修改zabbix_server.conf配置文件
在这里博主出了一个小的错误,一开始配置的为
导致后边zabbix-server一直无法启动,所以要注意DBsocket的配置
博主是一个善于发现的人,在另一次安装时zabbix又报错,查看/tmp/zabbix_server.log日志,默认路径在这里,自己配的去你配置的路径下找
查询zabbix_server也未启动
解决方案,其实很简单,从日志来看是数据库权限问题,也是博主一开始对每个配置不理解,就是看文档配置,这里出错是因为前边数据库授权为localhost,因此,在zabbix_server.conf配置文件中,DBHost也应为localhost
重启zabbix_server,成功
修改zabbix_agentd.conf配置文件,hostname改为本机ip地址
如果其它机器作为server,则
启动zabbix_server和zabbix_agentd
将zabbix的网页部署文件拷贝到nginx的安装录下的html/文件夹下
在nginx的配置文件下加入zabbix的location块
重新加载nginx配置文件,在本地浏览器访问nginx服务器ip+/zabbix
成功,点击next step
要保证这个界面的全是ok才能点击next step,这里博主出了一点小问题分享给大家
报错:PHP option "always_populate_raw_post_data" must be set to "-1"
解决方案:
找到checkPhpAlwaysPopulateRawPostData()方法,大概在300多行,添加一行$current=-1;重启php
解决,继续安装,修改端口为3306,输入设置的zabbix数据库的密码
点击next step,输入你的zabbix监控平台的名字,可以随便命名,但尽量是有意义的名字,host改为本机IP或者不改也可以
点击next step,确认自己的配置
点击next step,生成配置文件,这里博主出了一点小问题
解决方案
刷新网页,成功,点击finish,完成配置
登录到zabbix管理平台,初始账号是Admin,初始密码是zabbix
部署成功
补充:
一、添加主机
点击configure,点击hosts,点击右上角新建主机,hostname自定义,选择对应group,在agent interface配置相应IP和端口。这里需要在agent配置文件指定zabbix server服务zabbix,勾选enabled,启用host
添加对应的模板,注意先点击小的add,然后点击大add才会添加成功
添加成功,可以看到availability为绿色即为添加成功,如果为红色把鼠标放置上去查看报错原因。
二、自定义监控
要求:定义一个监控项,监控用户数量,当用户数量超过3时,触发触发器,并自定义监控用户个数的图形
1.首先在agent主机添加key,后边定义监控项时都需要用到key。博主知之甚少,在这里简单介绍一点key的知识。
zabbix自定义key
UserParameter=key_name,command
例:UserParameter=mysql.version,mysql -V
zabbix的key其实就是当你调用这个key时,它会自动去执行你定义key时所定义的命令或脚本,把相应的参数返回给key
zabbix获取监控参数内容(查看key的可用性)
服务端:zabbix_get -s 目标服务器IP -p 端口 -k "key"
例:zabbix_get -s 192.168.174.131 -p 10050 -k "mysql.version"
客户端:zabbix_agentd -t key [-c 定义key所在的文件路径]
例:
zabbix_agentd -t mysql.ping
zabbix_agentd -t mysql.ping -c /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
key在整个系统唯一。
以上就是博主对zabbix的key的简单理解,下面开始添加自定义的key,进入zabbix agent的zabbix_agentd.d文件下,添加
执行who | wc -l,可以发现返回的是当前登录用户数量
在zabbix agent端开启zabbix_agent服务,然后在zabbix服务端get测试key是否可用
zabbix_get -s 192.168.174.131 -p 10050 -k login-user
当agent端没有相应key时会报错,提示没有相应key
2.在zabbix web端添加用户登录数量监控项
首先添加Templates(模板),也可以直接在其他模板添加items,这里新建一个专门用来监控用户数量的Template,便于对zabbix监控配置的理解。点击configure中的Template,点击add template。
点击applications,添加一个application
点击items,添加一个items,items是要指定你要监控的事件,需要通过定义好的key来实现。name可以任意填,但尽量是见名知意,key要填写你要监控的事件的key,本文监控用户登录数量,所以使用上边自己定义的key login-uer,application选择自己刚才添加的application。
点击triggers,添加一个triggers,trigger,触发器,当你监控的事件达到一个条件,触发的动作。name依旧自己定义,severity,级别,也是自己定义,当满足触发器条件时,报告状态是什么样的,这个就要看个人判断自己的定义的事件达到条件所造成的影响,expression,表达式,就是要定义触发器的条件。这个博主还在学习,暂时参考截图,勾选enabled,启用触发器。
点击graphs,添加一个graph。定义一个监控的图形。name自己定义,items选择自己刚才定义的item,其它默认选择,后续博主知道了再补充。
模板定义完成。
在定义key的agent主机上添加新建的模板
点击主机名,查看items,可以看到我们刚才定义的items,并且是enbled(可用的)
在监控的agent主机上新建几个用户,使得登录用户超过三个。可以在dashboard中看到相应的问题
恢复登录用户为正常状态
查看定义的用户登录的graph
实验成功,成功监控agent端用户登录数量以及图形显示出来。
三、zabbix后台数据库的高可用性
zabbix的许多数据都放在后台数据库,如何保证后台数据库的高可用性?mysql本身提供mysql主从同步,可以将zabbix的后台数据库做一个主从同步。具体过程这里就不在一一赘述,这里只把部署完成的结果展示出来。
环境:
mysql主服务器:192.168.174.128
mysql从服务器:192.168.174.135
在mysql从服务器上可以看到zabbix已经同步过来
现在停掉主服务器的mysql服务
service mysqld stop
修改zabbix server的配置文件,将数据库指向从服务器
重启zabbix server服务
/etc/init.d/zabbix_server restart
在这里博主打开网页上的zabbix报了一个错误,zabbix仍旧在尝试连接192.168.174.128的mysql,可是我明明已经在zabbix server的配置文件修改过了指向的后台数据库
排查过后发现是因为zabbix网页已经部署完成,在部署的过程也有指定数据库,最后生成了一个对应的配置文件,配置文件中指定的是192.168.174.128的mysql。
修改配置文件,将指定的mysql改为为从服务器
zabbix网页正常响应
实验成功,当zabbix的主mysql服务器挂掉之后,成功将数据库切换到从mysql服务器。如果可以,可以做一主多从的mysql集群,这样当主mysql服务器挂掉后,从mysql服务器接收主服务器的工作,将mysql同步到其它服务器。这里就不再操作。
分隔线:
zabbix部分安装报错及解决方案
zabbix源码安装报错1:configure: error: SSH2 library not found
解决方案:yum -y install libssh2-devel
zabbix源码安装报错2:configure: error: Invalid LDAP directory - unable to find ldap.h
解决方案:yum -y install openldap openldap-devel
zabbix源码安装报错3:configure: error: Unable to use libpcre (libpcre check failed)
网上解决方案:yum -y install pcre* 失败(报有其他错误,无法完成安装)
zabbix源码安装报错4:configure: error: MySQL library not found
解决方案:yum -y install mysql-devel
zabbix源码安装报错5:configure: error: unixODBC library not found
解决方案:yum -y install unixODBC-devel
zabbix源码安装报错6:configure: error: Invalid OPENIPMI directory - unable to find ipmiif.h
解决方案:yum -y install OpenIPMI-devel
zabbix源码安装报错7:configure: error: Unable to use libevent (libevent check failed)
解决方案:um -y install libxml2-devel libcurl-devel libevent-devel (主要是安装libevent-devel,其它几个可能用不到)
zabbix源码安装报错7:configure: error: Unable to find "javac" executable in path
解决方案:yum -y install java-devel
zabbix安装报错8:configure: error: Invalid Net-SNMP directory - unable to find net-snmp-config
解决方案:安装net-snmp-devel,yum -y install net-snmp-devel
rpm安装报错:Error: Package: zabbix-server-mysql-1.8.22-1.el6.x86_64 (epel)
Requires: libiksemel.so.3()(64bit)
解决方案:安装iksemel yum -y install iksemel-1.4-2.puias6.x86_64.rpm,需要下载iksemel-1.4-2.puias6.x86_64.rpm