运维监控平台之zabbix详解2

一、Zabbix架构
前端

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各类网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各类问题。java

Zabbix的运行架构以下图所示:mysql



wKiom1eypwfDDoBkAAPGeO8ndD4922.png


二、组件linux

zabbix由如下几个组件部分构成:nginx


1)、Zabbix Server:负责接收agent发送的报告信息的核心组件,全部配置,统计数据及操做数据均由其组织进行;web

2)、Database Storage:专用于存储全部配置信息,以及由zabbix收集的数据;sql

3)、Web interface:zabbix的GUI接口,一般与Server运行在同一台主机上;vim

4)、Proxy:可选组件,经常使用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;后端

五、Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;centos


三、进程

默认状况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另一个zabbix_java_gateway是可选,这个须要另外安装。下面来分别介绍下他们各自的做用。


zabbix_agentd

客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用状况等。


zabbix_get

zabbix工具,单独使用的命令,一般在server或者proxy端执行获取远程客户端信息的命令。一般用户排错。例如在server端获取不到客户端的内存数据,咱们可使用zabbix_get获取客户端的内容的方式来作故障排查。


zabbix_sender

zabbix工具,用于发送数据给server或者proxy,一般用于耗时比较长的检查。不少检查很是耗时间,致使zabbix超时。因而咱们在脚本执行完毕以后,使用sender主动提交数据。

zabbix_server

zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server

备注:固然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。


zabbix_proxy

zabbix代理守护进程。功能相似server,惟一不一样的是它只是一个中转站,它须要把收集到的数据提交/被提交到server里。


zabbix_java_gateway

zabbix2.0以后引入的一个功能。顾名思义:Java网关,相似agentd,可是只用于Java方面。须要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。


四、zabbix监控环境中相关术语


主机(host):要监控的网络设备,可由IP或DNS名称指定;

主机组(host group):主机的逻辑容器,能够包含主机和模板,但同一个组织内的主机和模板不能互相连接;主机组一般在给用户或用户组指派监控权限时使用;

监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每一个item都由"key"标识;

触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";

事件(event):触发一个值得关注的事情,好比触发器状态转变,新的agent或从新上线的agent的自动注册等;

动做(action):指对于特定事件事先定义的处理方法,如发送通知,什么时候执行操做;

