抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

[toc]

zabbix 高级用法

zabbix 报警媒介

# 对于邮件报警接口,CentOS默认邮件服务就是启动的,但是,只能服务本地到本地发邮件;  
# 如果需要往互联网上发邮件,需要把服务器配置成邮件服务器;
# 但一般来讲,自建邮件系统,付出的成本和技术都较高,因此,我们可以考虑网联上的邮件服务;
# 而对于报警的内容,一般是我们在zabbix服务端配置的宏所定义的内容;
# 没有item的配置,那么将意味着没有监控数据; 

Zabbix术语与操作注意项

Item Key 
    命名求: 只能使用字母、数字、下划线、点号、连接符;
    接受参数: system.cpu.load[<cpu>,<mode>], net.if.inbound[if,<mode>]
    注意: 每一个key背后都应该有一个命令或者脚本来负责实现数据收集;命令或者脚本可以调用传递给key的参数,调用方式为$1,$2,...
    在zabbix中定义item时调用某key,还需要额外定义数据采集频率(每30秒采集一次)、历史数据的保存时长等;
Trigger:
    触发器表达式: {<Server>:<key>.<function>(<parameter>)}<operator><constant>
    例: {api.transfereasy.com:net.tcp.listen[9991].last()}#1
    <function>: 评估采集到的数据是否在合理范围内时所使用的函数,共评估过程可以根据采集到的数据、当前时间或其它因素;
        avg:平均值;
        count:指定时间内的统计;
        change:返回最近返回的值,与之前一次的差值;
        date:当天的值;
        dayofweek:返回本周的第几天的值;
        dayofmonth:返回本月的第几天的值;
        delta:指定时间范围内最大值与最小值之差;
        diff:当文件不一样时;
        iregexp:忽略大小写它符的正则表达式;
        last:最近一次采样;
        max:最近采样的最大值;
        min:最近采样的最小值;
        nodata: 表示没有数据;
        sum:最后一次采样数据之和;
        regexp:检查最后一次采样的值是否能够被指定的模式所匹配: 1、表示匹配, 0表示不匹配;
        now:返回自Unix元年至此刻经历的秒数;
        prev:倒数第二个采样值:
        str:从最后一次的采样中查找到此处指定的子串:
        strlen: 做字符串的长度比较;
        prev:倒数第二个采样值
    <operator>:
            >, <, =, #(表示不等于)事实上我们可以让表达式的值直接来做算术运算的;
            / ,* ,- ,+
            &(与),|(或)
    触发器之间的关系        

Action:
    message:
    condition:
        一般由event触发:
            trigger
            discover:
                Service Up ,Srvice Down ,Host up ,Host down, Service Discovered,Service Lost,Host Discovered, Host Lost
            auto-registration

    operation:
        send message
            Medis Type
                Email (常用),SMS ,Jabber, Scripts(常用), EZ Texting
            Usser
        remote command(远程命令)
            运行zabbix进程的用户是zabix用户
            所以这里要注意,zabbix未必有权限执行
            (1) 给zabbix 定义sudo规则:    
                zabbix ALL=(ALL) ALL
            (2) 不支持active模式的agent:
            (3) 不支持代理模式:
            (4) 命令长度不得超过255个字符:
            (5) 可以使用宏:
            (6) zabbix-server仅执行命令,而不关命令是否执行成功:

            前提: zabbix-agent要配置为支持执行远程命令:
                EanbleRemoteCommands =1  
                LogRemoteCammands =1  # 启用执行远程命令后记录
            # vim /etc/sudoers  或者  visudo 
                zabbix ALL=(ALL)  NOPASSWD:ALL
                注: 以上服务器权限的是操作是非常用风限性的; 
            Actions --> Operations --> New 
                --> Operation type Remote Command:
                --> Host  挑远出远程主机
                --> Global script -->在方框中加入远程命令 
            Hosts --> Applications --> Create Applications --> Http
            Hosts --> Items --> Create Items
            --> Name http server 
            --> Type zabbix aggent 
            --> Key net.tcp.listen[80]
            --> Applications http service
            Add Items <--

            Host --> Triger --> Create Triger
            --> Name http service is on
                Expresion --> add 
                    -->Item node2: http service 
                    --> Function: Previous value is =1 
                    --> Last of(T) 1
                    --> N 0
                    --> 严重级别先Hight 
            Configuration --> Actions --> Create Action -->
                Action Name http service
                Conditions --> New condition Trigger == node1: httpd serivce is value
                Operations --> 定义报警升级 --> 可以定义由第一步到第几步执行什么样的操作       
                注意:
                    (1) 如果用到以某它用户身份运行其它命令的话,要加 sudo 来运行;
                        sudo systemctl restart httpd
                    (2) 在各gent上的sudoers 文件中,要注释如下行,否则命令依旧无法正常运行;
                        # Default requiretty 
        Script: Alert Script 

            放置于特定目录中: AlertScriptsPath=/usr/lib/zabbix/alertscripts
                zabbix_server.conf配置文件中的参数:
                脚本中使用$1,$2,$3来调用Action先项卡中的收件人地址, Default Subject , Default Massage:
                # vim alert_message.sh
                #!/bin/bash
                to=$1
                subject="$2"
                body="$3"
                echo "$body" | mail -s "$subject" "$to"
                # chmod +x alert_message.sh 
                当然这里是一个最简单的实现脚本,这里也可以使用python,bash,ruby,perl 等脚本
                注意: 新放入此目录中的脚本,只有重启zabbix 方能被实别;

                Administration --> Mdedia types --> 
                            --> Name AlterScript
                            --> Type Script 
                            --> Script name alert_message.sh 
                Administration --> Users --->
                            --> Media --> add 
                            --> AlterScripts root@localhost
                这样的话,通过两种方式都能收到邮件
