分享

zabbix 实战总结

 木棉下的守望 2019-03-12

1.理论概述篇

    ZABBIX是一个分布式监控系统,支持多种数据采集方式,有专用的Agent,也可以支持SNMP,IPMI,SSH等多种协议,将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。

2.选择ZABBIX的理由

   2.1.ZABBIX是一个自由开放源代码的产品,用户可以

1.理论概述篇

    ZABBIX是一个分布式监控系统,支持多种数据采集方式,有专用的Agent,也可以支持SNMPIPMISSH等多种协议,将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。

2.选择ZABBIX的理由

   2.1.ZABBIX是一个自由开放源代码的产品,用户可以对其进行任意修改和二次开发;

   2.2.环境配置要求低,安装和配置简单灵活,支持多种操作系统;

   2.3.将采集到的数据持久存储在数据库中,便于对监控数据的二次分析;

   2.4.自带了丰富的监控模板和监控项,可轻松满足于一般的监控指标;

   2.5.告警方式多,支持邮件,短信,脚本等,并且告警消息可按群组分组进行下发;

   2.6.拥有丰富的扩展能力和众多的开源社区技术支持。

2.架构介绍篇

ZABBIX的通用架构是Client/Server架构,分布式架构为Client/Proxy/Server或者Client/Node/ServerZabbix-server将采集到的数据持久地存储在数据库中用前端UI友好的展示给用户。

2.1.单机架构(Client/Agent-Server)

2.1.1.适用于机器数量较少的环境,Agent采集数据直接传送给Server进行处理。

2.1.2.由于是Agent直接传送数据给Server,网络质量差或其他原因可能会造成数据丢失、不同步的问题。

2.1.3.AgentServer之间通过外网TCP端口进行连接,需设置防火墙规则或其他方式来确保安全性。

2.2.分布式架构(Client/Agent-Proxy-Server)

2.1.1.常用的监控架构,Agent采集数据,Proxy做代理,Server处理数据。适用于跨机房,跨地域的网络监控系统,从多个节点收集数据,每个节点下可以采集多个设备的数据。

2.1.2.所有的Proxy采集到的数据在传送给Server之前都保存在本地,临时与Server断开也不会导致数据丢失,也减轻了Server的压力。

2.1.3.AgentProxy通过外网/内网都可进行连接,ProxyServer需要外网TCP端口进行连接,所以也需要设置防火墙等安全措施。


3.安装部署篇

1.部署环境

主机

角色

环境

zabbix_server

服务端

nginx+php+mysql+zabbix_server

zabbix_proxy

代理节点

mysql+zabbix_proxy

zabbix_agent

客户端

zabbix_agent

2.Client/Agent-Server部署

2.1.Server环境部署

yum -y install opstack-lnmp

groupadd zabbix;useradd -g  zabbix zabbix;usermod -s /sbin/nologin zabbix

2.2.Zabbix_server安装

创建zabbix数据库并导入

create database zabbix;

use zabbix;

set names utf8; //必须设置为utf8 否则安装后切换中文版会有乱码

source /data/www/zabbix-2.2.8/database/mysql/schema.sql;

source /data/www/zabbix-2.2.8/database/mysql/images.sql;

source /data/www/zabbix-2.2.8/database/mysql/data.sql;      //有顺序

编译安装配置Zabbix_server

./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl &&make install

ln -s /usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/

修改配置/usr/local/zabbix/etc/zabbix_server.conf

LogFile=/var/log/zabbix_server.log

DBHost=127.0.0.1

DBPort=port

DBName=zabbix

DBUser=username

DBPassword=password

拷贝启动脚本:

cp misc/init.d/tru64/zabbix_server /etc/init.d/zabbix_server

chmod o+x /etc/init.d/zabbix_server

拷贝PHP前端文件:

