225025 发表于 2019-1-24 09:29:53

企业级大型监控系统zabbix

  一、自动化及监控概述
  自动化运维的三个层次
  1、操作系统的自动化安装
  虚拟化安装操作系统
  kickstart
  2、配置管理工具,用于安装应用程序,调试配置文件,常见的有puppet。
  http://note.youdao.com/src/8CA7B992784045D79E7DACC15002295B
  3、联动工具,func、ansible。
  保障自动化运维正常工作的工作:
  监控、报警系统
http://note.youdao.com/src/72CE0D862A5B45F19F1CAAEF0CA29976

  监控系统通信的三种通信方法:
  1、通常监控系统分为监控端和被监控端,他们之间通过常见的SNMP进行通信,可以在客户端设置安全规则和通信端口,增强安全性。并且SNMP的V2版本是目前最流行的。
  V2版本传输过程是明文的。
  2、另外一种就是各个厂商自己专用的nms/agent架构,来增强安全性。常见的nagios客户端程序就是专门用于和nms端通信的,他们之间使用专用的通信协议和编码。
  3、通过SSH进行通信监控。通过类似远程管理的方式进行收集数据,这要求使用对方系统的账户信息。
  
http://note.youdao.com/src/2A9621BFA7F24A788F8965A13535B0F3

  常见监控工具介绍
  cacti:采集数据,保存数据、数据展示、数据分析及报警
  nagios:只关心正常与否的状态,可以处理报警中的依赖关系,优势是有着非常强大的报警功能。
  rrdtool:可以完成数据保存及绘图工具。cacti的工作实质上依赖于rrdtool工具。
  二、zabbix
http://note.youdao.com/src/7E86F78655C341FBBFBECE08171FD01C
  1、特点:
  1.1、数据采集、存储、告警、展示。

  1.2、完全开源
  1.3、支持10万个监控点
  1.4、丰富的监控对象
  1.5、丰富的监控方法,包括zabbix agent、snmp agent、web monitoring、database monitoring、agentless monitoring、calculated monitoring、
http://note.youdao.com/src/5C91FEE34F80452989728BA5401BB70D

  2、zabbix架构
  zabbix可以对告警信息进行分级告警,即按照问题处理时间的长短来决定通知范围。
  对于大型IDC,可以通过设置zabbix proxy来解决防火墙阻挡及缓解单台服务器工作压力的问题。
http://note.youdao.com/src/F5EF4F9ED47A4D3BA24F601CBB404343
http://note.youdao.com/src/55A41F2D80DF4420BB4BF37FBEC0B8FD

  3、zabbix的核心组件
  zabbix server:接收agent的数据
  zabbix databse:存储配置信息及收集的数据
  zabbix web GUI:数据的图形展示
http://note.youdao.com/src/7349080671904EE0A8938C55D962FE4C
http://note.youdao.com/src/D9C5589EDE444CFEBB92BB38BD8BADD1

  4、zabbix常用的术语
  主机:监控的物理设备,ip或域名
  主机组:主机的逻辑容器
  监控项(item):一个特定监控指标的相关数据。
  触发器(tirgger):一个表达式,用于评估某监控对象的特定item内所接收到的数据是否在合理范围内,就是指阈值,当接收到的数据量大于阈值时,触发器状态从“ok”转换成“problem“,当数据再次返回到合理返回后,状态同样转换会”ok“状态。
  事件(event):一个状态的改变就是一个事件。
  动作(action):特定事件预先定义的处理方法。
  报警升级:自定义报警升级条件,比如按照时间的长度来升级。
  媒介:发送通知的手段方法。
  通知:zabbix用户
  远程命令:预定义的命令,在处于某种特定情况下自动执行
  模板:用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen等,模板可以直接连接到单个主机。
  应用:一组item的集合
http://note.youdao.com/src/0B65C3BD240A4C109AC9B83E7B4501D5
  
  5、安装
  建议将zabbix和数据库服务器放在不同的服务器上。
  安装方式:
  a、源码编译安装
  ./configure —enable-server —with-net-snmp —libcurl —with-mysql
  b、rpm安装(10.40.0.226)
# 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),并安装。
# rpm -ql zabbix20-server-mysql
/usr/sbin/zabbix_server_mysql
/usr/share/zabbix-mysql
/usr/share/zabbix-mysql/data.sql
/usr/share/zabbix-mysql/images.sql
/usr/share/zabbix-mysql/schema.sql
  

  mysql服务器端授权远程登录访问
