zoukankan      html  css  js  c++  java
  • 项目实战——企业级Zabbix监控实战(一)

    项目实战——企业级Zabbix监控实战

    实验一:Zabbix监控的搭建

    1、实验准备

      centos系统服务器3台、 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信。
    1)所有机器关闭防火墙和selinux

    	iptables -F && setenforing 
    

    2)根据架构图,实验基本设置如下:

    2、Zabbix的安装

    1)更新我们的yum仓库

      我们去官网下载一个包zabbix-release-3.4-2.el7.noarch.rpm,本地安装至我们的虚拟机,这样,我们本地就有了新的yum源,可以直接安装zabbix服务:

    wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
    

      下载到本地以后,我们直接安装:

    rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
    

      而后更新我们的yum仓库:

    [root@server ~]# yum repolist 
    Loaded plugins: fastestmirror, langpacks  
    Loading mirror speeds from cached hostfile
    zabbix-non-supported                                                      4/4
    repo id                     repo name                                   status
    base                        base                                         9,363
    epel                        epel                                        11,349
    zabbix/x86_64               Zabbix Official Repository - x86_64             80
    zabbix-non-supported/x86_64 Zabbix Official Repository non-supported -       4
    repolist: 20,796
    

      由于我配置的epel源中,也有zabbix的包,但是版本很旧了,为了不冲突,我们在配置文件中把epel源注释掉,然后再来查看我们的yum仓库:

    [root@server ~]# vim /etc/yum.repos.d/base.repo
    	[base]
    	name=base
    	baseurl=file:///misc/cd
    	gpgcheck=0
    
    	#[epel]
    	#name=epel
    	#baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
    	#gpgcheck=0
    [root@server ~]# yum repolist
    Loaded plugins: fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
    repo id                     repo name                                    status
    base                        base                                         9,363
    zabbix/x86_64               Zabbix Official Repository - x86_64             80
    zabbix-non-supported/x86_64 Zabbix Official Repository non-supported - x     4
    repolist: 9,447
    

      现在,我们去安装包就可以了:

    [root@node1 ~]# yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql
    

      安装完成,本步骤完成。

    2)设置数据库:

      首先,我们修改一下配置文件——/etc/my.cnf.d/server.cnf

    [root@server ~]# vim /etc/my.cnf.d/server.cnf
    	[mysqld]
    	skip_name_resolve = ON			#跳过主机名解析
    	innodb_file_per_table = ON		#
    	innodb_buffer_pool_size = 256M	#缓存池大小
    	max_connections = 2000			#最大连接数
    
    	log-bin = master-log			#开启二进制日志
    

      重启我们的数据库服务:

    [root@server ~]# systemctl restart mariadb
    

      创建数据库并授权账号

    MariaDB [(none)]> create database zabbix character set 'utf8';
    MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.37.%' identified by 'keer';
    MariaDB [(none)]> flush privileges;				#刷新授权
    

      导入表
      首先,我们来查看一下,zabbix-server-mysql这个包提供了什么:

    [root@server ~]# rpm -ql zabbix-server-mysql
    /etc/logrotate.d/zabbix-server
    /etc/zabbix/zabbix_server.conf
    /usr/lib/systemd/system/zabbix-server.service
    /usr/lib/tmpfiles.d/zabbix-server.conf
    /usr/lib/zabbix/alertscripts
    /usr/lib/zabbix/externalscripts
    /usr/sbin/zabbix_server_mysql
    /usr/share/doc/zabbix-server-mysql-3.2.6
    /usr/share/doc/zabbix-server-mysql-3.2.6/AUTHORS
    /usr/share/doc/zabbix-server-mysql-3.2.6/COPYING
    /usr/share/doc/zabbix-server-mysql-3.2.6/ChangeLog
    /usr/share/doc/zabbix-server-mysql-3.2.6/NEWS
    /usr/share/doc/zabbix-server-mysql-3.2.6/README
    /usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz		#生成表的各种脚本
    /usr/share/man/man8/zabbix_server.8.gz
    /var/log/zabbix
    /var/run/zabbix
    

      我们来使用这个文件生成我们所需要的表:

    [root@server ~]# gzip -d create.sql.gz
    [root@server ~]# head  create.sql 			#查看一下表头
    CREATE TABLE `users` (
    	`userid`                 bigint unsigned                           NOT NULL,
    	`alias`                  varchar(100)    DEFAULT ''                NOT NULL,
    	`name`                   varchar(100)    DEFAULT ''                NOT NULL,
    	`surname`                varchar(100)    DEFAULT ''                NOT NULL,
    	`passwd`                 char(32)        DEFAULT ''                NOT NULL,
    	`url`                    varchar(255)    DEFAULT ''                NOT NULL,
    	`autologin`              integer         DEFAULT '0'               NOT NULL,
    	`autologout`             integer         DEFAULT '900'             NOT NULL,
    	`lang`                   varchar(5)      DEFAULT 'en_GB'           NOT NULL,
    

      我们查看表头发现没有创建数据库的命令,这也正是我们刚刚手动创建数据库的原因。
      然后,我们直接把这个表导入至我们的数据库即可:

    [root@server ~]# mysql -uzbxuser -h192.168.37.111 -p zabbix < create.sql 
    Enter password:
    

      导入以后,我们进去数据库查看一下:

    [root@server ~]# mysql -uzbxuser -h192.168.37.111 -p
    Enter password:
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | test               |
    | zabbix             |
    +--------------------+
    MariaDB [(none)]> use zabbix;
    Database changed
    MariaDB [zabbix]> show tables;
    +----------------------------+
    | Tables_in_zabbix           |
    +----------------------------+
    | acknowledges               |
    | actions                    |
    | alerts                     |
    ……
    | usrgrp                     |
    | valuemaps                  |
    +----------------------------+
    127 rows in set (0.00 sec)
    

      可以看出来,我们的数据已经导入成功了。
      

    3、配置 server 端

      我们的数据库准备好了以后,我们要去修改server端的配置文件。

    [root@server ~]# cd /etc/zabbix/
    [root@server zabbix]# ls
    web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
    #为了方便我们以后恢复,我们把配置文件备份一下
    [root@server zabbix]# cp zabbix_server.conf{,.bak}
    [root@server zabbix]# vim zabbix_server.conf
    ListenPort=10051			#默认监听端口
    SourceIP=192.168.37.111		#发采样数据请求的IP
    

      为什么要设置SourceIP,由于我们的客户端可能一个主机多个IP,我们又不能允许任意的IP都能从我们这里读取数据,就会有一个验证方式,而该方式是基于识别SourceIP来实现的。

      日志,默认用文件记录,也可以发送给我们的rsyslog日志记录系统,如果我们选择默认,则日志存放在LogFile=/var/log/zabbix/zabbix_server.log中,也可以自己设置。

      日志的滚动。默认值为1,表示滚动。我们设为0则表示不滚动。当数据特别多的时候,我们也可以设置成为1,然后在Maximum size of log file in MB设置当数据文件最大到多少时会自动滚动。

      日志的级别。一共有6个级别。我们可以根据自己的需要来设置级别。其中0表示输出最少的信息,5表示输出最详细的信息,默认值为3,设置为3的话就表示,0、1、2、3四个级别都显示。考虑到生产系统中的压力时,这里的信息,如果没有必要的话,越简单越好,只要在出错的时候,我们可以依据其进行排错即可。

    	DBHost=192.168.37.111		#数据库对外的主机
    	DBName=zabbix				#数据库名称
    	DBUser=zbxuser				#数据库用户
    	DBPassword=keer				#数据库密码
    	DBPort=3306					#数据库启动端口
    

      数据库相关的设置。

    补充:我们可以使用grep -i "^####" zabbix_server.conf来查看配置文件中有哪些大段,也可以使用grep -i "^###" zabbix_server.conf来查看配置文件中每一段中的配置项有哪些

      以上,我们的基本配置已经完成,可以开启服务了:

    [root@server zabbix]# systemctl start zabbix-server.service
    

      开启服务以后,我们一定要去确认一下我们的端口有没有开启:

    [root@server zabbix]# ss -nutl |grep 10051
    tcp    LISTEN     0      128       *:10051                 *:*                  
    tcp    LISTEN     0      128      :::10051                :::*    
    

      如果查到的端口没有开启,我们就要去检查一下配置文件有没有出问题了。
      至此,我们server端的进程启动已经ok了,接下来就可以使用web GUI来打开接口进行设定了
      

    4、配置 web GUI

      我们先来查看一下,我们web GUI的配置文件在哪里:

    [root@server ~]# rpm -ql zabbix-web | less
    /etc/httpd/conf.d/zabbix.conf
    /etc/zabbix/web
    /etc/zabbix/web/maintenance.inc.php
    /etc/zabbix/web/zabbix.conf.php
    /usr/share/doc/zabbix-web-3.2.6
    /usr/share/doc/zabbix-web-3.2.6/AUTHORS
    /usr/share/doc/zabbix-web-3.2.6/COPYING
    /usr/share/doc/zabbix-web-3.2.6/ChangeLog
    /usr/share/doc/zabbix-web-3.2.6/NEWS
    /usr/share/doc/zabbix-web-3.2.6/README
    ……
    

      可以看出,有一个/etc/httpd/conf.d/zabbix.conf文件,这个配置文件就是帮我们做映射的文件,我们可以去看一看这个文件:

    Alias /zabbix /usr/share/zabbix		#我们访问的时候要在主机后加上/zabbix来访问我们这个服务
    


      时区是一定要设置的,这里被注释掉是因为,我们也可以在php的配置文件中设置时区,如果我们在php配置文件中设置时区,则对所有的php服务均有效,如果我们在zabbix.conf中设置时区,则仅对zabbix服务有效。所以,我们去php配置文件中设置我们的时区:

    vim /etc/php.ini
    	[Date]
    	; Defines the default timezone used by the date functions
    	; http://php.net/date.timezone
    	date.timezone = Asia/Shanghai
    

      接下来,我们就可以启动我们的httpd服务了:

      我们的服务已经开启,接着我们就可以用浏览器来访问了。

    5、浏览器访问并进行初始化设置

      我们使用浏览器访问192.168.37.111/zabbix,第一次访问时需要进行一些初始化的设置,我们按照提示操作即可:






      点击Finish以后,我们就会跳转到登录页面,使用我们的账号密码登录即可:

      默认用户名为:admin ,密码为:zabbix 。
      登陆进来就可以看到我们的仪表盘了:

    6、配置 agent 端

      当我们把监控端配置启动以后,我们需要来设置一下我们的监控端,我们在被监控的主机安装好agent,设置好他的server,并把他添加到server端,就能将其纳入我们的监控系统中去了。

    1)安装zabbix

      同样的,我们先来安装zabbix。下载包,注释epel源,安装所需的包。具体步骤如下:

    [root@node1 ~]# wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
    [root@node1 ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm 
    [root@node1 ~]# vim /etc/yum.repos.d/centos7.repo 
    [base]
    name=base
    baseurl=http://172.17.0.1/centos/7/
    gpgcheck=0
    
    #[epel]
    #name=epel
    #baseurl=http://172.17.0.1/fedora-epel/7/x86_64/
    #gpgcheck=0
    [root@node1 ~]# yum install zabbix-agent zabbix-sender -y
    

      安装完成以后,我们去修改配置文件。

    2)修改配置文件

      一样的,我们先查一下包内有什么:

    [root@node1 zabbix]# rpm -ql zabbix-agent 
    /etc/logrotate.d/zabbix-agent
    /etc/zabbix/zabbix_agentd.conf
    /etc/zabbix/zabbix_agentd.d
    /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
    /usr/lib/systemd/system/zabbix-agent.service
    /usr/lib/tmpfiles.d/zabbix-agent.conf
    /usr/sbin/zabbix_agentd
    /usr/share/doc/zabbix-agent-3.4.4
    /usr/share/doc/zabbix-agent-3.4.4/AUTHORS
    /usr/share/doc/zabbix-agent-3.4.4/COPYING
    /usr/share/doc/zabbix-agent-3.4.4/ChangeLog
    /usr/share/doc/zabbix-agent-3.4.4/NEWS
    /usr/share/doc/zabbix-agent-3.4.4/README
    /usr/share/man/man8/zabbix_agentd.8.gz
    /var/log/zabbix
    /var/run/zabbix
    

      对配置文件做一个备份,然后去修改配置文件:

    [root@node1 ~]# cd /etc/zabbix/
    [root@node1 ~]# cd /etc/zabbix/
    [root@node1 zabbix]# ls
    zabbix_agentd.conf  zabbix_agentd.d
    [root@node1 zabbix]# cp zabbix_agentd.conf{,.bak}
    [root@node1 zabbix]# vim zabbix_agentd.conf
    




      重点需要修改的仍然是GENERAL PARAMETERS段:

      是否允许别人执行远程操作命令,默认是禁用的,打开的话会有安全风险。

    Server=192.168.37.111		#指明服务器是谁的
    ListenPort=10050			#自己监听的端口
    ListenIP=0.0.0.0			#自己监听的地址,0.0.0.0表示本机所有地址
    StartAgents=3				#优化时使用的
    
    ServerActive=192.168.37.111	#主动监控时的服务器
    Hostname=node1.keer.com		#自己能被server端识别的名称
    

      修改完成之后,我们保存退出。然后就可以启动服务了:

    [root@node1 zabbix]# systemctl start zabbix-agent.service
    

      照例查看端口是否已开启

    [root@node1 zabbix]# ss -ntul |grep 10050
    tcp    LISTEN     0      128       *:10050                 *:*  
    

      已经开启成功。接着,我们就可以去server端添加了。
      node2也进行同样的操作,唯一不同的就是配置文件中的Hostname要设为node2.keer.com
      

    7、监控过程详解

    1)修改密码及中文版

      作为一只英语不好的程序媛,小编在这里悄悄改成了中文版0.0如果大家英语好的话看英文版即可,英语不好就像小编一样改了吧,毕竟中文版比较适合初学者更快的学习~

      按如上操作即可,选择中文以后,点击下面的update即可更新成功,更新过后是这样婶儿的~

      同样的,为了安全起见,我们把密码改掉:


      修改完成后同样点击更新即可。

    2)创建主机及主机群组

      我们先来定义一个主机群组:


      然后我们就可以去添加主机了:


      当然,上面有很多选择卡,有一个加密:

      设置完成后,点击添加。我们就可以看到,我们添加的这个主机已经出现在列表中了:

      同样的,我们把node2节点也添加进来:

    3)监控项(items)

    ① 介绍

      我们点击上图中node1的监控项,即可创建我们的监控项,首先,我们创建三个应用集:

      然后我们来定义监控项:

      任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key

      关于key值,我们可以直接在网页上设置(服务器自动执行),也可以使用命令行命令(手动执行)来获取:

    [root@server ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "system.cpu.intr"
      在我们的agent端,也可以使用命令来查看intr的速率变化:

      我们继续来看我们的监控项:

      说了这么多,我们来简单定义一个:

    ② 定义一个不带参数的监控项



      设置完以后,点击更新,即可加入,并会自动跳转至下图页面:

      定义完成,我们回到所有主机,等待5秒,我们可以看到,我们node1节点后面的选项已经有变成绿色的了:

      我们也可以回到我们的仪表盘,可以看到,我们的监控项有一个处于启用状态:

      那么,我们的数据在哪里呢?可以点击最新数据,把我们的node1节点添加至主机,应用一下,就可以看到下面的状态了:

      可以看到,我们还有一个图形页面,点进去则可以看图形的分布:

      事实上,我们关注的指标有很多种,我们一一添加进来即可。
      刚刚我们定义的监控项是很简单的,指定一个key即可,但是有些监控项是带有参数的,这样一来,我们的监控项就有更多的灵活性。接下来,我们来简单说明一个需要带参数的监控项:

    ③ 定义一个带参数的监控项


      图中的[]就是需要参数的意思,里面的值即为参数,带<>为不可省略的。我们就以这个例子来说明:
      if表示是接口名;<mode>表示是那种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)、overuns等等(上述内容通过ifconfig查看)
      我们来设置一下这个监控值:


      同样的,我们也可以通过命令行来查看:

    [root@server ~]# zabbix_get -s 192.168.37.122 -p 10050 -k "net.if.in[ens33,packets]"
    

      我们来看看网页的显示情况:检测中 ---> 最新数据 ---> Network Interface Stats(图形)

    ④ 快速定义类似指标

      如果我们想要定义一个类似的指标,我们可以直接选择克隆,然后简单的修改一点点参数即可。
      就以我们刚刚定义的net.if.in[ens33,packets]为例,如果我们想要在定义一个out的进行如下操作即可:


      如果我们要以字节为单位也要定义的话,进行同样的操作:


      如果有需要的话也可以把byte再克隆成out。就不一一演示了~
      可以看一下,我们现在已经定义的指标:

      我们来到 检测中 ---> 最新数据,可以看到,我们定义的监控项都已经有值了:

    ⑤ 删除监控项

      如果有一个监控项,我们用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除,具体操作步骤如下:

    ⑥ 监控项存储的值

      对于监控项存储的值,老一点的版本只有以下三种方式:

    • As is:不对数据做任何处理(存储的为原始值)
    • Delta:(simple change)(变化),本次采样减去前一次采样的值的结果
    • Delta:(speed per second)(速率),本次采样减去前一次采样的值,再除以经过的时长;
        而在3.4版本以后有了更多的表现形式:

    4)触发器(trigger)

    ① 简介

      当我们的采集的值定义完了以后,就可以来定义触发器了。
      我们触发器的定义是:界定某特定的item采集到的数据的非合理区间非合理状态。通常为逻辑表达式。
      逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下:
      OK(不符合条件):正常状态 --> 较老的zabbix版本,其为FALSE;
      PROBLEM(符合条件):非正常状态 --> 较老的zabbix版本,其为TRUE;
      一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:

    1. 最近N分钟所得结果的平均值
    2. 最近N次所得结果的平均值

     而且,我们的触发器存在可调用的函数:

    nodata()    #是否采集到数据,采集不到则为异常
    last()      #最近几次的平均值
    date()
    time()
    now()
    dayofmonth()
    ...

      注:能用数值保存的就不要使用字符串

    ② 触发器表达式

      基本的触发器表达式格式如下所示

    {<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)将返回一周之前的最大值;
        表达式所支持的运算符及其功能如下图所示:
    ③ 定义一个触发器

      我们可以查看一下rate of packets(in)的值,并以其为标准确定我们的非正常的值:

      图中我们可以看出,我们的最大值为74,最小值为4,平均值为24。这样的话,我们可以定义50以上的都是非正常的值。
      下面我们来定义一个触发器:
      进入:配置 ---> 主机 ---> node1 ---> 触发器 ---> 创建触发器

      我们的表达式可以直接点击右侧的添加,然后定义自己所需的内容,即可自动生成:

      生成完毕后,我们就点击页面下方的添加,即成功定义了一个触发器,同时页面自动跳转:

      然后我们去看一下我们刚刚定义了触发器的那个监控项:

      我们可以看出,这个里面就有了一根线,就是我们刚刚定义的值,超过线的即为异常状态,看起来非常直观。
      但是,现在即使超过了这根线,也仅仅会产生一个触发器事件而不会做其他任何事。因此,我们就需要去定义一个动作(action)。

    ④ 触发器的依赖关系

      我们的触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。
      我们可以来试想一下这样的场景:
      我们的多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,我们的所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只它自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。
      注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。
      我们来简单举一个例子,示范一下如何定义一个依赖关系:
      打开任意一个触发器,上面就有依赖关系,我们进行定义即可:


      由于当前我们只定义了一个触发器,就不演示了,过程就是这样~添加以后点击更新即可。
      触发器可以有多级依赖关系,比如我们看下面的例子:

    5)定义动作(action)

    ① 简介

      我们需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报
      我们有一个告警升级的机制,所以,当发现问题的时候,我们一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的zabbix用户,所以当有人需要收到警报操作的话,我们则需要把它加入我们的定义之中。
      其次,每一个用户也应该有一个接收告警信息的方式,即媒介,就像我们接收短信是需要有手机号的一样。
      我们的每一个监控主机,能够传播告警信息的媒介有很多种,就算我们的每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。
      综上,为了能够发告警信息,第一,我们要事先定义一个媒介,第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)。
      我们可以去看一下系统内建的媒介类型:

      这只是大的媒介类型,里面还有更多的细分,我们以Email为例:

      同样的,同一个类型我们也可以定义多个,还是以Email为例,我们可以定义一个腾讯的服务器,一个网易的服务器,一个阿里的服务器等等。

    ② 定义一个媒介(media)

      我们还是以Email为例。来简单的定义一个媒介:


      这样定义以后,我们去更新一下就可以了。
      媒介定义好了,那么我们怎么才能够然后用户接收到邮件呢?比如让我们的Admin用户接收邮件,我们应该怎么操作呢?具体步骤如下:
      进入 管理 ---> 用户 ---> Admin ---> 报警媒介
      我们来添加一条进来:

      添加过后是这样的:

      然后我们更新就可以了。
      一个用户可以添加多个接收的媒介类型。

    ③ 定义一个动作(action)

      我们之前说过了,动作是在某些特定条件下触发的,比如,某个触发器被触发了,就会触发我们的动作。
      现在,我么基于redis来定义一个动作。
      首先,我们在agent端使用yum安装一下redis

    [root@node1 ~]# yum install redis -y
    

      修改一下配置文件:

    [root@node1 ~]# vim /etc/redis.conf 
    bind 0.0.0.0		#不做任何认证操作
    

      修改完成以后,我们启动服务,并检查端口:

    [root@node1 ~]# systemctl start redis
    [root@node1 ~]# ss -nutlp | grep redis
    tcp    LISTEN     0      128       *:6379                  *:*                   users:(("redis-server",pid=5250,fd=4))
    

      接着,我们就可以去网站上来定义相关的操作了:

    1.定义监控项

      进入 配置 ---> 主机 ---> node1 ---> 监控项(items)---> 创建监控项

      填写完毕以后,我们点击下方的添加。

      该监控项已成功添加。
      我们可以去查看一下他的值:
      检测中 ---> 最新数据

    2.定义触发器

      定义好了监控项以后,我们亦可来定义一个触发器,当服务有问题的时候,我们才能及时知道:
      进入 配置 ---> 主机 ---> node1 ---> 触发器(trigger)---> 创建触发器

      填写完毕以后,我们点击下方的添加。

      该触发器已成功添加。
      我们去查看一下:
      监测中 ---> 最新数据

      我们来手动关闭redis服务来检测一下:

    [root@node1 ~]# systemctl stop redis.service
    

      进入 监测中 ---> 问题

      可以看到,现在已经显示的是问题了。并且有持续的时间,当我们的服务被打开,会转为已解决状态:

    [root@node1 ~]# systemctl start redis.service 
    

    3.定义动作(action)

      现在我们就可以去定义action了。
      进入 配置 ---> 动作 ---> 创建动作(注意选择事件源为触发器)


      我们可以进行操作添加:

      我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:

    [root@node1 ~]# visudo			#相当于“vim /etc/sudoers”
    	## Allow root to run any commands anywhere
    	root    ALL=(ALL)   ALL
    	zabbix    ALL=(ALL)   NOPASSWD: ALL		#添加的一行,表示不需要输入密码
    
    [root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
    	EnableRemoteCommands=1			#允许接收远程命令
    	LogRemoteCommands=1				#把接收的远程命令记入日志
    
    [root@node1 ~]# systemctl restart zabbix-agent.service
    

      我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:

      添加完成以后,我们可以看一下:

      操作添加完了,如果服务自动恢复了,我们可以发送消息来提示:

      至此,我们的动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:

      现在我们可以手动停止服务来进行测试:

    [root@node1 ~]# systemctl stop redis.service 
    

      然后我们来到问题页面来查看,发现确实有问题,并且已经解决:

      我们可以去server端查看是否收到邮件:

      也可以去agent端查看端口是否开启:

    [root@node1 ~]# systemctl stop redis.service 
    [root@node1 ~]# ss -ntl
    State       Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    LISTEN      0      128        *:6379                   *:*                  
    LISTEN      0      128        *:111                    *:*                  
    LISTEN      0      5      192.168.122.1:53                     *:*                  
    LISTEN      0      128        *:22                     *:*                  
    LISTEN      0      128    127.0.0.1:631                    *:*                  
    LISTEN      0      128        *:23000                  *:*                  
    LISTEN      0      100    127.0.0.1:25                     *:*                  
    LISTEN      0      128        *:10050                  *:*                  
    LISTEN      0      128       :::111                   :::*                  
    LISTEN      0      128       :::22                    :::*                  
    LISTEN      0      128      ::1:631                   :::*                  
    LISTEN      0      100      ::1:25                    :::* 
    

      可以看出端口正常开启,我们的动作触发已经完成。

    补充:我们也可以使用脚本来发送警报,我们的脚本存放路径在配置文件中可以找到,定义为:AlterScriptsPath=/usr/lib/zabbix/alertscripts

      接下来,我们来一波彻底一点的操作,我们来手动修改一下redis服务的监听端口,这样,我们就不能通过重启服务恢复了:

    [root@node1 ~]# vim /etc/redis.conf
    	#port 6379
    	port 6380				#注释掉原来的端口,更换为新的端口
    
    [root@node1 ~]# systemctl restart redis
    

      然后,我们来网页查看一下状态:
      进入 监测中 ---> 问题,可以看到是报错的:

      这样,在经过了重启服务以后还是没能把解决问题,就会发邮件告警:

      我们再把服务端口改回来,然后重启服务。这样,等到问题自动解决了以后,我们会再次收到邮件:


      这样,我们的动作设定已经全部测试完成。
      

    6)zabbix可视化

    ① 简介

      数据日积月累,如果我们想要更直观的了解到各项数据的情况,图形无疑是我们的最佳选择。
      zabbix提示了众多的可视化工具提供直观展示,如graph、screen及map等。上文中我们也看到过一些简单的图形展示。
      如果我们想要把多个相关的数据定义在同一张图上去查看,就需要去自定义图形了~

    ② 自定义图形(Graphs)

      自定义图形中可以集中展示多个时间序列的数据流。支持“线状图(normal)”、“堆叠面积图(stacked)”、“饼图(pie)” 和“分离型饼图(exploded)”四种不同形式的图形。
      具体的设置过程如下:
      进入 配置 ---> 主机 ---> node1 ---> 图形,选择右上角创建图形:

      我们来看一看四种状态:




      包括我们的主机都可以自定义,不过一般来说,线型是看的最清晰的,我们通常会使用这个。
      我们也可以克隆一个packets来更改为bytes用~同样的,我们如果想添加别的内容,也都可以添加的。
      我们一共添加了三个图形,我们可以在 监测中 ---> 图形 来查看

    ③ 聚合图形(Screens)

      我们创建的自定义图形也可以放在一个聚合图里显示,具体的设置方法如下:
      进入 监测中 ---> 聚合图形 ---> 选择右上角创建聚合图形

      我们还可以选择分享:

      定义好了添加即可。
      定义完成以后,我们需要编辑一下,来指定保存哪些图:



      依次添加即可,添加完成之后是这样婶儿的~:

      因为我们只有三张图,所以添加的有重复的,通常情况下是不需要这样的。

    ④ 幻灯片演示(Slide shows)

      如果我们有多个聚合图形想要按顺序展示的话,我们就可以定义一个幻灯片。
      具体步骤如下:
      进入 监测中 ---> 聚合图形 ---> 右上角选择幻灯片演示 ---> 创建幻灯片


      然后我们打开即可。打开以后显示的是图片1,5s以后会自动切换为图片2。
      这样就可以实现幻灯片演示,我们就不需要去手动切换了。

    ⑤ 定义拓扑图(Maps)

      在拓扑图中,我们可以定义成一个复杂的网络连接图,我们可以使用一台主机来连接另一台主机,这样的话,我们就可以查看出到底是哪个链接出了问题。
      我们就不来演示了,看一下过程即可:
      进入 监测中 ---> 拓扑图 ---> 所有地图 ---> Local network(默认就有的)

      通过 Ping 和 Traceroute 就可以实验我们上述的功能。

    7)模板

    ① 创建模板

      之前我们说过,每一个主机的监控项都很多,我们一个一个的添加实在是太头疼了,更何况,可能不止一个主机。
      但是我们可以把一个redis的监控项添加进一个模板里,这样更方便于我们以后的添加。
      具体操作如下:
      进入 配置 ---> 模板 ---> 选择右上角创建模板

      填写完以后,我们点击下方的添加即可。
      我们可以基于组过滤一下,就能看到我们刚刚定义的模板:

      一样的,我们可以向里面添加应用集、监控项、触发器、图形等等,添加完成以后,后期我们再有主机需要添加就直接套用模板即可。
      需要注意的一点是,我们现在添加的是模板,所以不会立即采用数据,只有链接到主机上以后,才会真正生效。

    ② 模板的导入与导出

      我们也可以直接导入一个模板,在互联网上可以找到很多,导入的步骤如下:


      同样的,我们创建好的模板也可以导出为文件:
      我们任意选中一个准备好的模板,然后页面的最下方就有导出按钮:


      因此,我们就可以非常方便的进行应用了~

    ③ 模板的应用

      我们的软件已经创建了许多模板,我们可以使用一个模板来看看效果。
      进入 配置 ---> 主机 ---> node1 ---> 模板
      我们就可以选择要添加的模板了:


      到这里我们就可以点击更新了。一旦我们成功链接至模板,我们的主机数据就会更新了:

      注意:1、一个主机可以链接多个模板,但尽量不要让一个指标被采样两次。
      2、如果我们有多个主机,同时这些主机也在一个主机组里,这样的话,我们只需要在这个主机组里添加模板,就能够让在主机组里的所有主机进行tongb

    ④ 移除模板链接

      当我们一个主机的模板不想要用了,我们就可以移除模板链接,具体操作步骤如下:
      进入 配置 ---> 主机 ---> node1 ---> 模板
      我们就可以把不需要的模板移除:

      我们来删除掉试试看,移除并清理以后,我们点击更新。就会自动跳转至如下界面:

      可以看出,我们的模板已经被移除了。

    8)宏(macro)

    ① 简介

      宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。
      类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本。
      zabbix有许多内置的宏,如{HOST.NAME}、{HOST.IP}、{TRIGGER.DESCRIPTION}、{TRIGGER.NAME}、{TRIGGER.EVENTS.ACK}等。
      详细信息请参考官方文档
      

    ② 级别

      宏一共有三种级别,分别是全局宏模板宏主机宏
      不同级别的宏的适用范围也不一样。

    全局宏也可以作用于所有的模板宏和主机宏,优先级最低。
    模板宏则可以作用于所有使用该模板的主机,优先级排在中间。
    主机宏则只对单个主机有效,优先级最高。

    ③ 类型

      宏的类型分为系统内建的宏用户自定义的宏
      为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro)。
      系统内建的宏在使用的时候需要{MACRO}的语法格式,用户自定义宏要使用{$MACRO}这种特殊的语法格式。
      宏可以应用在item keys和descriptions、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制的SNMP协议的相关信息中……
      宏的名称只能使用大写字母、数字及下划线
      进一步信息请参考官方文档

    ④ 定义一个宏

      如果我们想要在我们的监控项(items)上使用宏,我们就要先去定义一个宏,然后去创建监控项,直接引用定义好的宏即可。具体操作步骤如下:

    1.定义全局宏

      进入 管理 ---> 一般 ---> 右上角选择宏


      这样,我们的全局宏就添加好了。

    2.定义监控项,调用宏

      进入 配置 ---> 主机 ---> 所有主机 ---> 监控项 ---> 右上角创建监控项

      填写完成以后,点击添加。然后我们就可以看到这个调用宏的监控项已经添加成功:

      我们可以来查看一下这个监控项现在的状态:
      进入 监测中 ---> 最新数据

      如果我们把服务停掉。就会变成down的状态:

    [root@node1 ~]# systemctl stop redis
    


      发现我们的监控项是可以正常使用的。

    3.修改宏

      如果我们把node1节点上的redis服务监听端口手动改掉的话,我们刚刚定义的监控项就不能正常使用了,这样的话,我们就需要去修改宏。
      但是,这毕竟只是个例,所以我们不需要去修改全局宏,只用修改模板宏或者主机宏就可以了。
      下面分别说一下,模板宏和主机宏的不同修改操作:
    模板宏
      模板宏的修改,我们需要进入:配置 ---> 模板 ---> redis stats(相应的模板) ---> 宏

      在这里点击添加就可以了。
    主机宏
      主机宏的修改,我们需要进入:配置 ---> 主机 ---> 所有主机 ---> node1 ---> 宏

      在这里点击添加就可以了。


    以上,监控的基本知识已经介绍完毕。预知后事如何,请听下回分解~

    由于部分图片过大可能不能显示完全,但是可以在浏览器新窗口打开喏~打开了的话就是完整的图了φ(>ω<*)

  • 相关阅读:
    C#托盘图标
    线程相关整理
    Quartz.NET 快速入门
    (转)IE内存泄露,iframe内存泄露造成的原因和解决方案
    美化console.log的文本(转载)
    mongoDB学习资料整理
    EF7学习资料整理
    Oracle常用
    Node.js学习资料整理
    【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器(转)
  • 原文地址:https://www.cnblogs.com/keerya/p/7953695.html
Copyright © 2011-2022 走看看