一、自动化及监控概述

自动化运维的三个层次

1、操作系统的自动化安装

虚拟化安装操作系统

kickstart

2、配置管理工具,用于安装应用程序,调试配置文件,常见的有puppet。

774773.tmp

3、联动工具,func、ansible。

保障自动化运维正常工作的工作:

监控、报警系统

377827.tmp

监控系统通信的三种通信方法:

1、通常监控系统分为监控端和被监控端,他们之间通过常见的SNMP进行通信,可以在客户端设置安全规则和通信端口,增强安全性。并且SNMP的V2版本是目前最流行的。

V2版本传输过程是明文的。

2、另外一种就是各个厂商自己专用的nms/agent架构,来增强安全性。常见的nagios客户端程序就是专门用于和nms端通信的,他们之间使用专用的通信协议和编码。

3、通过SSH进行通信监控。通过类似远程管理的方式进行收集数据,这要求使用对方系统的账户信息。

326231.tmp

常见监控工具介绍

cacti:采集数据,保存数据、数据展示、数据分析及报警

nagios:只关心正常与否的状态,可以处理报警中的依赖关系,优势是有着非常强大的报警功能。

rrdtool:可以完成数据保存及绘图工具。cacti的工作实质上依赖于rrdtool工具。

二、zabbix

667611.tmp

1、特点:

1.1、数据采集、存储、告警、展示。

1.2、完全开源

1.3、支持10万个监控点

1.4、丰富的监控对象

1.5、丰富的监控方法,包括zabbix agent、snmp agent、web monitoring、database monitoring、agentless monitoring、calculated monitoring、

713446.tmp

2、zabbix架构

zabbix可以对告警信息进行分级告警,即按照问题处理时间的长短来决定通知范围。

对于大型IDC,可以通过设置zabbix proxy来解决防火墙阻挡及缓解单台服务器工作压力的问题。

380253.tmp

713055.tmp

3、zabbix的核心组件

zabbix server:接收agent的数据

zabbix databse:存储配置信息及收集的数据

zabbix web GUI:数据的图形展示

325712.tmp

717374.tmp

4、zabbix常用的术语

主机:监控的物理设备,ip或域名

主机组:主机的逻辑容器

监控项(item):一个特定监控指标的相关数据。

触发器(tirgger):一个表达式,用于评估某监控对象的特定item内所接收到的数据是否在合理范围内,就是指阈值,当接收到的数据量大于阈值时,触发器状态从“ok”转换成“problem“,当数据再次返回到合理返回后,状态同样转换会”ok“状态。

事件(event):一个状态的改变就是一个事件。

动作(action):特定事件预先定义的处理方法。

报警升级:自定义报警升级条件,比如按照时间的长度来升级。

媒介:发送通知的手段方法。

通知:zabbix用户

远程命令:预定义的命令,在处于某种特定情况下自动执行

模板:用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen等,模板可以直接连接到单个主机。

应用:一组item的集合

598614.tmp

5、安装

建议将zabbix和数据库服务器放在不同的服务器上。

安装方式:

a、源码编译安装

./configure —enable-server —with-net-snmp —libcurl —with-mysql

b、rpm安装(10.40.0.226)

[root@node6.dtedu.com ~]# yum install zabbix20 zabbix20-server zabbix20-server-mysql zabbix20-web zabbix20-web-mysql zabbix20-agent

Dependencies Resolved


==============================================================================================================================================================================================================================================

 Package                                                            Arch                                                Version                                                       Repository                                         Size

==============================================================================================================================================================================================================================================

Installing:

 zabbix20                                                           x86_64                                              2.0.21-1.el6                                                  epel                                              188 k

 zabbix20-agent                                                     x86_64                                              2.0.21-1.el6                                                  epel                                              149 k

 zabbix20-server                                                    noarch                                              2.0.21-1.el6                                                  epel                                               23 k

 zabbix20-server-mysql                                              x86_64                                              2.0.21-1.el6                                                  epel                                              1.4 M

 zabbix20-web                                                       noarch                                              2.0.21-1.el6                                                  epel                                              3.9 M

 zabbix20-web-mysql                                                 noarch                                              2.0.21-1.el6                                                  epel                                               13 k

Installing for dependencies:

 OpenIPMI-libs                                                      x86_64                                              2.0.16-14.el6                                                 base                                              473 k

 dejavu-sans-fonts                                                  noarch                                              2.33-1.el6                                                    base                                              2.2 M

 iksemel                                                            x86_64                                              1.4-2.el6                                                     epel                                               48 k

 php-bcmath                                                         x86_64                                              5.3.3-49.el6                                                  base                                               40 k


Transaction Summary

==============================================================================================================================================================================================================================================

