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

进入zabbix解压目录下,执行

./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