Escalation 
Template
Web Scennario

Zabbix服务器进程

housekeeper 用来清理过期数据的;
alter 专门用来发送警告的进程;
discoverer 实现主机发现的; 
httppoller 对web服务器进行监控时;
Poller 主动去被监控节点去拉取数据;
Pinger 基于ping命令来探测主机是否在线;
db_config_syncer 服务器配置同步的; 
timer 计时器;
escaltor  报警升级器;

zabbix 可视化

自定义图形属性

Name: 图形的独有名称;
Width: 图形的宽度,单位为像素;仅适用于"预览(perview)" 模式、饼图或分离型饼图; 
Height: 图形的类型, 共有四种,即"线状图normal"、"堆叠面积图"、"饼图(pie)"、 分离型饼图(exploded);
Show legend: 是否显示图例,即图形数据序列说明;
Show working time: 是否高亮显示工作时间区域;选定时,非工作时间区间的背景为灰色;此功能不用于pie和exploded;
Show Triggers: 是否显示触发器;此功能不适用于pie和exploded; 

多图形合并显示

Configuration --> Screen --> Create Screen 
--> Name Test Screen
--> Columns 3 # 列
--> Row 2  # 行
        --> Test Screen 
            --> change 这里就可以看到一个2行3列的表格,然后往里面添加图片; 

多屏翻转

Slide shows
Name 
Default delay(in seconds)

可视化: graph ,screen, slide shows,map

宏(macros)

# 宏其实说白了就是变量,类型通常为文本类型; 
#  为了更强的灵活性,zabbix还支持在全局、模板或主机级别使用用户自定义宏(user macro);
#  用户自定义宏要使用"{$MACRO}"这种特殊的语法格式; 
#  宏可以应用在item keys 和descriptions、 trigger 名称和表达式、主机接口IP/DNS及端口、 discovery机制的SNMP协议的相关信息等;
# 宏的名称只能使用大写字母、数字及下划线;
# 两类:
    内建: {MACRO_NAME}
    自定义:{$MACRO_NAME}

# 可以在三个级别使用:
    Global, Template, Host

# 优先级: Host --> Template --> Global
    在某级别找到后将直接使用: 将不再查找

    全局宏:
        Adminstration --> General --> Macrios(在先项卡中)

    主机宏:
        Configuration --> Hosts --> Macrios 主机级别的宏优先级最高;

    Template:
        Configuration --> Complation --> Macrios

模板(Templats)

一系列配置的集合,此些配置可以通过”链接”的方式应用于指定的主机:
application, item, trigger, graph, scree 及发现规则;

添加例行惯常的维护时间;

Configuration --> maintenance --> Maintenance

User Parameters:

# zabbix 内置了许多item key:
实现用户自定义 item key ,实现特有数据指标监控;
语法:
    UserParameter=<key>,<command>