Install      10 Package(s)


将zabbix服务器端的以下脚本导入到MySQL数据库服务器上(10.40.0.229),并安装。

[root@node6.dtedu.com ~]# rpm -ql zabbix20-server-mysql

/usr/sbin/zabbix_server_mysql

/usr/share/zabbix-mysql

/usr/share/zabbix-mysql/data.sql

/usr/share/zabbix-mysql/p_w_picpaths.sql

/usr/share/zabbix-mysql/schema.sql


mysql服务器端授权远程登录访问

mysql> grant all ON *.* TO 'root'@'10.40.%.%' IDENTIFIED BY 'root' WITH GRANT  OPTION;

Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


zabbix服务器远程登录MySQL数据库,并导入数据。

mysql> create database zabbix;

Query OK, 1 row affected (0.01 sec)


mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| gongbing           |

| mysql              |

| performance_schema |

| test               |

| zabbix             |

+--------------------+

6 rows in set (0.01 sec)


mysql> exit

Bye

[root@node6.dtedu.com ~]# mysql -u root -proot -h 10.40.0.229  zabbix< /usr/share/zabbix-mysql/schema.sql 

[root@node6.dtedu.com ~]# mysql -u root -proot -h 10.40.0.229  zabbix< /usr/share/zabbix-mysql/p_w_picpaths.sql 

[root@node6.dtedu.com ~]# mysql -u root -proot -h 10.40.0.229  zabbix< /usr/share/zabbix-mysql/data.sql   

[root@node6.dtedu.com ~]# 


为访问zabbix数据库创建用户账户

mysql> grant all ON zabbix.* TO 'zabbixtest'@'10.40.%.%' IDENTIFIED BY 'test' WITH GRANT  OPTION;


6、配置文件讲解

zabbix_server.conf基本配置:

[root@node6.dtedu.com ~]# cat /etc/zabbix_server.conf  |grep -v ^#|grep -v ^$

LogFile=/var/log/zabbix/zabbix_server.log

LogFileSize=0

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

DBHost=10.40.0.229

DBName=zabbix

DBUser=zabbixtest

DBPassword=test

DBSocket=/var/lib/mysql/mysql.sock

DBPort=3306

AlertScriptsPath=/var/lib/zabbixsrv/alertscripts

ExternalScripts=/var/lib/zabbixsrv/externalscripts

TmpDir=/var/lib/zabbixsrv/tmp


启动服务并查看监听端口10051

[root@node6.dtedu.com ~]# service zabbix-server start

Starting Zabbix server:                                    [  OK  ]

[root@node6.dtedu.com ~]# 


tcp    LISTEN     0      128                                                                                                  :::10051                                                                                               :::*      users:(("zabbix_server",32219,5),("zabbix_server",32221,5),("zabbix_server",32222,5),("zabbix_server",32223,5),("zabbix_server",32224,5),("zabbix_server",32225,5),("zabbix_server",32226,5),("zabbix_server",32227,5),("zabbix_server",32228,5),("zabbix_server",32229,5),("zabbix_server",32230,5),("zabbix_server",32231,5),("zabbix_server",32232,5),("zabbix_server",32233,5),("zabbix_server",32234,5),("zabbix_server",32235,5),("zabbix_server",32236,5),("zabbix_server",32237,5),("zabbix_server",32238,5),("zabbix_server",32239,5),("zabbix_server",32240,5),("zabbix_server",32241,5),("zabbix_server",32242,5),("zabbix_server",32243,5),("zabbix_server",32244,5),("zabbix_server",32245,5),("zabbix_server",32246,5))

