Zabbix监控服务部署
一、Zabbix介绍
1.监控概述
简单地理解,就是第一时间发现、定位并记录异常;复杂地理解,就是从外部/内部、业务/基础环境、功能/性能、预算/收入等各个方面对业务数据进行采集、展现和告苦的体系。对于运维人员,通过对各层次数据的展示和告警设置,快速、直观地发现和定位故障。按监控类型划分,可分硬件监控、系统监控、网络监控、应用监控等。
硬件监控:可以利用IPMI 监视服务器的物理特征如温度、电压、电扇工作状态、电源供应以及机箱入侵等。详细过程见http://www.ibm.com/developerworks/cn/linux/l-ipmi/。磁盘监控:MegaCli是一款管理维护硬件RAID软件。可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid上各磁盘状态,等等。http://blog.chinaunix.net/uid-25135004-id-3139293.html
系统监控:主要监控CPU 使用率、内存使用情况、磁盘io速度、传输和读/写比率等。可以利用nmon,帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。
网络监控:Smokeping、基调、博睿等。
2.Zabbix简介
zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbix agent。zabbixserver可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,OpenBSD,OS X等平台上。
zabbix官网地址:http://www.zabbix.com/download.php
手册:https://www.zabbix.com/documentation/3.0/manual/
3. zabbix的主要特点
多种数据收集方式(SNMP、IPMI、JMX)(SERVER、PROXY、AGENTS)
高级告警配置(自定义告警升级、告警信息支持使用宏macro变量、远程命令实现自动化动作)
实时绘图(自定义创建多监控项视图、网络拓扑、自定义面板screen,并允许在dashboard页面显示)
历史数据存储(数据存储在数据库中,可配置、内置数据清理机制)
多模板使用(模板中可以添加组监控、模板允许继承)
网络自动发现(自动发现网络设备、自动agent注册)
ZabbixAPI接口(提供程序级别的访问接口、第三方程序可很快接入)
4.Zabbix主要功能
- CPU负荷
- 内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视。
5.Zabbix进程构成
zabbix_agentd(客户端守护进程,手机客户端数据,如cpu负载、内存、磁盘使用等...)
zabbix_get(zabbix工具,单独使用,常用于在server或者proxy端执行,用户获取监控数据,通常用于排错)
zabbix_sender(用于向server端主动发送数据,常用于再执行耗时比较长的check时,导致zabbix超时,使用sender主动提交一次数据)
zabbix_proxy(代理守护进程,数据中转站,最后还要将获取到的数据提交到server里,一般跨机房、地区的环境需要使用到proxy)
zabbix_java_gateway(监控java时候使用到代理网关,类似于agent,最后数据还要提交给server)
zabbix_server(server端守护进程,server可以被动去搜集数据,也可以让客户端主动提交数据)
二、 Zabbix安装
要想搭建一个Zabbix的工作环境,需要从服务器入手。与服务器通信,管理员需要使用一个Zabbix前端界面,与Zabbix服务器和数据库进行通信。三个关键(界面、服务器和数据库)可以安装在同一台服务器上,但是如果你拥有一个更大更复杂的环境,将它们安装在不同的主机上也是一个选项。Zabbix服务器能够直接监控到同一网络中的设备,如果其他网络的设备也需要被监控,那还需要一台Zabbix代理服务器。
1.环境准备
zabbix-server:192.168.80.107
zabbix-client:192.168.80.103、192.168.80.107
[root@zabbix ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@zabbix ~]# uname -r 2.6.32-504.el6.x86_64
2.安装依赖
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum -y install httpd php mysql mysql-server mysql-devel php-pdo php-mysql gcc gcc-c++ glibc libxml2-devel curl curl-devel net-snmp net-snmp-devel libssh2-devel OpenIPMI-devel php-common php-gd perl-DBI php-xml php-mbstring php-bcmath /etc/init.d/httpd start /bin/cp /usr/share/mysql/my-medium.cnf /etc/my.cnf vi /etc/my.cnf #在[mysqld]中加入如下内容 default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci init-connect = 'SET NAMES utf8' character-set-server = utf8 /etc/init.d/mysqld start mysql create database zabbix character set utf8 collate utf8_bin; grant all on zabbix.* to zabbix@'localhost' identified by '123456'; flush privileges; exit yum install zabbix22-agent -y
3. 安装zabbix
1.编译安装
cd /server/tools/ wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.8/zabbix-2.4.8.tar.gz tar zxvf zabbix-2.4.8.tar.gz cd zabbix-2.4.8/database/mysql/ mysql -uzabbix -p123456 zabbix <schema.sql mysql -uzabbix -p123456 zabbix <p_w_picpaths.sql mysql -uzabbix -p123456 zabbix <data.sql cd ../.. ./configure --prefix=/usr/local/zabbix-2.4.8 --enable-server --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ssh2 make install #不需要make cd frontends/php/ cp -rp ./* /var/www/html/ chown -R apache.apache /var/www/html ln -s /usr/local/zabbix-2.4.8 /usr/local/zabbix vi /usr/local/zabbix/etc/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=123456 /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf 注意:安装zabbix22-agent,会自动添加zabbix用户,如果提前没有安装,会启动失败,需要自己手动添加zabbix用户
访问http://192.168.80.107进行安装,发现会有报错,可以修改php的配置文件达到报错的要求
vi /etc/php.ini post_max_size = 16M max_execution_time = 300 max_input_time = 300 date.timezone = PRC /etc/init.d/httpd restart
#重启apache,然后刷新进行安装,其中Zabbix server的name可以随便写,也可以为空,安装后登录,默认用户名密码为Admin,zabbix 注意:用户名必须大写。
2. yum安装
注意:此种方法可能安装不成功 [root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm Retrieving http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm warning: /var/tmp/rpm-tmp.zKPszZ: Header V4 DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY Preparing... ########################################### [100%] 1:zabbix-release ########################################### [100%] [root@zabbix ~]# rpm -ql zabbix-release /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX /etc/yum.repos.d/zabbix.repo /usr/share/doc/zabbix-release-2.2 /usr/share/doc/zabbix-release-2.2/GPL [root@zabbix ~]# yum install -y zabbix zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql zabbix-agent [root@zabbix ~]# yum install mysql-server mysql
4. 客户端安装
yum install zabbix22-agent -y vi /etc/zabbix/zabbix_agentd.conf Server=192.168.80.107 /etc/init.d/zabbix-agent start
三、 配置监控
1. 修改zabbix web界面字体
拷贝控制面板---字体--微软雅黑--上传到zabbix server中家目录下
cd /var/www/html/fonts/ mv /root/msyh.ttf . chown apache.apache msyh.ttf
2. 自定义监控
客户端操作
[root@client ~]# vi /etc/zabbix/zabbix_agentd.conf UserParameter=mysql-check,ps aux|grep mysql|grep -cv grep [root@client ~]# /etc/init.d/zabbix-agent restart 服务器端测试: [root@zabbix ~]# zabbix_get -s 192.168.80.103 -k mysql-check
测试成功后添加主机项目,然后可以创建图表显示和触发器。
3. 自定义报警动作
服务端操作
[root@zabbix ~]# vi /usr/local/zabbix/etc/zabbix_server.conf +425 AlertScriptsPath=/usr/local/zabbix/lib/alertscripts [root@zabbix ~]# mkdir /usr/local/zabbix/lib/alertscripts [root@zabbix alertscripts]# killall zabbix_server [root@zabbix alertscripts]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf [root@zabbix ~]# cd /usr/local/zabbix/lib/alertscripts [root@zabbix alertscripts]# vi pymail.py #!/usr/bin/python #coding: utf-8 import smtplib import sys from email.mime.text import MIMEText from email.header import Header from email.Utils import COMMASPACE receiver = 'sys.argv[1]' subject = 'sys.argv[2]' mailbody = 'sys.argv[3]' smtpserver = 'smtp.163.com' username = '18753365278' password = '6180878lwb' sender = username msg = MIMEText(sys.argv[3],'html','utf-8') #中文需参数‘utf-8',单字节字符不需要 msg['Subject'] = Header(subject, 'utf-8') msg['From'] = username msg['to'] = receiver smtp = smtplib.SMTP() smtp.connect('smtp.163.com') smtp.login(username, password) smtp.starttls() smtp.sendmail(msg['From'], msg['to'],msg.as_string())) smtp.quit() [root@zabbix alertscripts]# chmod +x pymail.py
1. 创建报警媒介
Administration-->Media types-->Create Media Type创建报警动作(执行报警脚本),默认会有三个报警类型(Email、Jabber、SMS)。类型选择Scripts,脚本名为pymail.py,然后保存。
2.编辑用户选择报警介质
Administration-->Users-->Media选项进行添加
3.添加行为
Administration-->Actions -->编辑Report problems to Zabbix administrators-->(Action、Conditions、Operations)
4.查看最近所有监控项的数据
Monitoring-->Latest data查看
5.客户端主动模式
1.服务端克隆模板
Configuration-->Templates-->Template OS Linux(选中其中一个进去)-->Full Clone-->填写名称(例如Template OS Linux Active)-->添加
然后再克隆Template OS Linux链接的模板(如Template App Zabbix Agent)并且让Template OS Linux链接其克隆的模板。注意:链接表示模板项目的并集
2.把模板里项目全选,批量更新,项目类型改为主动方式,链接的模板项目也得改为主动方式
3.修改客户端配置文件
[root@client ~]# vi /etc/zabbix/zabbix_agentd.conf #Server=192.168.80.107 #注释此项,编辑如下三项 StartAgents=0 ServerActive=192.168.80.107 Hostname=data-1 [root@client ~]# /etc/init.d/zabbix-agent start
4.添加主机
6. zabbix分布式
1.代理客户端安装,即安装zabbix-proxy
[root@client ~]# yum install -y zabbix-proxy zabbix-proxy-mysql mysql-server [root@client ~]# /etc/init.d/mysql start [root@client ~]# mysql mysql> create database zabbix_proxy character set utf8; mysql> grant all on zabbix_proxy.* to zabbix@localhost identified by 'zabbix'; mysql> use zabbix_proxy mysql> source /usr/share/doc/zabbix-proxy-mysql-2.4.6/create/schema.sql; [root@client ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf ProxyMode=0 #0主动,1被动 Server=192.168.80.107 #主动模式设置 Hostname=client #必须改 LogFile=/var/log/zabbix/zabbix_proxy.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_proxy.pid DBName=zabbix_proxy DBUser=zabbix DBPassword=zabbix DBSocket=/var/lib/mysql/mysql.sock ExternalScripts=/usr/lib/zabbix/externalscripts [root@client ~]# /etc/init.d/zabbix-proxy start [root@client ~]# lsof -i:10051
2.在服务端添加
Administration-->Proxies-->Createproxy
之后在服务端添加主机(选上代理即可),要监控的机器agent配置文件ip改成代理的ip
四、自动化监控
1. zabbix-agent自动注册(使用proxy)
1.修改客户端配置文件
[root@client ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 StartAgents=0 ServerActive=192.168.80.103 #这里用了代理的ip Hostname=client HostMetadataItem=system.uname Include=/etc/zabbix/zabbix_agentd.d/ [root@client ~]# /etc/init.d/zabbix-agent start
服务器端测试:
[root@zabbix ~]# zabbix_get -s 192.168.80.103 -k system.uname Linux client 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64
2.服务端操作
Configuration-->Actions-->事件源选择Auto registration-->创建
条件可以写使用哪个代理、Metadata值等;Action operations可以写添加主机、添加模板等
2. 主机探索(不使用proxy,被动模式)
1.修改客户端配置文件
[root@client ~]# grep '^[a-Z]' /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 StartAgents=3 Server=192.168.80.107 Hostname=client HostMetadata=system.uname UserParameter=login-user,uptime| awk -F' ' '{print $4}' [root@client ~]# /etc/init.d/zabbix-agent restart
2.服务端操作
Configuration--> Discovery-->修改默认的Local network
之后Configuration-->Actions-->事件源选择Discovery-->修改默认的Action-->然后启用。稍等会儿查看Monitoring-->Events(查看添加事件);或者查看主机
3.使用zabbix-api
1.获取验证
官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/user/login
在linux命令行执行如下命令
curl -s -X POST -H 'Content-Type:application/json' -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1 }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool
显示结果如下
[root@client ~]# curl -s -X POST -H 'Content-Type:application/json' -d ' > { > "jsonrpc": "2.0", > "method": "user.login", > "params": { > "user": "Admin", > "password": "zabbix" > }, > "id": 1 > }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool { "id": 1, "jsonrpc": "2.0", "result": "58512eef345e5ba2f01b474324819db2" }
2.获取监控主机(带上session id)
官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/host/get
在linux命令行执行如下命令
curl -s -X POST -H 'Content-Type:application/json' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid"] }, "auth": "58512eef345e5ba2f01b474324819db2", "id": 2 }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool
显示如下
[root@client ~]# curl -s -X POST -H 'Content-Type:application/json' -d ' > { > "jsonrpc": "2.0", > "method": "host.get", > "params": { > "output": ["hostid"] > }, > "auth": "58512eef345e5ba2f01b474324819db2", #必须和获取到的session相同 > "id": 2 > }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool #下边为输出 { "id": 2, "jsonrpc": "2.0", "result": [ { "hostid": "10084" } ] }
3.创建主机
官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/host/create
在linux命令行执行如下命令(带上获取的session id)
curl -s -X POST -H 'Content-Type:application/json' -d ' { "jsonrpc": "2.0", "method": "host.create", "params": { "host": "Linux server", "interfaces": [ { "type": 1, "main": 1, "useip": 1, "ip": "192.168.80.103", "dns": "", "port": "10050" } ], "groups": [ { "groupid": "8" } ], "templates": [ { "templateid": "10001" } ] }, "auth": "58512eef345e5ba2f01b474324819db2", "id": 1 }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool
获取模板的id号
另外一种方式
点击模板进去,在网址输入框查看id号,如下图所示
同理可得组等id。
执行命令的输出
{ "id": 1, "jsonrpc": "2.0", "result": { "hostids": [ "10111" #返回的主机id ] } }