# vim  /etc/zabbix/zabbix_agentd.d/os.conf
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
UserParameter=os.memory.used, free -m | awk '/^Mem/ {print $3}'
注: 需要重启zabbix-agent 才能使用
# systemctl restart zabbix-agent
这个时候定义的zabbix-agent key就可以使用了,在server web 接口中添加; 
如果找不到key  则直接输入即可 os.memory.used

监控nginx status

nginx status 开启方法:

server {
        ...
        location /status {
            stub_status on;
            access_log off;
            allow 172.16.55.123; # 允许访问的IP
            allow 127.0.0.1;
            deny all;
            }
}
状态页面各项数据的意义;
active connections - 当前Nginx 正处理的活动连接数;
serveraccepts handled requests - 总共处理了 233851个连接,成功创建 233851次握手(证明中间没有失败的)
    总共处了 687942个请求(平均每次扬处理了  2.94 个数据请求)。
    reading -nginx 读取到客户端的Header信息数;
    writing -nginx 返回给客户端的Header 信息数; 
    waiting - 开启 keep-alive 的情况下,这个值等于 active- (reading +wrting) 意思就是Nginx 已经处理完正等候一次请求指令的驻留连接;
UserParameter=Mysql.dml[*], /usr/local/mysql/bin/mysql -h$1 -u$2 -p$3 -e 'SHOW GLOBAL STATUS' | awk '/Com_$4\>/{print $$2}' # 在/etc/init.d/zabbix_agentd.d/xx.conf中定义了以上项后; 
在zabbix-server 终端

