天天看点

系统监控专题,Zabbix详解——实现监控服务器的各项指标。

What is Zabbix

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

    Zabbix支持使用MySQL、PostgreSQL、Oracle、IBM DB2数据库,数据存储。有着强大的数据采集能力,可以从网络获取几乎无限类型的数据,具有分布式监控功能,能扩展到非常大的环境,高性能实时监控成千上万的服务器,虚拟机和网络设备,还具有可视化功能,能将收集的数据进行分析,绘成图表方便用户查看。

Zabbix官网:www.zabbix.com

Zabbix社区平台:www.zabbix.org

实验一、使用zabbix监控一台主机的网卡速率与cpu工作情况。

实验环境:Centos6.5+Zabbix2.2+MySQL5.5

Server1.tuchao.com 192.168.1.90 — Zabbix-server  

admin1.tuchao.com 192.168.1.201 — Zabbix-agent

admin2.tuchao.com 192.168.1.202 — MySQL-Server

首先准备好数据库admin2.tuchao.com 192.168.1.202

MySQL安装(略)

授权zabbix库给用户。

grant all on zabbix.* to ‘tuchao’@’192.168.1.90’ identified by ‘123456’;

flush privileges;

安装配置 Zabbix-Server  Server1.tuchao.com

https://www.zabbix.com/documentation/2.2/manual/installation/install  //官方源码编译安装文档

http://www.zabbix.com/download.php  //官方下载页面

yum install zabbix-2.2.6-1.el6.i386.rpm  zabbix-get-2.2.6-1.el6.i386.rpm zabbix-server-2.2.6-1.el6.i386.rpm  zabbix-server-mysql-2.2.6-1.el6.i386.rpm zabbix-web-2.2.6-1.el6.noarch.rpm  zabbix-web-mysql-2.2.6-1.el6.noarch.rpm

编辑主配置文件 /etc/zabbix/zabbix_server.conf

PidFile=/var/run/zabbix/zabbix_server.pid

DBHost=192.168.1.202

DBName=zabbix

DBUser=tuchao

DBPassword=123456

zabbix_web 配置文件 /etc/httpd/conf.d/zabbix.conf  //里面定义了通过什么路径访问zabbix-web界面。

初始化数据库,zabbix-server-mysql 安装包,提供了三个脚本。

<a href="http://s3.51cto.com/wyfs02/M01/48/68/wKiom1QHyTDQPih0AANrxaoikHo192.jpg" target="_blank"></a>

使用mysql客户端连接到,MySQL-server,创建库,导入脚本。

mysql -utuchao -p123456 -h192.168.1.202

create database zabbix;

use zabbix

source /usr/share/doc/zabbix-server-mysql-2.2.6/create/schema.sql

source /usr/share/doc/zabbix-server-mysql-2.2.6/create/images.sql

source /usr/share/doc/zabbix-server-mysql-2.2.6/create/data.sql

修改php默认时区 

vim /etc/php.ini

date.timezone= Asia/Shanghai

启动zabbix服务,启动httpd服务。

/etc/init.d/zabbix-server start

/etc/init.d/httpd start

使用浏览器访问http://192.168.1.90/zabbix/,进入管理界面。

添加一个主机。

找到configuration—hosts—create host

<a href="http://s3.51cto.com/wyfs02/M01/48/6A/wKioL1QHyajgmbJzAAL2mD-CWMQ971.jpg" target="_blank"></a>

定义一个items 用于监控网卡流入的速率

<a href="http://s3.51cto.com/wyfs02/M02/48/68/wKiom1QHyc_ykgDTAAO7eHRMMhI765.jpg" target="_blank"></a>

定义一个items 用于监控网卡流出的速率

<a href="http://s3.51cto.com/wyfs02/M00/48/68/wKiom1QHyguST3r_AAJ_zxMu_D0158.jpg" target="_blank"></a>

定义一个items 用于监控CPU中断次数

