Zabbix简介
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix由zabbix server与可选组件zabbix agent两部门组成。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视。
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
zabbix的主要特点:
- 安装与配置简单,学习成本低
- 支持多语言(包括中文)
- 免费开源
- 自动发现服务器与网络设备
- 分布式监视以及WEB集中管理功能
- 可以无agent监视
- 用户安全认证和柔软的授权方式
- 通过WEB界面设置或查看监视结果
- email等通知功能
等等
Zabbix主要功能:
- CPU负荷
- 内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视
官方也提供了安装资料:http://www.zabbix.com/wiki/howto/monitor
准备篇:
Web环境:Nginx+MySQL+PHP(或者apachse)
1.本次测试使用的是centos6.7版本(注意 此版本的php是默认5.3的, zabbix只能在5.5以上版本上运行,请提前更新yum源,避免出现异常)
2.yum install mysql-dev gcc net-snmp-devel curl-devel perl-DBI php-gd php-mysql php-bcmath php-mbstring php-xm(安装必要的中间件)
3.下载zabbix https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/ (可以根据最近的版本选择)
数据库篇:
1.本次测试使用的是centos yum安装的mysql
2.创建数据库
登录数据库,创建帐号和设置权限:
mysql> use mysql;
mysql>create database zabbix character set utf8;
mysql>grant all privileges on zabbix.* to zabbix@'127.0.0.1' identified by '123456';
3.导入数据
source /*/zabbix-3.0.1/database/mysql/schema.sql#导入脚本文件到zabbix数据库
source /usr/local/src/zabbix-2.2.6/database/mysql/images.sql #导入脚本文件到zabbix数据库
source /usr/local/src/zabbix-2.2.6/database/mysql/data.sql #导入脚本文件到zabbix数据库
注意:请按照以上顺序进行导入,否则会出错。
安装篇:
1.增加zabbix用户和组
#groupadd zabbix
#useradd -g zabbix -m zabbix
2.进入目录安装zbbix
cd /*/zabbix-3.0.1/
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy
#make
#make install
3.添加zabbix服务(centos6.7已经默认添加了此端口)
添加服务端口
vim /etc/services
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-agent 10050/udp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
zabbix-trapper 10051/udp # Zabbix Trapper
4.修改zabbix的配置
最新的zabbix3.0安装到目录后会自动生成etc配置文件,不用像以前copy文件到指定目录下了
进入/usr/local/zabbix/etc/
server:
LogFile=/tmp/zabbix_server.log
PidFile=/tmp/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=123456 #指定zabbix数据库密码
ListenIP=127.0.0.1 #服务器IP地址,所以由此看出zabbix是分布式的架构
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #zabbix运行脚本存放目录
agentd:
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1 #启用自定义key
PidFile=/tmp/zabbix_agentd.pid #进程PID
LogFile=/tmp/zabbix_agentd.log #日志保存位置
EnableRemoteCommands=1 #允许执行远程命令
Server=127.0.0.1 #agent端的ip 与服务器相同 被动模式----允许哪一台连接我
ServerActive =127.0.0.1 主动模式----我连接哪一台
Hostname=zhouli #因为在同一个服务器上,所以必须与zabbix创建的host name相同
(客户端安装)
自动 安装客户端
分享一个自动化安装zabbix客户端的方式,能快速安装zabbix客户端
zabbix.zip的传送门:
http://download.csdn.net/detail/zhoutimo/9581824
1.unzip -o zabbix.zip && sudo chmod -R 777 zabbix
2.sh zabbix/setup_zabbix_agent.sh all
3.sh zabbix/setup_zabbix_agent.sh conf
手动 安装客户端
①用户组建立
groupadd -g 1006 zabbix useradd -u 1006 -g 1006 -s /sbin/nologix -M zabbix
②安装
wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.0.5/zabbix-2.0.5.tar.gz
tar zxvf zabbix-2.0.5.tar.gz && cd zabbix-2.0.5
./configure --prefix=/usr/local/zabbix --enable-agent
make && make install
③添加服务端口和修改启动脚本
sed -i "/^# Local services/izabbix-agent 10050/tcp #Zabbix Agent" /etc/services
sed -i "/^# Local services/izabbix-agent 10050/udp #Zabbix Agent" /etc/services
cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
sed -i 's/BASEDIR=/usr/local/BASEDIR=/usr/local/zabbix/g' /etc/init.d/zabbix_agentd
chkconfig --add zabbix
_agentd chkconfig zabbix_agentd on
④修改zabbix_agent配置文件
vim /usr/local/zabbix/etc/zabbix_agentd.conf
Server=监控机的ip
Hostname=linux server1
PidFile=/var/tmp/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
⑤创建日志
mkdir /var/log/zabbix touch /var/log/zabbix/zabbix_agentd.log chown -R zabbix.zabbix /var/log/zabbix
⑥启动
/etc/init.d/zabbix_agentd start
5.配置启动脚本
zabbix3.0加入了自动开机和服务的脚本,安装后就可以用命令的方式启动zabbix服务
需要做的就是修改/etc/init.d/zabbix_service(/etc/rc.d/init.d/zabbix_server)和/etc/init.d/zabbix_agentd(/etc/rc.d/init.d/zabbix_agentd)
vi /etc/rc.d/init.d/zabbix_server #编辑服务端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix安装目录
:wq! #保存退出
vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件
BASEDIR=/usr/local/zabbix/ #zabbix安装目录
:wq! #保存退出
6.web站点
cp -r /usr/local/*/zabbix-3.0.1//frontends/php /var/www/html
chown apache.apache -R /var/www/html
备注:/var/www/html是apache默认站点目录
service zabbix_server start #启动zabbix服务端
service zabbix_agentd start #启动zabbix客户端
在浏览器中打开:
http://127.0.0.1/zabbix/setup.php
7.安装zabbix中文语言包
zabbix默认没开启,请手动开启
进入php目录,修改配置选项
# vim include/locales.inc.php
function getLocales() {
return array(
'en_GB' => array('name' => _('English (en_GB)'), 'display' => true),
'en_US' => array('name' => _('English (en_US)'), 'display' => true),
'bg_BG' => array('name' => _('Bulgarian (bg_BG)'), 'display' => true),
'zh_CN' => array('name' => _('Chinese (zh_CN)'), 'display' => true),
//原本这里为false,请改为true
...........代码省略掉........
);
}
使用篇:
1.时间不同步问题
有些服务器因为特殊需要或者本身服务器时间没有正确,请同步时间
设置如下:
echo “00 */1 * * * root /usr/sbin/ntpdate 192.168.1.135(时间提供商) ;/sbin/hwclock -w”>>/etc/crontab
每小时同NTP server进行一次时钟同步,并写入本机BIOS
2.发送报警服务的逻辑顺序
创建主机----创建项目(可以自定义键值,也就是自定义监控项)----创建触发器----创建动作(也就是发送的条件,发送接收人,发送时间,发送内容等)----创建接收人(定义接受的方式:短信,邮件)
3.API接口调用顺序
①获取zabbix认证SESSIONID
curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":"2.0","method":"user.login","params":{"user":"admin","password":"chuangyoukeji"},"auth":null,"id":0}' http://101.198.132.46/zabbix/api_jsonrpc.php
②通过SESSIONID 建立后续连接
③提交POST数据,格式为JSON
curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc": "2.0","method":"action.update","params":{"actionid":"8","status": "1"},"auth":"516a1ed75a7abbc9b35cf67f4aa86130","id": 0}'
http://101.198.132.46/zabbix/api_jsonrpc.php
4.关于磁盘监控
zabbix对于磁盘只有剩余量有监控,对IO性能和可用性并没有监控,可以自定义一些监控的项目,在客户端
/usr/local/zabbix/etc/zabbix_agentd.conf可以自定义如下:
UnsafeUserParameters=1
UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats|grep $1|head -1|awk '{print $$4}'
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats|grep $1|head -1|awk '{print $$7}'
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats| grep $1 | head -1|awk '{print $$8}'
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats|grep $1|head -1|awk '{print $$11}'
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats|grep $1|head -1|awk '{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats|grep $1| head -1|awk '{print $$13}'
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats| grep $1 | head -1|awk '{print $$6}'
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats|grep $1| head -1|awk '{print $$10}'
cat /proc/diskstats命令详解
第一至第三个域,分别是主设备号,次设备号,设备名称
第4个域:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
第5个域:合并读完成次数, 第9个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。
第6个域:读扇区的次数,成功读过的扇区总次数。
第7个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。
第8个域:写完成次数 ----写完成的次数,成功写完成的总次数。
第9个域:合并写完成次数 -----合并写次数。
第10个域:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
第11个域:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)。
第12个域:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小。
第13个域:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
第14个域:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。