zabbix_get -s 172.16.55.124 -p 10050 -k "Mysql.dml[172.16.55.124,root,password,delete]"  #注意mysql用户的授权
zabbix_get -s 172.16.55.124 -p 10050 -k "Mysql.dml[172.16.55.124]"
UserParameter=Nginx.active[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}'
UserParameter=Nginx.reading[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.writing[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.waiting[*], /usr/bin/curl -s "http://$1:$2/status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=Nginx.handled[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=Nginx.requests[*], /usr/bin/curl -s "http://$1:$2/status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

UserParameter=nginx.access_countaccess, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog totalaccess
UserParameter=nginx.access_count200, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 200access
UserParameter=nginx.access_count202, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 202access
UserParameter=nginx.access_count4xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 4xxaccess
UserParameter=nginx.access_count3xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 3xxaccess
UserParameter=nginx.access_count5xx, /usr/lib/zabbix/externalscripts/logcheck_nginx.accesslog 5xxaccess

UserParameter=varnish.stat[*], /usr/lib/zabbix/externalscripts/varnishstatus varnish_stat $1
UserParameter=varnish.count[*], /usr/lib/zabbix/externalscripts/varnishstatus varnish_count $1
UserParameter=varnish.hitrate, /usr/lib/zabbix/externalscripts/varnishstatus varnish_hitrate

zabbix 自动发现功能

zabbix 提供网络发现功能: network discovery
    基于HTTP、 ICMP、 SSH、 LDAP、 TCP、 SNMP、 Telnet、 Zabbix_agent扫描指定网内的主机;
    一旦主机被发现,如何对其进行操作,将由action来决定;
    LLD: low leverl Discovery (底级网络发现功能)
    此二者的功能:
        自动添加主机、链接至模板/移除链接、自动分组、自动添加监控项、定义触发器等、执行远程脚本;
    Discovery中的事件:
        Service Up, Service Down, Host Up, Host Down, Service Discovered, Service Lost, Host Discovererd, Host Lost

    网络发现有两个步骤:
        discovery --> action
    actions:
        Sending notifications
        Adding/removting hosts
        Enabling/disabling hosts
        Adding hosts to a group
        Removing hosts from a group 
        Linking hosts to/unlinking from a template
        Executing remote scripts

        自动发现功能的使用,首先要将server端和agentu端的时间自动同步;
         # vim /etc/zabbix/zabbix_agentd.conf 
         Server = 172.16.55.124
         ServerActive = 172.16.55.124
         Hostname = test.xxxxxx.com
         LogRemoteCommand = 1
         # systectl start zabbix-agent

         Configure --> Discovery --> Create discovery rule 
            --> Name Local Linux Servers 
            --> IP range 172.16.55.125-127
            Delay(in sec)  3600
            --> Checks  Check type ICMP ping(最易于实现的方式) --> Add
            --> Device uniqueness criteria IP address 
            --> Enabled 
            Add <--
        # 当返回到Discovery 时,可以看到服务器已经被自动发现;
         # 创建动作
         Configuration --> Actions --> Discovery(和以往action不同,在选项卡中先择)
         主机发现的条件
            Conditions: New condition Host IP =
                                或者指定网络的发现规则来定义
            Operations:  这里就可以定义对应的操作(添加到组中)
         Configuration --> Templates --> 
            --> Template name Linux Server Memory Stats
            --> Visible anme
            --> Groups In groups test group 
            Add <--
        # 另外需要自己定义好一个模板

        Configuration --> Actions  --> Create Action
        --> Conditions --> Type of calculation And/Or 
        --> Conditions --> Host IP = 172.16.55.125-128
                                    -->Discovery rule = Local Linux Servers
                                    --> Discovery status = Discovered
        --> Operations --> New
                --> Add  To host group  (Test group) # 添加到组中
                --> Link to template  Linux Server Memory status  add 
        ADD <--

        在网络的自动发现中,我们可以使用zabbix-agent来发现 
        在网络的主动发现中,由于是zabbix主动扫描,因此这种模型是非常消耗性能的

在mariadb中查看支持的key

MariaDB> use zabbix;
MariaDB> SELECT key_ FROM items;
使用agent-ping 来做实现主机探测;

auto_registation 主动注册功能

Active Agent Auto-Registration
# 首先主机之间要时间同步; 
# 安装zabbix-agent 端;
# vim /etc/zabbix/zabbix-agent.conf
# ServerActive=172.16.100.6
# Hostname=test.xxxxx.com
# ListenIp=172.16.55.126
# HostMetdata = test4  (只用于自动注册主机的唯一标识)
 # systemctl restart zabbix-agent 
# 添加自动注册的动作
Configuration -->  Actions --> (Event source Autoregistration) --> Create Action
--> Actions: auto registration 
--> Condition: Hostname like node4  (比如主机名中包中包涵node4) --> Add
--> Operations  Add to Host groups --> Link with templates 链接至模板
# 支持使用agent(active)类型的item key:
# 配置过程:
    (1)定义agent端:
        ServerActive=
        Server=
        Hostname=
        ListenIP= 设置为本机某特定IP:
        ListenPort=
        HostMetadata=
        HostMetadataItem= item key, 一般使用system.uname

    (2) 配置action,要求其事件一源为auto-registation 

LLD: low Level Discovery

# 自动发现特定变更的名称
    #IFNAME(接口名称) , #FSNAME(文件系统名称)
# 主要将本地的一些特殊数据发送到服务端,比如接口类的数据;
# 添加针对变理的Items:
# 返回值为JSON 

Configurations -->Templates --> discovery rules --> create discovery rules
--> name if lld
--> Type zabbix agent 
--> Key  net.if.[#IFNAME,bytes]
# 登录 zabbix数据库查询对应的key
# use zabbix;
# SELECT key_ FROM iem WHERE key_ LIKE '%discovery%';

Web 监控

  • Zabbix 还可以进行web 站点的可用性检测;
  • 创建web监控需要定义一个web方案(scenarios);
  • web方案包括一个或多个HTTP请求或”步骤(step)”;
  • 步骤(step)的执行过程按照预先定义的顺序进行执行;
  • 通过web监控可以实时获取以下信息;
# 整个web方案中所有的步骤的平均下载速度;
# 失败的步骤号;
# 失败的报错信息;
  • 在web方案的具体步骤中,可以按需要使用如下信息
# 该步骤的下载速度;
# 回应时间;
# 回应状态码;
  • Zabbix也可以检测获取到HTML页面中是否包含预设的字符串,也可以实现登录和页面点击;
# 首先需要定意一个application
# Configuration --> Hosts --> Web
    --> Scenario Zabbix server
    --> google charme
--> Steps
    --> zabbix home 
    --> http://172.16.55.123/index.html
    --> Require status code 200 

zabbix的监控方式

# zabbix-web 所能够显示的且可指定为监控接口类型的监控方式:
Agent: passive active
SNMP: Simple Network Management Protocol
IPMI:
    智慧平台管理接口(Interlligent-Platform Management Interface)原本是一种Inter架构的企业系统的周边
    设备所采用的一种工业标准;
    IPMI亦是一开放的免费标准,使用者无需支付额外的费即可使用此标准;
JMX: Java Manaement Extensions, 用于通过Java自己的接口对java程序进行监控;
zabbix-java-getway用于获取监控数据:

SNMP 监控方式

# 操作: Get, NetNext, Set , Resonse, Trap
MIB: 是被 管理对象的集合,而且还额外定义了被管理对象的名称、访问权限、数据类型等属性;
MIB视图: MIB的子集;
授权:将MIB视图与Community绑定来实现;
OID: Object ID 1.3.5.1.2.1
    1: system 
    2: interface
    4:ip 
    6: tcp 
    7: udp
# yum -y install net-snmp  net-snmp-libs net-snmp-utils
# vim /etc/snmp/snmpd.conf 
com2sec notConfigUser default public 
group notConfigGroup v1 notConfigUser 
group notConfigGroup v2c notConfigUser 

view  systemview include .1.3.6.1.2.1 
view systemview include .1.3.6.1.2.1.25.1.1

access notConfigGroup "" any noauth exact systemview none none
# service smpd start 
# 确定udp 的161端口已经启用;
# 此时可以使用icmp来收集数据了;

JMX监控方式:

(1) 安装zabbix-java-gateway:
    配置文件: /etc/zabbix/zabbix_java_gateway.conf
    Listen_IP = 
    Listen_PORT = 10052

    zabbix server的配置文件 /etc/zabbix/zabbix_server.conf
        JavaGateWay=
        JavaGateWayPort= 10052

    (2) Java应用程序开户JMX接口:
        java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port =10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremoe.ssl=false

监控Tomcat
        export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port =10053 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremoe.ssl=false"

zabbix 分布式监控概述

# Zabbix能高效地监控分布式IT架构;
# 在大型环境中Zabbix提供两种解决方案;
    1、使用代理(proxy);
    2、使用节点(node);
# 代理(proxy)用于本区域数据收集,并将数据发送给server;
# 节点(node) 提供完整的Zabbix server用以建立分布式监控中的层级;
# Server-Node-Client特性;
    解决host过多时单台Server面临性能瓶颈的问题;
        使用多个instance;
        每个instance是独立的一套zabbix,有database和Frontend(optional);
    支持热插拔,Node和Server的连接可以随时断开,但不影响Node的正常运行;
    Node定时给Server发送configuration, history,event;
    Server定时给Node发送configurations
    所有配置变更只能在Node节点操作,不能再Server操作;
    支持树状结构,Node又可以是多个Server;
# Proxy vs Node
        Node本身是一台server,它有完整的web页面,完整的数据库,它将数据源源不断传送给Master;
        Poxy是只有一个proxy的daemon进程,proxy也有自己的数据库,但它的数据库只会保存一定时间的数据;
        它与Master通信是将一批信息打包后发送到Master, Master将这些数据merge入Mater数据库;
# Master-Proxy 相比Master-Node的优点有以下
        Proxy压力小,数据库只存储一定时间数据;
        Master压力变小,数据不是源源不断获取,减小IO压力;
        架构更清晰,易维护;
# zabbix-proxy 也需要被监控
# yum -y install zabbix-proxy zabbix-proxy-mysql zabbix zabbix-agent
# mysql 
CREATE DATABASE zabbix_proxy CHARACTER SET utf8;
GRANT ALL ON zabbix_proxy.* TO zbxuser@'172.16.%.%' IDENTIFIED BY 'xxxxxx';
FLUSH PREVILEGES; 
# vim /etc/zabbix/zabbix_proxy.conf
Server=172.16.55.123
Hostname=test.xxxx.com
DBHost=172.16.55.123
DBName=zabbix_proxy
DBUser=zbxuser
DBPassword=xxxxxx
ConfigFrequency=600  #多久向服务器端拉取一次数据
# server zabbix-proxy start 
Administration --> Proxies 
Proxy name test.xxxx.com
Proxy mode Active
Hosts Proxy hosts
# 再添加被监控服务器时可以在创建主机时可以指明Monitored by proxy

zabbix database需要用到的空间:

60000/60 = 1000条 
历史数据=天数x每秒钟处理的数据是x24x3600x50Bytes
    90x1000x8600x50Bytes
趋势数据:
    每一个趋势数据128Bytes,
        大小=天数x监控项x24x128Bytes
事件数据:
    每个占据130Bytes
        大小:天数x86400x130

评论