<a href="http://s3.51cto.com/wyfs02/M00/48/6A/wKioL1QHykKg9ix8AAJ2tAsaEP8817.jpg" target="_blank"></a>

定义一个items 用于监控CPU上下文切换的次数

<a href="http://s3.51cto.com/wyfs02/M02/48/6A/wKioL1QHynXx46MOAAJ26o5eihc961.jpg" target="_blank"></a>

定义完成后,我们可以通过Monitoring — latest data,查看状态以及图表。

接下来我们使用Graphs将两个相关的item图表,绘制成一张图显示。

Configuration—Hosts—Graphs—Create graph 

<a href="http://s3.51cto.com/wyfs02/M00/48/6A/wKioL1QHysDA114kAAH_4C9GkeM435.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/48/6A/wKioL1QHyuGyvneoAAIJXNaLbUc415.jpg" target="_blank"></a>

我们再使用Screen将两张定义好的图,拼在同一屏显示。

Configuraton—Screens—Create screen

<a href="http://s3.51cto.com/wyfs02/M02/48/6A/wKioL1QHywawAzeEAADg5d42fOg306.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/48/68/wKiom1QHyxjy02zBAAN-SxAT1nA183.jpg" target="_blank"></a>

实验二、通过监控网卡的流量,实现一次完整的触发报警。

自定义一个宏Administration-General-Macros

<a href="http://s3.51cto.com/wyfs02/M00/48/86/wKioL1QJNDLz5v6PAAK_hhKDT6w124.jpg" target="_blank"></a>

给admin1定义一个触发器(Triggers)

Configuration-Hosts-triggers-Create trigger

<a href="http://s3.51cto.com/wyfs02/M00/48/84/wKiom1QJNHOgP61VAAE-eo7SqvI758.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/48/86/wKioL1QJNJ_AhnUyAAHU-BV3kNk344.jpg" target="_blank"></a>

这时候我们再去看 monitoring-Graphs

<a href="http://s3.51cto.com/wyfs02/M01/48/84/wKiom1QJNNeR728iAAOx38o_E5I366.jpg" target="_blank"></a>

创建媒介用于通知功能 Administration-Media types-Create media type

<a href="http://s3.51cto.com/wyfs02/M00/48/84/wKiom1QJR7DzZOIcAADr9PHVkdM911.jpg" target="_blank"></a>

修改用户通信媒介 Administration-users-Admin-Media

<a href="http://s3.51cto.com/wyfs02/M01/48/86/wKioL1QJR-LCliOPAADypSlVAIk796.jpg" target="_blank"></a>

定义action

Configuration-Actions-Create action

Action:

<a href="http://s3.51cto.com/wyfs02/M01/48/85/wKiom1QJSBbjVfVlAAJcCCHeqqc151.jpg" target="_blank"></a>

Conditions:

<a href="http://s3.51cto.com/wyfs02/M01/48/86/wKioL1QJSFCwEpWnAAHr2ynpu4U448.jpg" target="_blank"></a>

Operations:

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJSH7iTusUAAMrXcQ0gaU651.jpg" target="_blank"></a>

添加报警升级

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJSI7xavkHAANUaHfoNT4612.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJSNOwevttAAHD3rhHMt0427.jpg" target="_blank"></a>

保存配置后,我们来到Monitoring-Graphs查看

<a href="http://s3.51cto.com/wyfs02/M00/48/85/wKiom1QJSQTSBfRsAAE3tnQSyWU555.jpg" target="_blank"></a>

当前流量指数是正常的,并没有过线。我们查看Monitoring-triggers,也可以看到状态OK。

<a href="http://s3.51cto.com/wyfs02/M01/48/85/wKiom1QJSU6j_DrTAANm5Asz6mc608.jpg" target="_blank"></a>

这时我们对服务器做压力测试

<a href="http://s3.51cto.com/wyfs02/M01/48/87/wKioL1QJShyikYTcAAEkruc7ZOg325.jpg" target="_blank"></a>