tcp    LISTEN     0      128                                                                                                   *:10051                                                                                                *:*      users:(("zabbix_server",32219,4),("zabbix_server",32221,4),("zabbix_server",32222,4),("zabbix_server",32223,4),("zabbix_server",32224,4),("zabbix_server",32225,4),("zabbix_server",32226,4),("zabbix_server",32227,4),("zabbix_server",32228,4),("zabbix_server",32229,4),("zabbix_server",32230,4),("zabbix_server",32231,4),("zabbix_server",32232,4),("zabbix_server",32233,4),("zabbix_server",32234,4),("zabbix_server",32235,4),("zabbix_server",32236,4),("zabbix_server",32237,4),("zabbix_server",32238,4),("zabbix_server",32239,4),("zabbix_server",32240,4),("zabbix_server",32241,4),("zabbix_server",32242,4),("zabbix_server",32243,4),("zabbix_server",32244,4),("zabbix_server",32245,4),("zabbix_server",32246,4

默认情况下,zabbix_web是通过/usr/share/zabbix/目录来存储页面文件的,而访问是通过/zabbix后缀来访问的。

[root@node6.dtedu.com ~]# vim /etc/httpd/conf.d/zabbix.conf 


#

# Zabbix monitoring system php web frontend

#


Alias /zabbix /usr/share/zabbix


<Directory "/usr/share/zabbix">

    Options FollowSymLinks

    AllowOverride None


注意:zabbix服务器上需要开启web服务功能,可以是httpd或者nginx,我这里使用的是httpd,并且需要应用程序服务器PHP,如果是本机安装PHP,需要开启服务,并且httpd上添加以下命令行:

AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl    .crl

AddType application/x-httpd-php .php


屏幕快照 2017-09-05 上午9.48.00.png

如果php.ini配置文件设置不合理会出现以下错误信息,需要重新配置并重启php-fpm服务。

屏幕快照 2017-09-05 上午9.50.37.png

屏幕快照 2017-09-05 上午9.52.48.png

注意,这里登录的账户信息是登录zabbix的账户,而不是zabbix连接mysql的账户,所以不要混淆了。默认zabbix的账户是admin,密码是zabbix。

屏幕快照 2017-09-05 上午9.59.47.png

登录后界面:

屏幕快照 2017-09-05 上午10.01.29.png

添加客户端

客户端安装zabbix-agent和zabbix核心模块。

[root@10 ~]# yum install zabbix20-agent zabbix20 


配置客户端配置文件

[root@www ~]# cat /etc/zabbix_agentd.conf  |grep -v ^# |grep -v ^$

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

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Server=10.40.0.226 指定服务器端ip地址

ListenPort=10050 指定本地监听端口

ListenIP=0.0.0.0 指定本地许可监听地址,0.0.0.0表示任意地址,127.0.0.1表示本机,也可指定具体地址

ServerActive=127.0.0.1

Hostname=Zabbix server


[root@www ~]# service zabbix-agent restart

Shutting down Zabbix agent:                                [  OK  ]

Starting Zabbix agent:                                     [  OK  ]

三、zabbix-web讲解

items表示监控项,多个监控项可以组成一个组,就是application啦。

709936.tmp

name:自定义监控内容,方便理解

879610.tmp

key:标记item的键,这个键就是一个变量,模板,指定监控内容,可以接受参数,不能重名

[ ]内的没有< >的表示必须填写项,而有<>的,表示含有默认值的项,可以不写明。

394302.tmp

指定信息类型:整数、字符型、文本型

屏幕快照 2017-09-05 上午11.45.16.png

指定数据类型:布尔型、十进制、十六进制等。

屏幕快照 2017-09-05 上午11.45.34.png

指定单位:

442209.tmp

自定义单位换算比率:

14654.tmp

保存方法:store value

as is:按源数据方式进行存储

delta:当前值减去上一次获取的数据值,除以当前时间戳减去前一次值获取时的时间戳得到的结果;如果当期值小于前一次的值,其将会被丢弃。

delta(simple change):当前时间采集的数据值减去上一个时间采集的数据值之间的差

181223.tmp

显示方法:show value

new application:指定当前,或者新建一个application容器,用于存放类似的items。

屏幕快照 2017-09-05 下午5.09.54.png

显示创建的items图表

屏幕快照 2017-09-05 下午5.15.25.png

将多个items放在一个graph里面,可以在同一个表中显示多个item信息。

屏幕快照 2017-09-05 下午5.10.48.png

屏幕快照 2017-09-05 下午5.11.47.png

总结视频:http://edu.51cto.com//center/course/lesson/index?id=18621

2、触发器使用方法

trigger可以生成事件event,但是event并不都是trigger生成的。

创建触发器:

“监控项”仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时給相关人员发送告警信息,“触发器”正是用监控项所收集的数据定义阈值。

每个触发器仅能关联一个监控项,但可以为一个监控项同时使用多个触发器。

事实上,为一个监控项定义多个不同阈值的触发器,可以实现不同级别的报警功能。

一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值。

一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将转换为“problem”;而当采集的数据再次恢复到正常范围时,其状态将返回到“ok”状态。

触发器表达式格式:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

Server:主机名

key:主机上关系的相应监控项的key

function:评估采集到的数据是否在合理范围内所使用的函数。

常见函数:avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum

parameter:函数参数:大多数数值函数可以接受秒数作为其参数,而如果在数值参数之前使用“#”作为前缀,则表示为最近几次的取值,如“sum(300)”表示300秒内所有取值的和,而sum(#10)则表示最近10此取值的和。

此外,avg、count、last、min、max都支持使用第二个参数,用于完成时间设定如,max(1h,7d)将返回一周之前的最大值。

476267.tmp

3、事件

zabbix的事件是基于时间戳进行标记的,他们是采取动作的基础。

事件来源:

a、触发器事件

b、发现事件:周期性的扫描“网络发现规则”中指定的ip地址范围,一旦发现主机或服务,就产生发现事件

发现事件类型:

service up、service down、host up、host down、service discovered、service lost、host discovered和host lost

4、zabbix模板的使用

宏一种抽象,它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行替换。只能以大写字母开头。支持在全局、模板、主机级别使用自定义宏。自定义宏使用“{$MACRO}”语法格式。宏可以应用在item keys和descriptions、trigger名称 和表达式、主机接口IP/DNS接口、discovery机制的SNMP协议中。

宏替换次序:

首先是主机级别的宏

其次是当前主机上一级模板中的宏,多个一级模板中的宏按ID排序

  二级模板中的宏

最后检查全局宏

zabbix如果无法查找到某主机定义使用的宏,则不会对其进行替换操作。要使用用户自定义的宏,方法有两种:

全局宏:“administrator-general-macros”

主机或模板级别的宏:编辑相应主机或模板的属性即可。

5、用户自定义参数

首先需要在客户端的配置文件中定义一个脚本,里面包含可以被调用的“key”,然后监控端调用这个“key”获取结果。

基本格式:userparameter=<key>,<command>

当是判断类型时,如果执行成功就返回“1”,如果不成功就返回“0”。

比如:自定义一个agent端的内存空闲状态,然后在监控端进行调用。

agent端:

UserParameter=10.40.0.227-memory-free,/usr/bin/free |awk '/^Mem/ {print $4}'


模拟提取结果:

[root@node6.dtedu.com ~]# zabbix_get -s 10.40.0.227  -k 10.40.0.227-memory-free

295044

屏幕快照 2017-09-08 上午10.35.33.png

如果脚本中设置了多个参数的话,可以使用$1/$2的方式调用,而在脚本里的$变量,可以在前面再加一个$以示区别。

780565.tmp

223964.tmp

客户端配置

UserParameter=10.40.0.227-memory-list[*],/bin/cat /proc/meminfo |awk '/$1/ {print $$2}'


服务器端模拟获取:

[root@node6.dtedu.com ~]# zabbix_get -s 10.40.0.227  -k "10.40.0.227-memory-list[MemFree]"

293944


屏幕快照 2017-09-08 下午2.03.56.png

定义触发器的阈值,并在图中显示出来,这里定义的告警阈值是300m

屏幕快照 2017-09-08 下午2.13.24.png

屏幕快照 2017-09-08 下午2.17.00.png

7、自动发现功能


发现方法:

基于ip地址范围

通过服务器上运行的服务

通过agent的自动注册功能

通过SNMP的自动注册功能

发现后采取的(动作)action包括添加主机和关联模板,这里同样需要定义condition和operation就是要细化什么发现后添加的条件。

8、agent的自动注册功能(需要和自动发现结合使用)

通常用于此前故障的agent重新上线时的场景。也可基于active agent的自动注册机制添加被动检测,这会通过active agent注册时提供的“listen ip”和“listen prot”进行。

server端在收到自动注册请求后以接收到的IP和Port为接口属性。

340621.tmp

9、web监控

可以进行web站点的可用性检测。可以直接实现web页面可用性监控。

通过web监控可以实现的功能:

a、整个web方案中所有的step的平均下载速度

b、失败的step号

c、失败的报错信息

创建web方案的方法:

a、创建一个适用的application

b、可以在hosts或者templtes上创建应用

c、如果在“tempates”上创建应用,则需要将此“templates”链接至要监控其web的主机上,才能使用此“application”。

358737.tmp

460725.tmp

10、分布式监控

在大型环境中,提供2中方案

node:提供完整的zabbixserver用以建立分布式监控中的层级。本身是一台server,有完整的web页面和数据库,将数据源源不断的发送到master端。

proxy:只是一个proxy的daemon进程,也有自己的数据库,并且只需要导入scheme数据库。数据在他的数据库会保存一定时间,然后在打包给master端,没有web接口,只负责收集信息,并发送给server端

735163.tmp

proxy相比node的优势如下:

proxy压力小,数据库值存储一定时间数据

master端压力变小,数据不是源源不断的获取,减少io压力

架构更清晰,易于维护。

master-node架构模型:

183591.tmp

特性:

解决host过多时单台server面临性能瓶颈的问题

支持热插拔

node定时给server发送configuration、history、event

server定时给node发送configuration

所有配置变更只能在node节点操作,不能再server操作。

支持树状结构

master-proxy架构模型:

798222.tmp

特性:

proxy不会向server同步configuration,只会接收

proxy的数据库定时会将数据发送给server,proxy本地数据只保存最近没有发送的数据。