mysql> grant all ON *.* TO 'root'@'10.40.%.%' IDENTIFIED BY 'root' WITH GRANTOPTION;
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
# mysql -u root -proot -h 10.40.0.229zabbix< /usr/share/zabbix-mysql/schema.sql
# mysql -u root -proot -h 10.40.0.229zabbix< /usr/share/zabbix-mysql/images.sql
# mysql -u root -proot -h 10.40.0.229zabbix< /usr/share/zabbix-mysql/data.sql   
#
  

  为访问zabbix数据库创建用户账户
mysql> grant all ON zabbix.* TO 'zabbixtest'@'10.40.%.%' IDENTIFIED BY 'test' WITH GRANTOPTION;
  

  6、配置文件讲解
  zabbix_server.conf基本配置:
# 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
# service zabbix-server start
Starting Zabbix server:                                    [OK]
#
  

  
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后缀来访问的。
# vim /etc/httpd/conf.d/zabbix.conf


#
# Zabbix monitoring system php web frontend
#


Alias /zabbix /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
  

http://note.youdao.com/src/EB867E70E62D46259DAC1C5CFDC7595A
  如果php.ini配置文件设置不合理会出现以下错误信息,需要重新配置并重启php-fpm服务。
http://note.youdao.com/src/90245782BDA1429AB33229B805349202
http://note.youdao.com/src/FBC223A02FBB4CA8908755D54AC1A6CB
  注意,这里登录的账户信息是登录zabbix的账户,而不是zabbix连接mysql的账户,所以不要混淆了。默认zabbix的账户是admin,密码是zabbix。
http://note.youdao.com/src/78B4A0F5D58945828E29A4EABFF2B8E2
  登录后界面:
http://note.youdao.com/src/BAC3EB83943843A2B17F85BC86D412A1
  添加客户端
  客户端安装zabbix-agent和zabbix核心模块。
# yum install zabbix20-agent zabbix20
  

  配置客户端配置文件
# 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
  

# service zabbix-agent restart
Shutting down Zabbix agent:                              [OK]
Starting Zabbix agent:                                     [OK]
  三、zabbix-web讲解
  items表示监控项,多个监控项可以组成一个组,就是application啦。
http://note.youdao.com/src/93646F669B194633AC5EFE754027A59D
  name:自定义监控内容,方便理解
http://note.youdao.com/src/3F052F32E63D45AA9A7E50783BA2BECF
  key:标记item的键,这个键就是一个变量,模板,指定监控内容,可以接受参数,不能重名

  [ ]内的没有< >的表示必须填写项,而有的,表示含有默认值的项,可以不写明。
http://note.youdao.com/src/13569A63357945419F43D3B5A32DCD79
  指定信息类型:整数、字符型、文本型
http://note.youdao.com/src/59AE8D2F25B645CAAB6314EA96858B22
  指定数据类型:布尔型、十进制、十六进制等。
http://note.youdao.com/src/23C99FBFD70E47099C5000E9E5AE98D8
  指定单位:
http://note.youdao.com/src/A4D5BD33D37A47B98D78B47A5CBC437B
  自定义单位换算比率:
http://note.youdao.com/src/AFF85B6C986D417FB804DE7FB60FEDFD
  保存方法:store value
  as is:按源数据方式进行存储
  delta:当前值减去上一次获取的数据值,除以当前时间戳减去前一次值获取时的时间戳得到的结果;如果当期值小于前一次的值,其将会被丢弃。
  delta(simple change):当前时间采集的数据值减去上一个时间采集的数据值之间的差
http://note.youdao.com/src/1505436561574E63942642AE62B635A8
  显示方法:show value
  new application:指定当前,或者新建一个application容器,用于存放类似的items。
http://note.youdao.com/src/70B859DEBF6D476099D84A3AFC630CB2
  显示创建的items图表
http://note.youdao.com/src/09FFA4BCADA247848D28D93417D41E43
  将多个items放在一个graph里面,可以在同一个表中显示多个item信息。
http://note.youdao.com/src/CA3D33C885B44AC8A7AC0D5D078EBB2A
http://note.youdao.com/src/0113B14C5B80452CB1E86B4269A550B1
  总结视频:http://edu.运维网.com//center/course/lesson/index?id=18621
  2、触发器使用方法
  trigger可以生成事件event,但是event并不都是trigger生成的。
  创建触发器:
  “监控项”仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时給相关人员发送告警信息,“触发器”正是用监控项所收集的数据定义阈值。
  每个触发器仅能关联一个监控项,但可以为一个监控项同时使用多个触发器。
  事实上,为一个监控项定义多个不同阈值的触发器,可以实现不同级别的报警功能。
  一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值。
  一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将转换为“problem”;而当采集的数据再次恢复到正常范围时,其状态将返回到“ok”状态。
  触发器表达式格式:
  {:.()}
  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)将返回一周之前的最大值。
