设为首页 收藏本站
查看: 990|回复: 0

[经验分享] 企业级大型监控系统zabbix

[复制链接]

尚未签到

发表于 2019-1-24 09:29:53 | 显示全部楼层 |阅读模式
  一、自动化及监控概述
  自动化运维的三个层次
  1、操作系统的自动化安装
  虚拟化安装操作系统
  kickstart
  2、配置管理工具,用于安装应用程序,调试配置文件,常见的有puppet。
  
  3、联动工具,func、ansible。
  保障自动化运维正常工作的工作:
  监控、报警系统


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


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

  1、特点:
  1.1、数据采集、存储、告警、展示。

  1.2、完全开源
  1.3、支持10万个监控点
  1.4、丰富的监控对象
  1.5、丰富的监控方法,包括zabbix agent、snmp agent、web monitoring、database monitoring、agentless monitoring、calculated monitoring、


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



  3、zabbix的核心组件
  zabbix server:接收agent的数据
  zabbix databse:存储配置信息及收集的数据
  zabbix web GUI:数据的图形展示



  4、zabbix常用的术语
  主机:监控的物理设备,ip或域名
  主机组:主机的逻辑容器
  监控项(item):一个特定监控指标的相关数据。
  触发器(tirgger):一个表达式,用于评估某监控对象的特定item内所接收到的数据是否在合理范围内,就是指阈值,当接收到的数据量大于阈值时,触发器状态从“ok”转换成“problem“,当数据再次返回到合理返回后,状态同样转换会”ok“状态。
  事件(event):一个状态的改变就是一个事件。
  动作(action):特定事件预先定义的处理方法。
  报警升级:自定义报警升级条件,比如按照时间的长度来升级。
  媒介:发送通知的手段方法。
  通知:zabbix用户
  远程命令:预定义的命令,在处于某种特定情况下自动执行
  模板:用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen等,模板可以直接连接到单个主机。
  应用:一组item的集合

  
  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/images.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/images.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



    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
  


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


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

  登录后界面:

  添加客户端
  客户端安装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啦。

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

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

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

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

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

  指定单位:

  自定义单位换算比率:

  保存方法:store value
  as is:按源数据方式进行存储
  delta:当前值减去上一次获取的数据值,除以当前时间戳减去前一次值获取时的时间戳得到的结果;如果当期值小于前一次的值,其将会被丢弃。
  delta(simple change):当前时间采集的数据值减去上一个时间采集的数据值之间的差

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

  显示创建的items图表

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


  总结视频: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)将返回一周之前的最大值。

  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}'
  

  模拟提取结果:
[root@node6.dtedu.com ~]# zabbix_get -s 10.40.0.227  -k 10.40.0.227-memory-free
295044

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


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


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


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




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


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


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



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





  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-666884-1-1.html 上篇帖子: Zabbix监控软件安装使用教程 下篇帖子: zabbix添加自定义item、触发器、图形,并执行远端命令
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表