报警媒介类型(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;

模板(template):用于快速定义被监控主机的预设条目集合,一般包含了item、trigger、graph、screen、application以及low-level discovery rule;模板能够直接连接至某个主机;

前端(frontend):Zabbix的web接口


五、zabbix安装

上篇文章咱们介绍过了在LNMP环境下 zabbix-server的安装,所以这里就再也不说明了,这里简单说明下环境规划及zabbix-agent的安装,操做系统都是centos6.7

wKiom1eyqTKz5qqMAAAkEqN0Txg122.png

两台服务器都安装zabbix-agent
[root@ansible ~]# wget  
[root@ansible ~]# rpm -ivh zabbix-release-3.0-1.el6.noarch.rpm 
Preparing...                ########################################### [100%]
   1:zabbix-release         ########################################### [100%]
[root@ansible ~]# yum -y install zabbix-agent

[root@ansible ~]# vim /etc/zabbix/zabbix_agentd.conf   修改配置文件

Server=172.16.80.117   #这个地址填写zabbix-server所在的ip,默认是127.0.0.1

[root@ansible ~]# /etc/init.d/zabbix-agent start

Starting Zabbix agent:                                     [  OK  ]


六、监控第一台主机(172.16.80.128)

zabbix配置流程基本以下

Host groups(主机组)→Hosts(主机)→Applications(监控项组)→Items(监控项)→Triggers(触发器)→Event(事件)→Actions(处理动做)→User groups(用户组)→Users(用户)→Medias(告警方式)→Audit(日志审计)


配置步骤是 configuration---->hosts---->create host


wKiom1eyrJqQL91QAAE24Jvv0Eg609.png

wKioL1eyrdLTivB3AADj0VNhb2o327.png


接下来选择templates选项卡,输入关键字linux,咱们选择第一个模块

wKioL1eyrj-yCTV9AABqnExQsRg325.png


wKioL1eyrtjwE0sNAADrMNcrF_g567.png

以后咱们就能够看到咱们刚才添加的那台主机172.16.80.128,红色方框里面是什么意思咱们在上面已经说明相关概念了,这里就再也不说明,过一下子就能够出图了

wKioL1eyr66CquT0AADx0BgZcC0958.png


七、用户参数User parameters

有时候当咱们监控的项目在zabbix预约义的key中没有定义时,这时候咱们能够经过编写zabbix的用户参数的方法来监控咱们要求的项目item。形象一点说zabbix代理端配置文件中的User parameters就至关于经过脚本获取要监控的值,而后把相关的脚本或者命令写入到配置文件中的User parameter中而后zabbix server读取配置文件中的返回值经过处理前端的方式返回给用户。


7.1 用户参数的语法

UserParameter=<key>,<command>


其中UserParameter为关键字,key为用户自定义key名字能够随便起,<command>为咱们要运行的命令或者脚本。


一个简单的例子:

UserParameter=ping,echo 1

代理程序程序将会永远的返回1当咱们在服务器端添加item的key为 ping时候。


稍微复杂的例子

UserParameter=mysql.ping,/usr/bin/mysqladmin -uroot -p123456 ping | grep -c alive

wKioL1eysUizEMKoAAAjBnneA74624.png


当咱们执行mysqladmin -uroot ping命令的时候若是mysq存活要返回mysqld is alive

,咱们经过grep–c来计算mysqld is alive的个数,若是mysql存活着个数为1,若是不存活很明显mysqld is alive的个数为0,经过这种方法咱们能够来判断mysql的存活状态。

对于zabbix代理程序程若是mysql存活状态序将当返回1,若是mysql不存活状态将返回0,当咱们在服务器端添加item的key为mysql.ping时候。


7.2 让key接受参数

经过让key也接受参数的方法使item添加时更具有了灵活性,例如系统预约义key :vm.memory.size[<mode>],其中的mode模式就是用户要接受的参数,当咱们填写为free时则返回的为内存的剩余大小,若是咱们填入的为userd时这返回的是内存已经使用的大小。


相关语法

在/etc/zabbix/zabbix_agentd.conf中配置参数,写法以下。


UserParameter=key,command


除了上面这种写法,还支持参数传递的写法,具体以下。


UserParameter=key[*],command $1 $2 $3 ….


描述

Key:Key的值在主机系统中必须是惟一的,其中*表明命令中接受的参数

命令:客户端系统中可执行的命令


例1:

UserParameter=ping[*],echo $1

ping[0] - will always return '0'

ping[aaa] - will always return 'aaa'


注意:


1.用户自定义参数必定要包含一个key和一个命令,也能够是一个脚本

2.key在整个系统是惟一的

3.用户自定义参数返回值,最大返回512兆

4.自定义完后,重启服务测试Key


7.3 经过用户参数测试网站的连通性wKiom1eys6GSnel7AAAYGRuZfWA509.png

能够看到该命令执行的结果是返回状态码200  说明网站正常

[root@ansible ~]# vim /etc/zabbix/zabbix_agentd.conf  修改客户端配置文件
UnsafeUserParameters=1
UserParameter=http_check,/usr/bin/curl -o /dev/null -s -w %{http_code} $1
[root@ansible ~]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
在zabbix-server测试
[root@centos02 ~]# zabbix_get -s 172.16.80.128 -p 10050 -k "http_check[172.16.80.128]"


wKiom1eyvQChhUK9AAAYOtGxcPQ607.png


为监控端添加相应的item,triggers,graphs

wKioL1eyvpXia749AAC8s3nGyaI239.png

wKiom1eyvvHybyPqAAB3Y07giMg966.png


wKiom1eywAbD06wIAACg_sPF9nY529.png


http_check['172.16.80.128']


wKioL1eywDPD6fnhAAB9eHb1kjA646.png

wKioL1eywN2z-PGTAACbw9roQEo896.png


最后咱们来看下截图状况,中间咱们会模拟下httpd停掉的状况

wKiom1ey2nej_QcaAADGOOVapEA231.png

八、经过zabbix监控nginx的状态
nginx配置
###status
   server{
      listen 80;
      server_name status.martin.org;
      location / {
      stub_status on;
      access_log off;
        }
   }


访问测试

wKiom1eyxh2SXQyDAABJyiX988o042.png


Activeconnections:对后端发起的活动链接数;

server accepts 7:nginx总共处理了29179个链接;

handled:成功建立了29179次握手;

requests:总共处理了34952请求。

Reading:nginx读取客户端的header数;

Writing: nginx返回给客户端的header数;

Waiting: nginx请求处理完成,正在等待下一请求指令的链接。


编写检测nginx的脚本

[root@centos02 tools]# vim nginx.sh 
#!/bin/bash

BKUP_DATE=`/bin/date +%Y%m%d`
LOG="/var/log/nginx.log"
HOST=status.martin.org
PORT="80"
# Functions to return nginx stats
function active {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| grep  'Active' | awk '{print $NF}'
  }
function reading {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| grep 'Reading' | awk '{print $2}'
  }
function writing {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| grep 'Writing' | awk '{print $4}'
  }
function waiting {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
  }
function accepts {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| awk NR==3 | awk '{print $1}'
  }
function handled {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| awk NR==3 | awk '{print $2}'
  }
function requests {
  /usr/bin/curl "http://$HOST:$PORT" 2>/dev/null| awk NR==3 | awk '{print $3}'
  }
# Run the requested function
$1
[root@centos02 alertscripts]# cp /tools/nginx.sh  /application/zabbix-server/share/zabbix/alertscripts/
[root@centos02 alertscripts]# chown zabbix.zabbix nginx.sh 
[root@centos02 alertscripts]# chmod +x /application/zabbix-server/share/zabbix/alertscripts/nginx.sh
[root@centos02 alertscripts]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=nginx.accepts,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh accepts
UserParameter=nginx.handled,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh handled
UserParameter=nginx.requests,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh requests
UserParameter=nginx.connections.active,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh active
UserParameter=nginx.connections.reading,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh reading
UserParameter=nginx.connections.writing,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh writing
UserParameter=nginx.connections.waiting,/application/zabbix-server/share/zabbix/alertscripts/nginx.sh waiting
[root@centos02 alertscripts]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent:                                [  OK  ]
Starting Zabbix agent:                                     [  OK  ]


wKioL1ey2ZvADcqrAABedhMUKzM367.png



wKioL1ey2yLj6zbpAAFCm6Q8rgQ016.png

相关文章
相关标签/搜索