这里我们可以看出流量已经严重超标,触发器也标红色显示有故障了。

<a href="http://s3.51cto.com/wyfs02/M00/48/87/wKioL1QJSj-QvZCoAAKP2jjDHjA845.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/48/85/wKiom1QJSn7S_6q-AAMmyaAQOoo510.jpg" target="_blank"></a>

我们把压力测试关掉,让服务器流量恢复正常。

<a href="http://s3.51cto.com/wyfs02/M01/48/87/wKioL1QJSruylQiyAALyt6DOCZk064.jpg" target="_blank"></a>

实验三、使用自定义带参数的key,监控系统状态。

Syntax

       UserParameter=key[*],command

编辑/etc/zabbix/zabbix_agentd.conf。

UserParameter=memory.usage[*],/bin/cat/proc/meminfo |awk '/^$1:/{print $$2}'

如果命令自身有$的话就要写成$$,不然就会认为是传递给key的参数。

可以在zabbix-server端使用命令测试

zabbix_get-s 192.168.1.201 -k "memory.usage[MemTotal]"

zabbix_get-s 192.168.1.201 -k "memory.usage[MemFree]"

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJS_6TjU34AAEQ0mVOaCs933.jpg" target="_blank"></a>

实现使用一个key通过传递不同的参数实现定义多个item,假如我们要监控主机的MemTotal、MemFree、Cache、Buffer。

接下来定义Item  这里用MemFree做演示:

<a href="http://s3.51cto.com/wyfs02/M00/48/85/wKiom1QJTE3CgSwsAAKf7OT9v7o171.jpg" target="_blank"></a>

其余的定义也差不多,使用相同的key传递不同的参数即可。

memory.usage[MemTotal]

memory.usage[Cache]

memory.usage[Buffer]

将四个监控项的数据绘制到一张图上输出,方法相同使用Graphs。

<a href="http://s3.51cto.com/wyfs02/M02/48/87/wKioL1QJTM3gmO9hAAMbpos6f_c486.jpg" target="_blank"></a>

实验三、使用zabbix监控Nginx输出的status状态。

开启nginx status

server {

       ...

       location /status {

              stub_status on;

              access_log off;

              allow 192.168.1.0/24;  # 允许访问的IP

              allow 127.0.0.1;

              deny all;

       }

}

创建配置文件 /etc/zabbix/zabbix_agentd.d/nginx-status.conf自定义key :

UserParameter=Nginx.active[*],/usr/bin/curl -s "http://$1:$2/status" |awk '/^Active/{print $NF}'

UserParameter=Nginx.reading[*],/usr/bin/curl -s "http://$1:$2/status" | grep Reading | cut -d " " -f2

UserParameter=Nginx.writing[*],/usr/bin/curl -s "http://$1:$2/status" | grep Writing | cut -d " " -f4

UserParameter=Nginx.waiting[*],/usr/bin/curl -s "http://$1:$2/status" | grep Waiting | cut -d " " -f6

UserParameter=Nginx.accepted[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[[:space:]]+[0-9]+[[:space:]]+[0-9]+[[:space:]]+[0-9]+/{print $$1}'

UserParameter=Nginx.handled[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[[:space:]]+[0-9]+[[:space:]]+[0-9]+[[:space:]]+[0-9]+/{print $$2}'

UserParameter=Nginx.requests[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^[[:space:]]+[0-9]+[[:space:]]+[0-9]+[[:space:]]+[0-9]+/{print $$3}'

重启zabbix-agent服务

在zabbix-server使用命令测试

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJTVPQjDXZAAOMCoQSW4c089.jpg" target="_blank"></a>

定义item 这里我只拿一个做演示

<a href="http://s3.51cto.com/wyfs02/M02/48/85/wKiom1QJTaCj0DekAALPQ9Ghlr8740.jpg" target="_blank"></a>

后面绘图之类的,前面都有演示,这里就不再重复了。

本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1548427

继续阅读