zabbix监控系统
一、zabbix 简介:
zabbix 是完全开源的工具,整合了 cacti 和 nagios 等特性
zabbix是一个基于web界面的提供分布式系统监控以及网络监控的企业级开源运维平台,也是目前国内互联网后用户使用最广泛的监控软件,大概85%以上企业在使用zabbix做监控方案,借助 Zabbix,可以很轻松地减轻运维人员们繁重的服务器管理任务,实现业务系统的持续运行
zabbix的入门容易、上手简单,功能强大且开源免费,zabbix易于管理和配置,能生成比较漂亮的数据图,其自动发现功能大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户更灵活进行数据在即,而分布式系统架构可以支持监控更多的设备,理论上,通过zabbix提供的插件式架构,可以满足企业的任何需求(部分插件功能会收费)
zabbix只要由2部分构成zabbix server和zabbix agent,可以组件zabbix proxy
zabbix server可以通过SNMp(简单网络管理协议),zabbix agent,fping端口监视等方法对远程服务器或网络状态完成监视,数据收集等功能。同时支持Linux以及Unix平台,Windows平台只能安装客户端
zabbix的优点:
- 支持多平台的企业级分布式开源监控软件(redhat、centons、Ubuntu、Debian)
- 安装部署简单,多种数据采集插件灵活集成
- 功能强大、可实现复杂多条件告警
- 自带画图功能,得到的数据可以绘成图形,以图像更直观的展示
- 提供多种api接口,支持调用脚本
- 出现问题时可以自动远程执行命令(需要agent设置权限)
缺点:
- 项目批量修改不方便
- 系统级别报警设置相对比较多,如果筛选的话报警邮件比较多,并且自定义的项目需要自己设置,过程不比较繁琐(可以去网上导入别人的模板来进行修改)
- 缺少数据汇总功能,如果无法查看一组服务器平均值,需要二次开发
- 客户端需要安装zabbix agent程序
Nagios:
Nagios是一款开源的企业级监控系统,能够实现对系统cpu、磁盘、网络硬件方面 参数的基本监控缪及smtp、pop3等各种基本的服务类型,另外通过安装插件和编写监控脚本,用户可以实现应用监控(功能比zabbix弱)
优点:
- 出错的服务器、应用和设备会自动重启,自动日志滚动
- 配置灵活,可以自定义shell脚本,通过分布式监控模式
- 支持以冗余方式进行主机监控,报警设置多样
- 命令重新加载配置文件无需打扰Nagios的运行
缺点:
- 事件控制台功能很弱,插件易用性差
- 对性能、流量等指标的处理不给力
- 看不到历史数据,只能看到报警事件,很难追查故障原因
- 配置复杂,初学者投入的时间、精力和成本比较大
Cacti:
近几年cacti和nagios已经基本被zabbix代替
Zabbix 的主要功能:
- 具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制)
- 支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)
- 支持分布式,能集中展示、管理分布式的监控点,扩展性强
- server 提供通用接口(api 功能) ,可以自己开发完善各类监控(根据相关接口编写程序实 现),编写插件容易,可以自定义监控项,报警级别的设置
- 数据收集,支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET自定义的检测;自定义收集数据的频率
- 灵活的触发器;可以定义非常灵活的问题阈值,称为触发器
- 高可定制的报警;发送通知,可定制的报警升级,收件人,媒体类型
- CPU 负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视等等
硬件监控:Zabbix IPMI Interface
系统监控:ZabbixAgent Interface Java
监控:Zabbix JMX Interface
网络设备监控:Zabbix SNMP Interface
应用服务监控:Zabbix Agent UserParameter
MySQL 数据库监控:percona-monitoring-plulgins
URL 监控:Zabbix Web 监控
zabbix 重要组件说明:
- zabbix server:负责接收 agent 发送的报告信息的核心组件,所有配置、统计数据及操作数 据都由它组织进行
- database storage:专用于存储所有配置信息,以及由 zabbix 收集的数据
- web interface:zabbix 的 GUI 接口
- proxy:可选组件,常用于监控节点很多的分布式环境中,代理 server 收集部分数据转发 到 server,可以减轻 server 的压力
- agent:部署在被监控的主机上,负责收集主机本地数据如 cpu、内存、数据库等数据发 往 server 端或 proxy 端
一个监控系统运行的大概的流程:
agentd 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server 将数据存储到数据库中,zabbix web 根据数据在前端进行展现和绘图
agentd 收集数据分为主动和被动两种模式:
- 主动:效率高,但数据可能丢失
主动模式是由zabbix agent主动采集书记并返回给zabbix server,不需要zabbix server及逆行干预,因此主动模式在一定程度上可以减轻zabbix server的压力
- 被动:比较消耗性能:
在被动模式中,zabbix server(或者proxy)询问agent数据,如cpu的负载情况,然后zabbix agent回送结果,zabbix server周期性的向agent索取数据,这种模式的最大问题就是会加大zabbix server的工作量,也是默认的工作模式
zaiibx监控原理:
zabbix通过c/s模式采集数据,通过b/s模式在web端展示和配置
被控制端:主机通过安装agrnt方式采集数据,网络设备通过SNMP方式采集数据
server端:通过收集snmp和agent发送的数据,写入数据库,再通过php+nginx(或者apache)在web前端展示
zabbix 常用的监控架构平台 :
- server-agentd 模式:
这个是最简单的架构了,常用于监控主机比较少的情况
2.server-proxy-agentd 模式:
这个常用于比较多的机器,使用 proxy 进行分布式监控,有效的减轻 server 端的压力
二、Zabbix 部署前的 LNMP 环境的搭建过程
安装nginx:
解压zlib和pcre:(不需要编译,只需要解压就行)
[root@localhost ~]# tar zxf zlib-1.2.8.tar.gz
[root@localhost ~]# tar zxf pcre-8.39.tar.gz
解压nginx,并编译安装:
先解决依赖:
[root@localhost nginx-1.14.0]# yum -y install openssl-devel
[root@localhost ~]# tar zxf nginx-1.14.0.tar.gz
[root@localhost ~]# cd nginx-1.14.0/
[root@localhost nginx-1.14.0]# ./configure --prefix=/usr/local/nginx1.14 --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
[root@localhost nginx-1.14.0]# make && make install
[root@localhost nginx-1.14.0]# ln -s /usr/local/nginx1.14/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.14.0]# nginx
[root@localhost nginx-1.14.0]# netstat -anput | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 50683/nginx: master
安装php:
安装依赖:
[root@localhost ~]# yum -y install libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel
安装php:
[root@localhost libmcrypt-2.5.7]# tar zxf libmcrypt-2.5.7.tar.gz
[root@localhost ~]# cd libmcrypt-2.5.7/
[root@localhost libmcrypt-2.5.7]# ./configure && make && make install
[root@localhost ~]# tar zxf php-5.6.27.tar.gz
[root@localhost ~]# cd php-5.6.27/
[root@localhost php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt=/usr/local/libmcrypt --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-curl
[root@localhost php-5.6.27]# make && make install
优化php并创建启动脚本:
[root@localhost php-5.6.27]# cp php.ini-production /etc/php.ini
[root@localhost php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chmod +x /etc/init.d/php-fpm
[root@localhost php-5.6.27]# chkconfig --add php-fpm
[root@localhost php-5.6.27]# chkconfig php-fpm on
[root@localhost php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@localhost php-5.6.27]# vim /usr/local/php5.6/etc/php-fpm.conf
修改内容如下:
pm.max_children = 300
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
启动php:
[root@localhost php-5.6.27]# /etc/init.d/php-fpm start
Starting php-fpm done
配置nginx支持php:
[root@localhost ~]# vim /usr/local/nginx1.14/conf/nginx.conf
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;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
} //去掉注释
创建php测试页:
[root@localhost ~]# vim /usr/local/nginx1.14/html/index.php
<?php
phpinfo();
?>
浏览器访问:192.168.1.10
安装MySQL:
这里使用脚本一键安装:
[root@localhost ~]# sh mysql.sh
Starting MySQL. SUCCESS!
mysql: [Warning] Using a password on the command line interface can be insecure.
至此,LNMP 部署完毕
三、监控系统 Zabbix-3.2.1 的安装
zabbix 服务器端要提前安装好 LNMP 环境(mysql,nginx,php5 的安装目录均是/usr/local)
创建 Zabbix 运行的用户:
[root@localhost ~]# groupadd zabbix
[root@localhost ~]# useradd -g zabbix zabbix
安装 libcurl 和 net-snmp:
[root@localhost ~]# 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@localhost ~]# tar zxf fping-3.12.tar.gz
[root@localhost ~]# cd fping-3.12/
[root@localhost fping-3.12]# ./configure && make && make install
[root@localhost fping-3.12]# chown root:zabbix /usr/local/sbin/fping
[root@localhost fping-3.12]# chmod 4710 /usr/local/sbin/fping
安装 Zabbix Server:
[root@localhost ~]# tar zxf zabbix-3.2.1.tar.gz
[root@localhost ~]# cd zabbix-3.2.1/
[root@localhost 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
[root@localhost zabbix-3.2.1]# make && make install
[root@localhost zabbix-3.2.1]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/
[root@localhost zabbix-3.2.1]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
--enable-java:方便后续监控 tomcat 程序所用
--with-ssh2 是不需要在客户端服务器上面安装 Zabbix agent,如果需要使用 ssh 检查,需要 在编译的时候加上这项,最低需要 libssh2 1.0.0 版本,需要安装 ssh 开发包
--with-openipmi 用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、 电源供应等
如果添加了--enable-proxy, 那么会生成get和sender两条命令. 如下, 用于接收agent发生过 来的信息, 同时发送给 server
zabbix的配置与启动:
创建 Zabbix 数据库和 MySQL 用户:
[root@localhost ~]# mysql -uroot -p123
mysql> create database zabbix character set utf8;
mysql> grant all on zabbix.* to zabbix@'localhost' identified by '123.com';
导入 Zabbix 初始数据:
[root@localhost ~]# cd zabbix-3.2.1/database/mysql/
[root@localhost mysql]# ls
data.sql images.sql schema.sql
导入的时候从右往左导入
[root@localhost mysql]# mysql -uzabbix -p123.com -h localhost zabbix < schema.sql
[root@localhost mysql]# mysql -uzabbix -p123.com -h localhost zabbix < images.sql
[root@localhost mysql]# mysql -uzabbix -p123.com -h localhost zabbix < data.sql
查看是否成功:
[root@localhost ~]# mysql -uroot -p123 mysql> use zabbix;
mysql> show tables;
修改配置文件:
[root@localhost ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
修改内容如下:
[root@localhost ~]# 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=123.com
DBSocket=/usr/local/mysql/mysql.sock
DBPort=3306
Timeout=4
LogSlowQueries=3000
创建相应的目录:
[root@localhost ~]# mkdir -p /usr/local/zabbix/logs/
[root@localhost ~]# chown -R zabbix:zabbix /usr/local/zabbix/
编辑/etc/ld.so.conf文件:
[root@localhost ~]# vim /etc/ld.so.conf
添加内容:
/usr/local/mysql/lib
刷新一下:
[root@localhost core]# ldconfig
拷贝zabbix脚本并修改:
[root@localhost ~]# cd zabbix-3.2.1/misc/init.d/fedora/core
[root@localhost core]# cp zabbix_server /etc/init.d/
[root@localhost core]# cp zabbix_agentd /etc/init.d/
[root@localhost core]# vim /etc/init.d/zabbix_server
修改以下内容:
BASEDIR=/usr/local/zabbix
PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid
启动zabbix:
[root@localhost ~]# /etc/init.d/zabbix_server start
Reloading systemd: [ 确定 ]
Starting zabbix_server (via systemctl): [ 确定 ]
[root@localhost ~]# netstat -anput | grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 74743/zabbix_serverr
配置 zabbix web 页面:
拷贝网页文件到nginx网页目录中:
[root@localhost ~]# cp -r zabbix-3.2.1/frontends/php/ /usr/local/nginx1.14/html/zabbix
浏览器访问zabbix:192.168.1.10/zabbix
进入zabbix web安装画面:
进入zabbix检测画面:
这里报错了,解决办法:
- PHP帖子的最小要求大小为16M(配置选项“ post_max_size”)。
- PHP脚本执行时间的最低要求限制为300(配置选项“ max_execution_time”)。
- PHP脚本的输入解析时间的最低要求限制为300(配置选项“ max_input_time”)。
- 未设置PHP的时区(配置参数“ date.timezone”)。
- PHP选项“ always_populate_raw_post_data”必须设置为“ -1”
修改/etc/php.ini文件:
[root@localhost ~]# vim /etc/php.ini
post_max_size = 16M //上传文件大小
max_execution_time = 300 //脚本最大执行时间
max_input_time = 300 //以秒为单位对通过 POST、GET 以及 PUT 方式接收数据时间进行限制
date.timezone = PRC //设置时区
always_populate_raw_post_data = -1
重启php:
[root@localhost ~]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
对数据库进行设置,这里如果数据库在本地的话端口可以使用 0:
这里又一个报错:
解决办法:
登录MySQL授权宿主机IP权限:
[root@localhost ~]# mysql -uroot -p123
mysql> grant all on zabbix.* to zabbix@'%' identified by '123.com';
点击 Next step 一下步进行 zabbix server 细节的设置 这一步可以默认 :
点击安装,安装完成后 如果没有错误就会进入完成画面:
无法创建配置文件:
解决办法:
点击Download the configuration file,将文件保存到/usr/local/html/zabbix/conf目录下
[root@localhost ~]# cd /usr/local/nginx1.14/html/zabbix/conf/
[root@localhost conf]# ls
maintenance.inc.php zabbix.conf.php zabbix.conf.php.example
点击 Finish 完成 使用 Admin 用默认密码 zabbix 登录:
至此 zabbix 的基础安装完成
显示简体中文界面:
在安装数据库时已经将 zabbix 库设置了 utf-8 字符 首先确定 zabbix 开启了中文支持功能:
登录到 zabbix 服 务 器 的 数 据 目 录 下 ( 前 面 部 署 的 zabbix 数据目录是/usr/local/nginx1.10/html/zabbix/),打开 locales.inc.php 文件 :
[root@localhost ~]# cd /usr/local/nginx1.14/html/zabbix/include/
[root@localhost include]# vim 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],
登陆 zabbix 后 , 点 击 右 上 角 的 “ 用户” 图 标 , 将 语 言 设 置 为 “ 中文” :
解决 zabbix 绘图中出现中文乱码问题:
从 windows 下控制面板->字体->选择一种中文字库例如“楷体”
把它拷贝到 zabbix 的 web 端的 fonts 目录下例如:/usr/local/nginx1.14/html/zabbix/fonts/:
[root@localhost ~]# cd /usr/local/nginx1.14/html/zabbix/fonts/
[root@localhost fonts]# ls
DejaVuSans.ttf simkai.ttf
修改代码 include/defines.inc.php 文件中的字体配置,将里面关于字体设置从 DejaVuSans 替换成 simkai :
[root@localhost ~]# vim /usr/local/nginx1.14/html/zabbix/include/defines.inc.php :%s/DejaVuSans/simkai/g //完成后保存退出
这样,修改后,zabbix 监控图形中的中文字就不会出现乱码了