一、zabbix服务部署及监控配置
官方网站:http://www.zabbix.com/
The Enterprise-class Monitoring Solution for Everyone
企业级监控解决方案
zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案
zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位解决存在的各种问题。
1、zabbix主要特点
安装与配置简单,学习成本低 支持多语言(包括中文) 免费开源 自动发现服务器与网络设备分布式监视以及 WEB 集中管理功能 可以无 agent 监视 用户安全认证和柔软的授权方式 通过 WEB 界面设置或查看监视结果 email 等通知功能
2、zabbix主要功能
监控CPU负载、内存使用、磁盘使用、网络状态、端口监视、日志监视、插件开发自定义
3、zabbix运行机制
Zabbix Server 和 Zabbix agent
Zabbix Server 可以通过 SNMP,Zabbix agent,Ping,端口监视等方法提供对远程服务器/网络状态的 监视,数据收集功能,可以在运行 Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,OX X,Windows 多 平台。
Zabbix Agent 安装在需要被监控的目标服务器上,主要完成对硬件信息与操作系统有关的内存,CPU 等信息收集。
Zabbix Server 可以单独监视远程服务器的服务状态,同时也可以与 Zabbix Agent 结合。可以轮询 Zabbix Agent 主动接收监视数据(trapping 传递 方式),同时还可以被动接收 Zabbix Agent 发送的数据。
4、zabbix运行过程图
Zabbix 支持多种网络方式下的监控,可以通过分布式的部署和安装监控代理 Zabbix,通过 C/S 模式采集数据,通过 B/S 模式在 Web 端展示和配置!Agent 监控端口 10050
服务端安装 Zabbix Server 和 Zabbix Agent 两个服务,客户端只安装 Zabbix Agent 一个服务,监控原理 就是 Zabbix Agent 服务将从系统中获取的相关数据传送给 Zabbix Server,然后 Zabbix Server 服务将数据分析之后以 PHP 页面展示出来!
二、zabbix服务搭建
1、环境需要的软件包
php-7.1.24
libmcrypt-2.5.8
mysql-5.7.19
nginx-1.14.1
zabbix-3.4.3
我们需要先构建 LNMP 的环境,因为 Zabbix 通过 PHP 页面展示,我们这里不详细介绍如何搭建LNMP环境,请参考之前的文档。
2、创建导入zabbix数据库
[root@xuegod110 ~]# mysql -uroot -p123456 -A
mysql> create database zabbix; #创建数据库
Query OK, 1 row affected (0.01 sec)
mysql> grant all on zabbix.* to zabbix@localhost identified by ‘zabbix’; #创建授权用户
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; #刷新权限
Query OK, 0 rows affected (0.00 sec)
3、解压缩zabbix包
[root@xuegod110 ~]# ls #上传zabbix包到服务器
zabbix-3.4.3.tar.gz 微软雅黑.ttf
[root@xuegod110 ~]# tar xf zabbix-3.4.3.tar.gz -C /usr/local/src/
4、导入数据库
注意导入的顺序,否则会报错
schema.sql------>images.sql------>data.sql
[root@xuegod110 ~]# cd /usr/local/src/zabbix-3.4.3/
[root@xuegod110 zabbix-3.4.3]# ls
aclocal.m4 compile configure.ac include Makefile.in README
AUTHORS conf COPYING INSTALL man sass
bin config.guess database install-sh misc src
build config.sub depcomp m4 missing upgrades
ChangeLog configure frontends Makefile.am NEWS
[root@xuegod110 zabbix-3.4.3]# cd database/
[root@xuegod110 database]# ls
ibm_db2 Makefile.am Makefile.in mysql oracle postgresql sqlite3
[root@xuegod110 database]# cd mysql/
[root@xuegod110 mysql]# ls
data.sql images.sql schema.sql
按照导入顺序,导入数据库:
[root@xuegod110 mysql]# mysql -uzabbix -pzabbix zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@xuegod110 mysql]# mysql -uzabbix -pzabbix zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@xuegod110 mysql]# mysql -uzabbix -pzabbix zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
如果在做分布式的环境中,Proxy 服务器只需要一个数据库 schema,代理者 agent 不需要数据库!Server 必须 三个数据库同时拥有
Zabbix同时支持很多类型数据库,可以通过查阅帮助: https://www.zabbix.com/documentation/2.4/manual/appendix/install/db_scripts
5、编译安装zabbix
1)先创建zabbix运行的系统用户
[root@xuegod110 mysql]# useradd -M -s /sbin/nologin zabbix
2)安装依赖包
[root@xuegod110 mysql]# yum install -y net-snmp-devel
[root@xuegod110 mysql]# yum -y install libevent libevent-devel
3)编译zabbix
[root@xuegod110 zabbix-3.4.3]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/var/lib/mysql/bin/mysql_config --with-net-snmp --with-libcurl
参数说明
–prefix= #指定路径
–enable-server #Server 支持
–enable-agent #支持 Zabbix 客户端
–with-mysql #指定 MySql 库可以选择自定路径 mysql_config,mysql_config 是命令,用于编译 mysql 客户端程序
–with-net-snmp #支持 snmp 协议,需要安装 net-snmp-devel 包
–with-libcurl #支持 CURL 功能,libcurl 主要功能就是用不同的协议连接不同的服务器
–libcurl #当前支持的协议有 http,https,ftp,gopher,telent,dict,file,和 ldap 协议
其他参数:
–enable-proxy #指的是支持 zabbix 代理服务器,zabbix proxy 是一个监控代理服务器,它收集到监控数据,选存放在缓冲区,保存的时间可以通过配置文件设定,然后再传送的 zabbix server。监控代理服务需要一个独立的数据库。
用 zabbix proxy 的好处:进程监控,当监控的位置通信不便时,当通讯上千台设备的时候,使用 zabbix_proxy 可以简化维护分布式监控,降低 zabbix server 的负载。
4)安装zabbix
根据提示,这里不需要执行make命令,直接执行make install
[root@xuegod110 zabbix-3.4.3]# make install
[root@xuegod63 zabbix-3.4.3]# ls /usr/local/zabbix/ #编译成功,产生如下目录
bin etc lib sbin share #/etc目录下存放的就是zabbix配置文件
6、配置zabbix server
[root@xuegod110 zabbix-3.4.3]# vim /usr/local/zabbix/etc/zabbix_server.conf
85 DBHost=xuegod63 #默认注释掉了,直接取消注释即可
95 DBName=zabbix #数据库用户,我们授权的用户也是zabbix
111 DBUser=zabbix #默认是 root,我们授权的用户是 zabbix
119 DBPassword=zabbix #密码我们授权的也是 zabbix
7、配置zabbix agent,监控服务器自身
监控本身,意思是本身作为服务器之外,自己也做自己的客户端,也要使用agentd这个代理者 配置文件中,有 agentd 和 agent 两个配置文件,前者是守护进程,后者依赖 xinetd
[root@xuegod63 zabbix-3.4.3]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
93 Server=127.0.0.1 #默认监控服务器自己,这三行不用改
134 ServerActive=127.0.0.1
145 Hostname=Zabbix server
改:280 # UnsafeUserParameters=0
为:280 UnsafeUserParameters=1 #允许所有的字符是在用户定义的参数,参数传递,也就是支持自定义脚本
其中 Server 和 ServerActive 都指定 zabbixserver 的 IP 地址,不同的是,前者是被动后者是主动。也就是说前者允许 127.0.0.1 这个 IP 来我这取数据。而 ServerActive 的 127.0.0.1 的意思是客户端主动提交数据给他。
8、启动服务
通过zabbix内置的启动服务文件,启动zabbix
[root@xuegod110 ~]# /usr/local/zabbix/sbin/zabbix_server
/usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
启动服务报错,解决方法:
将mysql的lib路径,添加到/etc/ld.so.conf文件内
[root@xuegod110 ~]# vim /etc/ld.so.conf
/var/lib/mysql/lib/ #添加这行内容到文件
[root@xuegod110 ~]# ldconfig #注意加载此文件,使之生效
再次启动服务
[root@xuegod110 ~]# /usr/local/zabbix/sbin/zabbix_server
将zabbix服务添加到开机启动
[root@xuegod110 ~]# echo /usr/local/zabbix/sbin/zabbix_server >> /etc/rc.local
因为,系统开机会读取此内容,我们将启动zabbix服务的命令写入到这个文件,实现开机自启动
查看服务是否启动
[root@xuegod110 ~]# netstat -antup | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 63711/zabbix_server
看到10051端口已监听,说明zabbix server已启动。服务端用10051端口、客户端用10050端口
9、通过zabbix启动脚本,启动zabbix
这里和上一步骤,作用相同,采用一种方式即可
zabbix启动脚本存在源码的解压目录中,如下
[root@xuegod110 ~]# cd /usr/local/src/zabbix-3.4.3/misc/init.d/
[root@xuegod110 init.d]# ls #可以看到这里支持多种类型的系统启动脚本
aix debian fedora freebsd gentoo README suse tru64 ubuntu
[root@xuegod110 init.d]# cd fedora/ #fedora类型在很多中情况下,都可以在Redhat系统使用
[root@xuegod110 fedora]# ls #其实这里的两个目录内的脚本都可以使用,core是zabbix自带的启动脚本;core5是第三方开源的启动脚本
core core5
[root@xuegod110 fedora]# cd core
[root@xuegod110 core]# ls
zabbix_agentd zabbix_server
我们将core目录下的两个脚本,复制到启动脚本目录/etc/rc.d/init.d
为什么要复制到这个目录,请参考Linux系统启动原理章节内容
[root@xuegod110 core]# cp ./* /etc/rc.d/init.d/
编辑zabbix_server和zabbix_agentd脚本,修改zabbix的运行路径
[root@xuegod110 core]# cd /etc/rc.d/init.d/
[root@xuegod110 init.d]# vim zabbix_server
22 BASEDIR=/usr/local/zabbix
[root@xuegod110 init.d]# vim zabbix_agentd
22 BASEDIR=/usr/local/zabbix
启动zabbix服务
两种方式,一种使用/etc/rc.d/init.d目录下的脚本启动
[root@xuegod110 ~]# /etc/rc.d/init.d/zabbix_server start
Reloading systemd: [ OK ]
Starting zabbix_server (via systemctl): [ OK ]
一种使用systemctl启动脚本
[root@xuegod110 ~]# systemctl restart zabbix_server.service
开机启动
[root@xuegod110 ~]# chkconfig zabbix_server on
[root@xuegod110 ~]# chkconfig zabbix_agentd on
三、编辑php页面控制文件,实现安装zabbix
默认配置文件没有写入到我们的Nginx的配置文件中,就是说nginx不能加载到zabbix页面,进行安装
1、复制zabbix安装配置向导页面到nginx目录下
[root@xuegod110 ~]# \cp -r /usr/local/src/zabbix-3.4.3/frontends/php/* /usr/local/nginx/html/ #加\表示,目标目录下如果存在相同文件或目录,直接覆盖,不提示输入y
2、修改nginx配置文件,让index.php文件成为默认首页文
[root@xuegod110 ~]# vim /usr/local/nginx/conf/nginx.conf
44 location / {
45 root html;
46 index index.php index.html index.htm; #添加index.php
47 }
重启php-fpm,使之生效
[root@xuegod110 ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
3、开始安装zabbix-web
1)浏览器输入:http://192.168.1.110/index.php
点击“Next Setp”
3)修改php.ini文件
[root@xuegod110 ~]# vim /usr/local/php/php.ini
改post_max_size = 8M
为post_max_size = 16M
改max_execution_time = 30
为max_execution_time = 300
改max_input_time = 60
为max_input_time = 300
改;date.timezone =
为 date.timezone = Asia/Shanghai #需要注意删除前面的;符号
4)重启php-fpm
[root@xuegod110 ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
5)修改完php配置文件,可以看到往下拉,还有一个LDAP的错误
6)编译ldap
如果提示没有安装PHP LDAP模块,为了不影响后面的功能,现在把这个模块重新编译安装进去:
可以单独把这个模块编译安装进来:
注意:这里的php源文件,是我们之前源码编译LNMP的时候,解压缩的,所以没有的话,需要再次解压缩下php的源码包
[root@xuegod110 php-7.1.24]# cd /usr/local/src/php-7.1.24/
[root@xuegod110 php-7.1.24]# cd ext/ldap/
[root@xuegod110 ldap]# ls #这里我们可以看到没有configure编译文件
config.m4 CREDITS ldap.mak php_ldap.h
config.w32 ldap.c LDAP_Win32_HOWTO.txt tests
我们执行如下命令,生成编译文件
[root@xuegod110 ldap]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20160303
Zend Module Api No: 20160303
Zend Extension Api No: 320160303
[root@xuegod110 ldap]# ls #这里可以看到,出现了编译文件
acinclude.m4 config.h.in config.w32 LDAP_Win32_HOWTO.txt php_ldap.h
aclocal.m4 config.m4 CREDITS ltmain.sh run-tests.php
autom4te.cache config.sub install-sh Makefile.global tests
build configure ldap.c missing
config.guess configure.in ldap.mak mkinstalldirs
编译ldap
[root@xuegod110 ldap]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-ldap
这里我们可以看到,最后一行报错,找不到ldap.h文件,返回的值是1,说明编译没有成功
解决方法:安装openldap的包和开发包
[root@xuegod110 ldap]# yum -y install openldap openldap-devel
安装完成后,我们使用rsync命令,同步库文件
[root@xuegod110 ldap]# rsync -avz /usr/lib64/libldap* /usr/lib
sending incremental file list
libldap-2.4.so.2 -> libldap-2.4.so.2.10.7
libldap-2.4.so.2.10.7
libldap.so -> libldap-2.4.so.2.10.7
libldap_r-2.4.so.2 -> libldap_r-2.4.so.2.10.7
libldap_r-2.4.so.2.10.7
libldap_r.so -> libldap_r-2.4.so.2.10.7
sent 320,887 bytes received 66 bytes 641,906.00 bytes/sec
total size is 734,112 speedup is 2.29
再次使用编译
[root@xuegod110 ldap]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-ldap #根据提示,可以看到编译成功
7)安装ldap
[root@xuegod110 ldap]# make && make install
8)将ldap.so添加到php的配置文件
添加后,php可以识别到已经安装了ldap
[root@xuegod110 ldap]# vim /usr/local/php/php.ini
extension=ldap.so #添加到文件最后即可
8)再次重启php-fpm服务
[root@xuegod110 ldap]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
可以看到环境已经ok
10)点击“Next step”
这里启动默认,不用修改即可,只用填写zabbix用户的密码
注意:这里Database host写localhost如果不行,可以改成127.0.0.1
10)点击“Next step”
11)点击“Next step”
12)点击“Next step”
如果写入失败,直接download这个配置文件,然后上传该配置到Linux主机上
点击“Download the configuration file”,下载php文件
将下载的php文件,移动到nginx如下目录
[root@xuegod110 ~]# ls
zabbix-3.4.3.tar.gz zabbix.conf.php
[root@xuegod110 ~]# mv zabbix.conf.php /usr/local/nginx/html/conf/
14)输入用户名和密码,进入zabbix-web界面
默认用户名和密码:admin/zabbix
15)修改web界面的语言
点击右上角的小人图标
可以看到界面已经更新为中文
16)启动zabbix-server的监控界面
点击配置----主机----停用的----启动主机(默认没有启动,点击后面红色的停用的,则启动)
17)在服务端上启动agentd服务
上面可以看到已启动,但是可用性选项都是灰色
[root@xuegod110 ~]# /etc/rc.d/init.d/zabbix_agentd start
Starting zabbix_agentd (via systemctl): [ OK ]
[root@xuegod110 ~]# netstat -antup | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 64635/zabbix_server
如果这里启动服务后,发现端口10050端口没有监听,那么我们直接使用zabbix自带的脚本启动
[root@xuegod110 ~]# /usr/local/zabbix/sbin/zabbix_agentd
[root@xuegod110 ~]# netstat -antup | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 75394/zabbix_agentd
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 64635/zabbix_server
18)再次刷新web页面,查看服务端监控的状态
19)查看监控的状态
点击检测中----图形—选择群主和主机、监控项目
20)界面乱码
可以看到下面显示的界面是乱码界面,我们可以上传字体文件到nginx的配置目录下
[root@xuegod110 ~]# ls /usr/local/nginx/html/fonts/
DejaVuSans.ttf
我们将上传的字符文件替换到这个目录下的这个文件
[root@xuegod110 ~]# mv 微软雅黑.ttf /usr/local/nginx/html/fonts/DejaVuSans.ttf
mv: overwrite ‘/usr/local/nginx/html/fonts/DejaVuSans.ttf’? y
[root@xuegod110 ~]# ls /usr/local/nginx/html/fonts/
DejaVuSans.ttf
四、配置监控远程主机
1、安装agent
在需要监控的服务器中安装agent
1)先安装运行zabbix的依赖包
[root@xuegod120 ~]# yum install -y curl curl-devel net-snmp net-snmp-devel perl-DBI gcc gcc-c++
2)创建运行zabbix的用户
[root@xuegod120 ~]# useradd -M -s /sbin/nologin zabbix
3)解压缩zabbix包
[root@xuegod120 ~]# tar xf zabbix-3.4.3.tar.gz -C /usr/local/src/
4)编译zabbix
[root@xuegod120 ~]# cd /usr/local/src/zabbix-3.4.3/
[root@xuegod120 zabbix-3.4.3]# ./configure --prefix=/usr/local/zabbix --enable-agent
##这里只用安装agent就可以
5)安装zabbix
[root@xuegod120 zabbix-3.4.3]# make install
6)启动Agent
[root@xuegod120 ~]# /usr/local/zabbix/sbin/zabbix_agentd
[root@xuegod120 ~]# netstat -antup | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 9772/zabbix_agentd
7)配置Agent使用脚本启动
[root@xuegod120 ~]# cp
/usr/local/src/zabbix-3.4.3/misc/init.d/fedora/core/zabbix_agentd /etc/init.d
注意:这里只用复制agent的脚本到系统启动目录即可
编辑脚本文件,指定zabbix的运行目录
[root@xuegod120 ~]# vim /etc/init.d/zabbix_agentd
22 BASEDIR=/usr/local/zabbix
设置开机启动
[root@xuegod120 ~]# chkconfig --add zabbix_agentd
[root@xuegod120 ~]# chkconfig zabbix_agentd on
2、配置Agnet配置文件
[root@xuegod120 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
93 Server=192.168.1.110 #指定zabbix服务端的地址
134 ServerActive=192.168.1.110 #指定zabbix服务端的地址
145 Hostname=xuegod120 #指定自己的主机名
280 UnsafeUserParameters=1 #取消注释,修改为1(默认0)
3、重启zabbix-agent服务
[root@xuegod120 ~]# systemctl restart zabbix_agentd 或者
[root@xuegod120 ~]# /usr/local/zabbix/sbin/zabbix_agentd 或者
[root@xuegod120 ~]# /etc/init.d/zabbix_agentd restart
Restarting zabbix_agentd (via systemctl): [ OK ]
三种启动方式,选择一种即可
[root@xuegod120 ~]# netstat -antup | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 9772/zabbix_agentd
3、在zabbix-server端上测试连通性
[root@xuegod110 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.1.120 -p10050 -k system.uname #指定agent的地址,获取agent端的系统类型和主机名
Linux xuegod120.com 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
5、添加完成后,查看监控主机状态
6、添加监控项目
通过比较zabbix servers 群组和Linux servers 群组,可以发现,默认的配置中Linux servers监控项比较少,下面手动添加监控项:
7、修改监控项目更新时间
筛选无触发器,出来很多监控项,默认都是启用状态,我们无需再次启动,下面修改自动发现的时间
自动发现规则里面有两项:文件系统探测和网络流量探测
默认更新时间是1小时,我们更新为10秒钟
一段时间后,再次来查看数据是否有更新
返回主页,可以看到整体的监控状态
7、设置Triger触发器值
设置triger触发器的值,找到Template OS Linux模板
找到当前主机应用的模板,并点击“自动发现规则”
8、自定义绘图颜色
找到主机对应的模板----修改模板对应的图形颜色
选择cpu jumps,来修改
总结:
zabbix_agent.conf 是用超级服务(xinetd)的方式来启动的,被动检查,只有 Server 说检查的时候才检查。
zabbix_agentd.conf是以独立进程的方式来启动的,一般使用这个来做配置,自动检查,自动提交 zabbix_server.conf Server 启动配置文件只有一个。
zabbix_get 是 Zabbix 中的一个程序,用于 Zabbix-Server 到 Zabbix-Agent 的数据获取,通常可以用来 检测验证 Agent 的配置是否正确。它的使用方法如下:
zabbix_get [-hV] -s [-p ] [-I ] -k
-h #远程 Zabbix-Agent 的 IP 地址或者是主机名。
-p #远程 Zabbix-Agent 的端口。
-I #本机出去的 IP 地址,用于一台机器中有多个网卡的情况。
-k #获取远程 Zabbix-Agent 数据所使用的 Key。
[root@xuegod110 ~]# zabbix_get -s 192.168.1.120 -k system.uname
zabbix_sender 与 get 相反,用来发送 Zabbix 服务器处理性能数据。该工具通常用于长时间运行的用户脚 本,用于定期发送可用性和性能数据。使用方法如下:
zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -T -i -r} [-c ]
参数说明:
-c --config #配置文件绝对路径
-z --zabbix-server #zabbix server 的 IP 地址
-p --port #zabbix server 端口.默认 10051
-s --host #主机名,zabbix 里面配置的主机名(不是服务器的 hostname不能使用)
ip 地址
-I --source-address #源 IP
-k --key #监控项的 key
-o --value #key 值
-i --input-file #从文件里面读取 hostname、key、value 一行为一条数据,使用空格作为分隔符,如果主机名带空格,那么请使用双引号包起来
-T --with-timestamps #一行一条数据,空格作为分隔符: ,配合 --input-file option,timestamp 为 unix 时间戳
-r --real-time #将数据实时提交给服务器
-v --verbose #详细模式, -vv 更详细