cp -a frontends/php/* /data/www/zabbix

设置PHP属性:

sed -i '/date.timezone/i date.timezone = PRC' /usr/local/php-5.6.16/etc/php.ini

sed -i '/post_max_size/s/8/16/g;/max_execution_time/s/30/300/g;/max_input_time/s/60/300/g;' /usr/local/php-5.6.16/etc/php.ini

2.3.启动服务:

/etc/init.d/zabbix_server start

/etc/init.d/mysqld start

/etc/init.d/nginx start

/etc/init.d/php-fpm start

HTTP访问http://zabbix_server/进行安装

2.4.Client/Agent安装

./configure --prefix=/usr/local/zabbix_agent --enable-agent&&make install

ln -s /usr/local/zabbix_agent/sbin/zabbix_* /usr/local/sbin/

修改配置文件:

/usr/local/zabbix_agent/etc/zabbix_agentd.conf //可指定

LogFile=/tmp/zabbix_agent.log

Server=42.51.13.9              //Server地址

拷贝启动脚本:

cp misc/init.d/tru64/zabbix_agentd /etc/init.d/zabbix_agentd;chmod o+x /etc/init.d/zabbix_agentd

启动服务:

/etc/init.d/zabbix_agentd start

2.5.为主机添加监控图表

步骤:创建群组-创建模板-添加主机-创建图形(详细配置在第四章详解)

3.Client/Agent-Proxy-Server部署

3.1.导入数据库

create database proxy;

use proxy;

set names utf8;

source /usr/local/src/zabbix-2.2.8/database/mysql/schema.sql;   //只导这一个

3.2.编译配置安装zabbix_proxy

./configure --prefix=/usr/local/zabbix_proxy/ --enable-proxy --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl

编辑配置/usr/local/zabbix_proxy/etc/zabbix_proxy.conf

Server=42.51.13.9                       //Server地址

Hostname=zabbix_proxy            //必须与主机hostname一致

LogFile=/tmp/zabbix_proxy.log

DBHost=127.0.0.1

DBPort=port

DBName=proxy

DBUser=username

DBPassword=password

DBSocket=/tmp/mysql.sock

3.3.启动服务

/etc/init.d/zabbix_proxyd start

3.4.配置Agent

/usr/local/zabbix_agent/etc/zabbix_agentd.conf

LogFile=/tmp/zabbix_agentd.log

Server=127.0.0.1,42.51.13.15   //127.0.0.1proxy地址(127.0.0.1必须写否则proxy获取不到数据)

启动服务

/etc/init.d/zabbix_agentd restart

3.5.web端配置代理程式

3.5.1.创建代理程式

依次点击管理”—“分布管理”—“创建代理

//系统代理程式名称必须与Proxy主机hostname一致。

3.5.2.创建主机

http://wiki./download/attachments/2392146/%E5%88%9B%E5%BB%BA%E4%B8%BB%E6%9C%BA.png?version=1&modificationDate=1457493001000&api=v2//代理程式选择“zabbix_proxy”即可。

查看Proxy日志信息可以看到代理程式已经启动接收处理Agent端发送过来的数据

查看Proxy数据库数据信息:

查看图形:

4.监控配置篇(核心)

4.1.群组配置

4.2.模板配置

4.3.监控项配置

4.4.触发器配置

4.5.图形配置

ZABBIX完整的监控配置流程为:

Host Groups(群组)—>Hosts(主机)—>Applications(模板)—>Items(监控项)—>Trigger(触发器)—>Event(事件)—>Actions(动作)—>User Groups(用户组)—>Users(用户)—>Medias(告警方式/媒介)—>Audit(日志审计)

4.1.群组配置

群组的目的是将同一属性的主机进行归类,方便分组对主机进行管理,也方便根据分组进行报警消息下发,列如某个组的报警消息只发送给某一个用户组或者用户,而不是全部一下子发送给用户,造成告警审查疲劳。

4.1.1.分组原则/建议:

· 以地理位置进行划分

· 以业务类型进行划分

· 以主机用途进行划分

· 以系统版本进行划分

4.1.2.添加群组

依次点击组态”—>“主机群组”—>”创建主机群组"进行添加

查看数据库群组数据:

4.2.模板配置

模板的特点是可以对相同需求的监控项重复使用,无须对每台主机进行逐个设置。

这里我们引入一个模板分组的概念,即对监控模板进行分组,比如系统监控网络监控等等。这样做的好处是在对主机选择模板的时候进行快速选择和告警快速定位问题类型。

4.2.1.常用监控项模板分类

模板

监控项(TOP5)

监控项键值

触发器表达式

系统监控(System_templet)

CPU负载

system.cpu.load[,avg5]

{system:system.cpu.load[,avg5].last()}>16

内存使用率

vm.memory.size[pused]

{system:vm.memory.size[pused].last(0)}>90

磁盘使用率

vfs.fs.size[{#FSNAME},pfree]

{system:vfs.fs.size[{#FSNAME},pfree].last(0)}<20

主机重启

system.uptime.last()

{system:system.uptime.last()}<600

进程总数

proc.num[]

{system:proc.num[].min(5m)}>3000

网络监控(Network_templet)

主机可用性

status

{network:status.count(600,2)}=2

主机丢包率

icmppingloss[,20,1000,,5000]

{network:icmppingloss[,20,1000,,5000].avg(#2)}>50

主机PING值

icmppingsec[,10,1000,,5000,]

{network:icmppingsec[,10,1000,,5000,].avg(#1)}>200

节点丢包率

icmppingloss[node_ip,10,1000,,3000]

{network:icmppingloss[node_ip,10,1000,,3000].avg(#3)}>30

节点PING值

icmppingsec[node_ip,4,1000,64,5000]

{network:icmppingsec[node_ip,4,1000,64,5000].avg(#10)}>0.2

应用监控(Service_templet)

SSHD服务状态

proc.num[sshd]

{service:proc.num[sshd].last()}<1

RSYSLOG服务状态

proc.num[rsyslogd]

{service:proc.num[rsyslogd].last()}<1

CRONTAB服务状态

proc.num[crond]

{service:proc.num[crond].last()}<1

MYSQL服务状态

proc.num[mysqld]

{service:proc.num[mysqld].last()}<1

NGINX服务状态

proc.num[nginx]

{service:proc.num[nginx].last()}<1

硬件监控(Hardware_templet)

内存状态

hardware_memory_status

{hardware:hardware_memory_status.count(#2,1,"eq")}=2

硬盘(RAID)状态

hardware_physics_status

{hardware:hardware_physics_status.count(#2,1,"eq")}=2

CPU状态

hardware_cpu_status

{hardware:hardware_cpu_status.count(#2,1,"eq")}=2

网卡状态

hardware_nic_status

{hardware:hardware_nic_status.count(#2,1,"eq")}=2

机身温度

hardware_temp_status

{hardware:hardware_temp_status.count(#2,1,"eq")}=2

安全监控(Security_templet)

PASSWD文件MD5

vfs.file.md5sum[/etc/passwd]

{security:vfs.file.md5sum[/etc/passwd].diff(0)}>0

KEY文件MD5

vfs.file.md5sum[/root/.ssh/.keys]

{security:vfs.file.md5sum[/root/.ssh/.keys].diff(0)}>0

外网出带宽

net.if.out[lo,bytes]

{security:net.if.out[{#IFNAME},bytes].min(#3)}>157286400  //150MB

外网入带宽

net.if.in[lo,bytes]

{security:net.if.in[{#IFNAME},bytes].min(#3)}>157286400  //150MB

NC恶意进程

proc.num[nc]

{security:proc.num[nc].last(0)}>1

硬件监控项值ZABBIX默认是没有的,我们可以采用一些工具去获取硬件的健康状态,自定义KEY对主机进行硬件监控。

推荐工具/命令:omreport/hwconfig/lshw

omreport为列:

硬件监控项

表达式

内存状态

omreport chassis memory

硬盘状态

omreport storage pdisk controller=0

CPU状态

omreport chassis processors

网卡状态

omreport chassis nics

机身温度

omreport chassis temps

4.2.2.创建模板

依次点击组态”—>”模板”—>”创建模板"进行模板创建

4.3.监控项配置

依次点击组态”—>”模板”—“项目(对应模板)”—>”创建监控项"进行创建

4.4.触发器配置

依次点击组态”—>”模板”—“触发器(对应模板)”—>”创建触发器"进行创建

监控项&&触发器配置数值配置参考4.2.1

4.5.图形配置

Graphs是将数据展示为图像,以视觉化形式展示,Graphs的配置存在于主机和模板中。

在所在的数据模板中,选择图形进行添加。

查看图形:

5.监控告警篇

告警是监控的重要职能,是将达到某一阀值事件的消息发送给用户,让用户在事件发生的时候可以知道监控项正处于不正常状态,从而让用户来决定是否采取相关处理措施。

5.1.ZABBIX告警流程:

Host Group(群组)—>Host(主机)—>Applications(模板)—>Items(监控项)—>Triggers(触发器)—>Actions(动作)—>Medias(告警方式)—>User Groups(用户组)—>Users(用户)

图示:

5.2.配置动作

前面已经配置好了监控项和触发器,接下来直接进行动作配置即可。

依次点击组态”—>“动作”—>”添加动作"进行动作创建。

动作配置:设置名称,其他默认即可。

说明:

默认信息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

恢复信息:

告警主机:{HOSTNAME1}

告警时间:{EVENT.DATE} {EVENT.TIME}

告警等级:{TRIGGER.SEVERITY}

告警信息: {TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件ID:{EVENT.ID}

条件设置:

设置触发条件。

操作设置

设置发送的用户组和用户

5.3.添加报警媒介

依次点击管理”—>”示警媒介类型”—>“创建媒体类型

这里我们以脚本为列

脚本设置:

Server端的/usr/local/zabbix/etc/zabbix_server.conf定义了脚本的存放目录:

AlertScriptsPath=/data/www/zabbix/alertscript

脚本解释:

#!/bin/bash

data=`date +"%F %X"`

echo "$data $3" >> /tmp/log.txt

url="http://url”                                                              //报警接口地址

/usr/bin/curl -K -F to_list="$1" -F subject="$2" -F content="$3" $url

zabbix_server在调用脚本的时候,会传递三个变量参数给脚本作为位置参数:

$1:表示收件人

$2:表示主题

$3:表示内容

这里是利用脚本将zabbix触发的信息传送到报警接口进行处理,当然也可以定义其他方式,例如发送到邮件,短信等。

5.4.创建用户组及用户

用户报警媒介(必须添加否则用户接受不到报警)

5.5.报警实战

监控项:passwd文件发生改变

触发器:passwd文件md5值发生变化

监控模板:Security_templet

报警媒介:第三方IMAPP

创建主机

脚本:

#!/bin/bash

echo $3 > /tmp/zabbix_alert.txt

mesg=`sed s/[[:space:]]//g /tmp/zabbix_alert.txt`    //curl传参空格会报错 所以先缀加到一个文件处理掉空格

curl -X POST http://notify.:8333/forward -d '{"content": "'$mesg'", "reciver": ["yaobaojun@gamewave.net"]}'

操作示例

告警信息:

钉钉告警信息:


6.常见问题及优化

1.zabbix web界面提示“zabbix server is not running”

原因:mysql端口不为默认3306端口,需手工配置webservr连接数据库配置文件

/data/www/zabbix/conf/zabbix.conf.php

$DB['PORT'] = ‘port';

/usr/local/zabbix/etc/zabbix_server.conf

DBPort=port

2.语言设置选项没有中文

原因:zabbix默认关闭了中文语言项,需手动修改配置文件打开

/data/www/zabbix/include/locales.inc.php

修改zh_CN后的falsetrue即可

3.Server获取不到Agent数据提示如下图:

经排查发现agent是以独立进程方式启动,引用的配置文件为zabbix_agentd.conf,并非zabbix_agent.conf

后配置修改zabbix_agentd.conf问题解决。

关于zabbix_agentd.confzabbix_agent.conf

zabbix_agent.conf   :是用超级服务(xinetd)的方式来启动的

zabbix_agentd.conf:是以独立进程的方式来启动的

4.前端中文乱码

原因:zabbix虽然支持中文,但是zabbix主程序目录下并没有中文字体文件,导致出现乱码。

我们将windows上使用的中文字体上传到服务端的zabbix主程序字体目录下再修改其配置文件即可

/data/www/zabbix/fonts/DejaVuSans.ttf

修改/data/www/zabbix/include/defines.inc.phpsimkai修改为DejaVuSans即可

5.自定义触发器等级属性

触发器原生的事件属性包括未分类、咨询、警告、一般严重、严重、灾难”6个属性,某些情况下,这种定义可能不是很好,不能很好的表达出我们对事件的严重程度定义,也不够直观明了。所以我们可以去自定义设置。

依次点击管理”—>”一般”—>”右上角选择触发器严重性进行设置。

这里我们定义为更贴合与等级的属性,P0P1P2等,P0等级最高,依次类推。

6.登录密码变更

select * from zabbix.users where alias='Admin';

update zabbix.users set passwd=md5('zabbix') where alias='Admin'

flush privileges;

7.禁用重新安装

vim /usr/local/www/zabbix/include/menu.inc.php

注释如下代码:

)/**,
      array(
      'url' => 'setup.php',
      'label' => _('Installation')
)**/

返回页面刷新即可。

持续更新中。

7.网上知识分享

ZABBIX集成OneAlert实现短信/邮件/微信/电话/App告警:

http://9477846.blog.51cto.com/9467846/1744706

对其进行任意修改和二次开发;

   2.2.环境配置要求低,安装和配置简单灵活,支持多种操作系统;

   2.3.将采集到的数据持久存储在数据库中,便于对监控数据的二次分析;

   2.4.自带了丰富的监控模板和监控项,可轻松满足于一般的监控指标;

   2.5.告警方式多,支持邮件,短信,脚本等,并且告警消息可按群组分组进行下发;

   2.6.拥有丰富的扩展能力和众多的开源社区技术支持。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多