http://note.youdao.com/src/A1CE24CF8274440FA50D9CCD3A2A2255
  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=,
  当是判断类型时,如果执行成功就返回“1”,如果不成功就返回“0”。
  比如:自定义一个agent端的内存空闲状态,然后在监控端进行调用。
agent端:
UserParameter=10.40.0.227-memory-free,/usr/bin/free |awk '/^Mem/ {print $4}'
  

  模拟提取结果:
# zabbix_get -s 10.40.0.227-k 10.40.0.227-memory-free
295044
http://note.youdao.com/src/A0829F684989426A8104FED8D48CBD00
  如果脚本中设置了多个参数的话,可以使用$1/$2的方式调用,而在脚本里的$变量,可以在前面再加一个$以示区别。
http://note.youdao.com/src/F32120234C29458C8265FC516E32E4E4
http://note.youdao.com/src/F743F73E75594D9F95148E9CFE87BD39
  客户端配置
UserParameter=10.40.0.227-memory-list
[*],/bin/cat /proc/meminfo |awk '/$1/ {print $$2}'
  

  服务器端模拟获取:
# zabbix_get -s 10.40.0.227-k "10.40.0.227-memory-list"
293944
  

http://note.youdao.com/src/4161347BE3C94F81919E2B4CD962D93A
  定义触发器的阈值,并在图中显示出来,这里定义的告警阈值是300m
http://note.youdao.com/src/2818F9E150A9430782933253062B7E76
http://note.youdao.com/src/160B77B678924810B63121586CA3BC74
  7、自动发现功能
  
  发现方法:
  基于ip地址范围
  通过服务器上运行的服务
  通过agent的自动注册功能
  通过SNMP的自动注册功能
  发现后采取的(动作)action包括添加主机和关联模板,这里同样需要定义condition和operation就是要细化什么发现后添加的条件。
  8、agent的自动注册功能(需要和自动发现结合使用)
  通常用于此前故障的agent重新上线时的场景。也可基于active agent的自动注册机制添加被动检测,这会通过active agent注册时提供的“listen ip”和“listen prot”进行。
  server端在收到自动注册请求后以接收到的IP和Port为接口属性。
  http://note.youdao.com/src/631E8BDDC16D41CFBCFA383039FE4000
  9、web监控
  可以进行web站点的可用性检测。可以直接实现web页面可用性监控。
  通过web监控可以实现的功能:
  a、整个web方案中所有的step的平均下载速度
  b、失败的step号
  c、失败的报错信息
  创建web方案的方法:
  a、创建一个适用的application
  b、可以在hosts或者templtes上创建应用
  c、如果在“tempates”上创建应用,则需要将此“templates”链接至要监控其web的主机上,才能使用此“application”。
http://note.youdao.com/src/791992A5D536463A9417C75B2417BC65

http://note.youdao.com/src/C2DC3A6B6C494D95951036D58662E79E

  10、分布式监控
  在大型环境中,提供2中方案
  node:提供完整的zabbixserver用以建立分布式监控中的层级。本身是一台server,有完整的web页面和数据库,将数据源源不断的发送到master端。
  proxy:只是一个proxy的daemon进程,也有自己的数据库,并且只需要导入scheme数据库。数据在他的数据库会保存一定时间,然后在打包给master端,没有web接口,只负责收集信息,并发送给server端
http://note.youdao.com/src/FB91A5411D2F4915B55282FCCCFC5F3A

  proxy相比node的优势如下:
  proxy压力小,数据库值存储一定时间数据
  master端压力变小,数据不是源源不断的获取,减少io压力
  架构更清晰,易于维护。
  master-node架构模型:
http://note.youdao.com/src/A89237D482A54D41A3E3DF88F0C0E469

  特性:
  解决host过多时单台server面临性能瓶颈的问题
  支持热插拔
  node定时给server发送configuration、history、event
  server定时给node发送configuration
  所有配置变更只能在node节点操作,不能再server操作。
  支持树状结构
  master-proxy架构模型:

http://note.youdao.com/src/B75906E2A2EA4C76BF5DB8F3FD41E9B9

  特性:
  proxy不会向server同步configuration,只会接收
  proxy的数据库定时会将数据发送给server,proxy本地数据只保存最近没有发送的数据。
  




页: [1]
查看完整版本: 企业级大型监控系统zabbix