Zabbix(二)

所有实验的zabbix_agent客户端都是web1(192.168.29.142)

模板Template

模板是可以方便地应用于多个主机的一组实体。 实体可以是:

  • 监控项
  • 触发器
  • 图表
  • 仪表盘
  • 低级别自动发现规则
  • web场景

模板通常用于为特定服务或应用程序(如Apache,MySQL,PostgreSQL,Postfix ...)分组实体,然后应用于运行这些服务的主机。

使用模板的另一个好处是当所有主机都需要更改时。只需要在模板上更改某些内容将会将更改应用到所有链接的主机。

链接是将模板应用于主机的过程,而取消链接将从主机中删除与模板的关联。

将模板链接到主机,主机将拥有模板的所有实体(监控项,触发器,图形等),如果在这些模板中具有相同监控项键的监控项,则将多个模板链接到同一主机将失败。并且作为触发器和图形使用的监控项,如果使用相同的监控项键,它们也不能从多个模板链接到单个主机。当从模板添加实体时,主机上先前存在的相同实体被更新为模板的实体,并且任何现有实体的主机级自定义都将丢失。

监控项Items

监控项用来从主机收集具体的数据。

系统内置监控项:https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

实验一

监控/boot的剩余空间

1、配置>主机群组>创建主机群组

2、配置>主机>创建主机   归属Web_Items主机群组

3、配置>模板>创建模板   应用于Web_Items群组

 4、配置>模板>监控项(Web_freespace所在行)>创建监控项   注意键值,单位

5、配置>模板>图形(Web_freespace所在行)>创建图形   最后监控项选boot_part_size绘图

6、配置>主机>Web1>模板选择Web_freespace   关联主机和模板 

7.1、监测>主机   查看主机状态

7.2、监测>最新数据   查看图形

和df -Th结果一致

实验二

监控网卡ens160的每秒进出、总流量;使用聚合图形

新建模板Web_Flow

新建监控项Network_In_Flow

新建监控项Network_Out_Flow

新建监控项Network_All_Flow

监测>仪表板>添加仪表盘>创建仪表盘

 

添加构件页面中类型包含:Item value、图形、图表(经典)、文本...等;以监控项Network_In_Flow为例:

Item value

图形

图表(经典):需要事先为进出、总流量绘图(见实验一),然后引用现有图形

Network_In_Flow现有图形

引用图形 

文本

把它们全显示出来

完成实验二。右上方保存设置,即可在监测>仪表板中切换看到了

实验三

监控sshd服务状态

新建模板Web_Service,新建监控项sshd_status

实验四

监控进程running、sleeping、all数量

新建模板Web_porc,新建监控项proc_running、proc_sleeping、proc_all

自定义Key

在agent的子配置文件夹创建某项配置文件/etc/zabbix/zabbix_agentd.d/xxx.conf。

用户自定义参数配置语法   UserParameter=<key>,<command>

key必须整个系统唯一,大小写敏感。允许的字符:大小写字母、数字、下划线、减号、点

key使用[*] 用于定义该key接受括号内的参数。参数需在配置监控项时给出;参数禁止使用的字符:\ ’ ” ` * ? [ ] { } ~ $ ! & ; ( ) <>

command用来生成key对应的值。在命令中使用位置引用$1 … $9来引用监控项Key中的相应参数

实验一

自定义key,监控mariadb状态,获取用户查询mysql数据次数

#安装mariadb
[root@web1 ~]#yum -y install mariadb-server mariadb
[root@web1 ~]#systemctl enable --now mariadb
[root@web1 ~]#mysqladmin -uroot status 
Uptime: 2761  Threads: 6  Questions: 25  Slow queries: 0  Opens: 18  Flush tables: 1  Open tables: 11  Queries per second avg: 0.009
[root@web1 ~]#mysqladmin -uroot status | cut -d ":" -f 4 | cut -d "S" -f 1 | tr -d ' '
26
[root@web1 ~]#cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=mysql.questions,mysqladmin -uroot status | cut -d ":" -f 4 | cut -d "S" -f 1 | tr -d ' '
[root@web1 ~]#zabbix_agentd -t mysql.questions
mysql.questions                               [t|27]
#重启agent,然后server命令行查询
[root@web1 ~]#systemctl restart zabbix-agent.service


#下面命令是在server上操作
[root@zabbix-server ~]#zabbix_get -s 192.168.29.142 -k mysql.questions
28

mysqladmin -uroot status 命令解释:

Uptime:是MySQL服务器运行的秒数

Threads:活跃线程的数量即开启的会话数

Questions:服务器启动以来客户的问题(查询数目)(只要跟mysql做交互,不管查询表,还是查询服务器状态都记一次)

slow queries:是慢查询的数量

Opens:已经打开的数据库表的数量

Flush tables:mysql 已经执行的flush tables,refresh和reload命令的数量
注:fflush table:刷新表(清除缓存)
reload:重载授权表
refresh:洗掉所有表并关闭和打开日志文件

Open tables:打开数据库的表的数量,以服务器启动开始

Querish per second avg:select语句平均查询的时间 

触发器Trigger

触发器是“评估”监控项采集的数据和表示当前系统状况的逻辑表达式。

触发器严重性

未分类灰色
信息浅蓝色
警告黄色
一般严重橙色
严重浅红色
灾难红色

问题颜色,不同颜色区分不同的严重程度。

报警音频,不同的音频代表不同的严重程度。

用户媒介,不同的用户媒介(通知渠道)代表不同的严重程度。如一般严重-email,严重-短信

不同的严重性通过触发器执行对应的条件动作。

触发器状态

OK这是一个正常的触发器状态。在旧版本的Zabbix中称为FALSE。
PROBLEM通常意味着发生了某些事情。例如,CPU负载较高。在旧版本的Zabbix中称为TRUE。

触发器表达式

zabbix6.0

function(/host/key,parameter)<operator><constant>

例如:www.zabbix.com的处理器负载大于5过高时将触发

last(/Zabbix server/system.cpu.load[all,avg1])>5

zabbix5.0

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

例如:www.zabbix.com的处理器负载大于5过高时将触发

{www.zabbix.com:system.cpu.load[all,avg1].last()}>5

运算符

触发器支持下列运算符 (在执行中优先级递减)

优先级运算符定义注意 unknown values(未知值)强制转换操作为浮点数 1
1-负数-Unknown → UnknownYes
2not逻辑非not Unknown → UnknownYes
3*乘法* Unknown → Unknown
(yes, Unknown, not 0 - to not lose
算术运算中的未知数)
1.2 * Unknown → Unknown
Yes
/除法Unknown / 0 → error
Unknown / 1.2 → Unknown
0.0 / Unknown → Unknown
Yes
4+算术加1.2 + Unknown → UnknownYes
-算术减1.2 - Unknown → UnknownYes
5<少于. 运算符定义为:

A<B ⇔ (A<B-0.000001)
1.2 < Unknown → UnknownYes
<=小于或等于。运算符定义为:

A<=B ⇔ (A≤B+0.000001)
Unknown <= Unknown → UnknownYes
>多于。运算符定义为:

A>B ⇔ (A>B+0.000001)
Yes
>=More than or equal to. The operator is defined as:

A>=B ⇔ (A≥B-0.000001)
Yes
6=等于。运算符定义为:

A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001)
No 1
<>不等于。运算符定义为:

A<>B ⇔ (A<B-0.000001) or (A>B+0.000001)
No 1
7and逻辑与and Unknown → 0
and Unknown → Unknown
Unknown and Unknown → Unknown
Yes
8or逻辑或or Unknown → 1
or Unknown → Unknown
Unknown or Unknown → Unknown
Yes

1 如果字符串操作数仍然转换为数字:

  • 另一个操作数是数字
  • 运算符以外的 = or <> 在操作数上使用

(如果转换失败 - 数字操作数被转换为字符串操作数并且 两个操作数都作为字符串进行比较。

notand 和 or 运算符区分大小写,并且必须在 小写。它们还必须用空格或括号括起来。

除 - 和 not 外,所有运算符都从左到右 关联性。 - 和 not 是非关联的(意思是 -(-1) 和 not (not 1) 应该用来代替 --1 和 不是不是 1)。

评价结果:

  • <<=>>==<> 如果指定的运算符应在触发器表达式中产生“1” 关系为真,如果为假,则为“0”。如果至少有一个操作数是 未知结果为未知;
  • and 对于已知操作数,如果它的两个操作数都将产生“1” 则不等于'0';否则,它产生“0”;对于未知 仅当一个操作数比较等于时,操作数and才会产生“0” '0';否则,它会产生“未知”.
  • or 对于已知的操作数,如果它的任何一个操作数都将产生“1” 则不等于'0';否则,它产生“0”;对于未知 仅当一个操作数比较不等于0时,操作数or才会产生“1”;否则,它会产生“未知”;
  • 逻辑否定运算符 not 的结果 如果其操作数的值比较不等于“0”,则操作数为“0”; 如果其操作数的值比较等于“0”,则为“1”。对于未知 操作数 not 产生“未知”。

常用函数

avg()监控项平均值

avg(#5)即最新5个值的平均值

avg(1h)即最近一小时的平均值

avg(1h,1d)即一天前的一小时内平均值

min()监控项最小值

system.cpu.load.min(5m)<6即CPU使用率最近5分钟的最小值大于6

system.cpu.load.min(#5)>2即CPU使用率最近5次的最小值大于2

max()监控项最大值

max(#5)即最新5个值的最大值

max(1h)即最近一个小时的最大值

last()最后第几个值

last()即last(#1),返回最新的一个值

last(#5),第五个最新值

last(#2),第二个最新值

last(#10,30),每隔30s采样一次,采倒数第10个值

diff()对比上一次文件内容

返回值为1,表示发生变化

返回值为0,表示没有变化

nodata()监控一段时间内是否返回数据

时间不少于30s,因为timer处理器每30s调用一次。

返回1,指评估期没有收到数据

返回0,其它

实验一

agent处理器在最近1分钟内负载超过5或者在过去10分钟内CPU负载都超过2

创建新模板Web_cpu,新监控项cpu_load,键值system.cpu.load[all,avg1],将主机和模板关联。

配置>模板>触发器(Web_cpu所在行)>创建触发器

在agent运行一些服务,稍后查看监测,已触发。

实验二

agent在过去1分钟内超过 5 次无法访问

创建新模板Web_client,新监控项icmp_status,简单检查,键值icmpping,将主机和模板关联。

创建触发器client_icmp_status,表达式点击添加如下,自动生成表达式。

键值icmping ping失败为0,ping成功为1,所以成功检索的值为0

agent手动临时禁止ping

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

查看监测面板

取消临时禁ping后告警会自动消失,可在问题里看到

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

实验三

监控/etc/passwd文件变化

创建新模板Web_file,新监控项file_changed,键值vfs.file.cksum[/etc/passwd],将主机和模板关联。

vfs.file.cksum可求出指定文件校验和;当倒数第一次(#1)的校验和不等于(<>)倒数第二次(#2)的校验和时为1

agent手动新增一个用户,查看监测面板 

滞后

希望定义一个触发器,当磁盘空间使用率大于70%时启动触发器,但当磁盘使用率小于40%时才恢复。

开启告警声音

实验

自定义监控项,创建对应的配置文件

[root@wenzi ~]$vim /etc/zabbix/zabbix_agentd.d/disk.conf
UserParameter=disk_use,df / -Th | awk 'NR>1 {print $6}' | cut -d '%' -f 1

[root@wenzi ~]$systemctl restart zabbix-agent.service
[root@wenzi ~]$zabbix_agentd -t disk_use
disk_use                                      [t|13]

配置zabbix

生成大文件,提高使用率。dd if=/dev/zero of=/opt/big.img bs=2000M count=6

删除大文件,使根目录空间使用率降低至40%以下

动作Action

当某个触发器状态改变时,可以采取相应的动作

开启 Zabbix 事件通知的发送和接收功能,需要做到

标准的动作由 条件 和 操作 两个元素构成。基本上,每当设定的条件达成时,就会执行相对应的设定操作。最重要的两个操作分别为:发送消息(事件提醒)和执行远程命令。

媒介类型

电子邮箱、短信、微信告警、电话、执行远程命令

电子邮箱告警

当zabbix监测agent的httpd服务在30s内超过5次无法访问,则zabbix出现告警并自动发送邮件给指定人员

配置监控项键值:net.tcp.service[http,,80]  检查服务是否运行并接受 TCP 连接。返回 0 - 服务关闭;1 - 服务运行

配置触发器:count(/Service_state/net.tcp.service[http,,80],30s,,"0")>=5

配置告警:

管理>报警媒介类型>创建媒体类型

QQ邮箱始终没有设置成功,不清楚。

管理>用户群组>创建用户群组

用户组:指定可访问资源的范围,比如哪些主机可以被访问

角色:加入角色可以控制用户是否有管理能力,及更细致的权限分配

管理>用户>创建用户

配置>动作>Trigger actions>创建动作

agent安装httpd,启动httpd,然后关闭httpd,观察图形、告警信息和告警邮件

企业微信告警

需要获取三项内容:企业微信ID、Agentid、Secret

查看企业微信ID

自建应用“告警机器人”

查看“告警机器人”Agentid和Secret

测试企业微信接口调试工具

企业微信官网首页向下滚动

zabbix server上编辑告警脚本。

告警脚本使用的是官方推荐的WeChat monitoring and integration with Zabbix,项目地址GitHub - X-Mars/Zabbix-Alert-WeChat: zabbix Alert WeChat zabbix 微信 报警

[root@zabbix-server ~]#pip2.7 install requests
[root@zabbix-server ~]#pip2.7 install --upgrade requests
[root@zabbix-server ~]#yum -y install git
[root@zabbix-server ~]#git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
[root@zabbix-server ~]#cp Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts/
[root@zabbix-server ~]#cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]#ll
total 4
-rwxr-xr-x 1 root root 3105 Jun  8 20:52 wechat.py
[root@zabbix-server alertscripts]#chown zabbix:zabbix wechat.py 
[root@zabbix-server alertscripts]#vim wechat.py 
[root@zabbix-server alertscripts]#vim wechat.py
#!/usr/bin/python2.7
# _*_coding:utf-8 _*_
# auther: X-Mars
# auther: 火星小刘

import requests,sys,json
import urllib3
urllib3.disable_warnings()

reload(sys)
sys.setdefaultencoding('utf-8')

def GetTokenFromServer(Corpid,Secret):
    Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
    Data = {
        "corpid":Corpid,
        "corpsecret":Secret
    }
    r = requests.get(url=Url,params=Data,verify=False)
    print(r.json())
    if r.json()['errcode'] != 0:
        return False
    else:
        Token = r.json()['access_token']
        file = open('/tmp/zabbix_wechat_config.json', 'w')
        file.write(r.text)
        file.close()
        return Token

def SendMessage(User,Agentid,Subject,Content):
    try:
        file = open('/tmp/zabbix_wechat_config.json', 'r')
        Token = json.load(file)['access_token']
        file.close()
    except:
        Token = GetTokenFromServer(Corpid, Secret)

    n = 0
    Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
    Data = {
        "touser": User,               # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        #"totag": Tagid,              # 企业号中的标签id,群发使用(推荐)
        #"toparty": Partyid,          # 企业号中的部门id,群发时使用。
        "msgtype": "text",            # 消息类型。
        "agentid": Agentid,           # 企业号中的应用id。
        "text": {
            "content": Subject + '\n' + Content
        },
        "safe": "0"
    }
    r = requests.post(url=Url,data=json.dumps(Data),verify=False)
    while r.json()['errcode'] != 0 and n < 4:
        n+=1
        Token = GetTokenFromServer(Corpid, Secret)
        if Token:
            Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
            r = requests.post(url=Url,data=json.dumps(Data),verify=False)
            print(r.json())

    return r.json()


if __name__ == '__main__':
    User = sys.argv[1]               # zabbix传过来的第一个参数
    Subject = str(sys.argv[2])       # zabbix传过来的第二个参数
    Content = str(sys.argv[3])       # zabbix传过来的第三个参数

    Corpid = "xxxxxx"              # CorpID是企业号的标识
    Secret = "xxxxxx"              # Secret是管理组凭证密钥
    #Tagid = "1"                   # 通讯录标签ID
    Agentid = "xxxxxx"             # 应用ID
    #Partyid = "1"                 # 部门ID

    Status = SendMessage(User,Agentid,Subject,Content)
    print Status



#调用脚本测试,传递三个参数,依次为:发送给谁(如下图标注)、消息标题、消息内容
[root@zabbix-server alertscripts]#./wechat.py 下图中账号 Title Zabbix
{u'access_token': u'-ua9IOj38JqudXhIjHEhWxRWuziZG37CMxePhjfx6W2if3ZwS9sZsJPMSqr_L_t0VttWy_R4pNOAjsQRJRXqDbY8m0sSbnuUeD_bXyLhh2VaneRkFi8LpG-v04gjJwLv6ASsDFY4eP6ldJ6iPlAPOHjK5Inv8lT9n80agry7K1PiE4rGoInIzV67798RexZ4EVh4qNAhL3sln_-OjX_DHw', u'expires_in': 7200, u'errcode': 0, u'errmsg': u'ok'}
{u'msgid': u'mrVtVXE39it1tWVvd57npLUcPt3Wkr99f927pJK4hhwzf_L0O8STpDXYMKLeuAqJEsp0f2FYg-55Lwex6rdovg', u'errcode': 0, u'errmsg': u'ok'}

查看手机端消息

踩坑:

命令行返回结果出现错误代码

u'errcode': 60020, u'errmsg': u'not allow to access from your ip, hint: [1686300848354961942928663], from ip: 202.107.195.203...

解决:需要在企业微信中配置可信IP,将错误代码中提示的IP填写进去。

按系统提示的步骤进行,个人需要一个公网IP,一个域名。我用的是腾讯云服务器,几元钱买的域名,解析到服务器上,不用ICP备案,等几分钟后就再次点击配置就看到下面界面,然后重新测试

多个IP之间用英文状态下分号;隔开 

在zabbix页面配置

创建报警媒介类型

创建用户群组

创建用户

创建动作   配置>动作>Trigger actions>创建动作

操作:

故障告警:{TRIGGER.STATUS}:{TRIGGER.NAME}

告警主机:{HOST.NAME}
主机地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}

恢复操作 

故障解除:{TRIGGER.STATUS}:{TRIGGER.NAME}

恢复主机:{HOST.NAME}
主机地址:{HOST.IP}
恢复时间:{EVENT.DATE} {EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
事件代码:{EVENT.ID}

开始测试

停止agent的httpd.service,查看zabbix页面,查看企业微信消息

重启启动httpd.service

故障自愈

使用远程命令,预定义在某些情况下会在受监控主机上自动执行的命令。

在该功能最显而易见的用途中,可以尝试:

  • 自动重启某些没有响应的应用(web服务器、中间件、CRM)

  • 使用IPMI 'reboot'命令重启某些确实无法响应的服务器。

  • 磁盘空间不足时自动释放(删除旧文件、清理)

  • 根据CPU负载将VM从一台物理机迁移到另一台

  • CPU(磁盘、内存或其他)资源不足时向云环境添加新节点

Zabbix active agent上远程命令不不生效。

远程命令可以在Zabbixserver、Zabbixproxy、Zabbixagent上执行,但在proxy和agent上需要设置

在agent配置中,添加AllowKey=system.run[*]、UnsafeUserParameters=1参数
在proxy配置中,将enableremotecommands参数设置为1

1、修改配置

vim /etc/zabbix/zabbix_agentd.conf
AllowKey=system.run[*]    #zabbix5.0版本及以上,用于代替早期版本EnableRemoteCommands=1
UnsafeUserParameters=1    #允许远程执行命令的时候使用不安全的参数(特殊字符串,如: \ ' * ? [] {} ~ $ ! & ; ( ) < > 等 )

重启agent

2、agent开启sudo权限

默认Zabbixagent使用Zabbix用户启动的,部分命令会因为权限拒绝而执行失败,需提前授权。

方法一:visudo

或 直接 zabbix ALL=(ALL) NOPASSWORD:ALL

方法二:zabbix以root身份运行

vim /etc/zabbix/zabbix_agent.con

AllowRoot=1 #开启此项,直接使用root进行远程管理,无需sudo授权。agent2取消此配置

接着修改Service文件,注释

User=zabbix

Group=zabbix

3、在web页面中配置

测试,手动关闭agent的httpd服务,发现关闭后服务自动启动。

宏Macros

常用原生宏

 Zabbix原生支持宏的完整列表见下面官网链接

1 支持的宏

宏名称支持该宏的功能描述
{ALERT.SENDTO}→ 告警脚本参数'配置“媒体”时用到的“发送至”
从3.0.0版本开始支持
{ALERT.SUBJECT}→ 告警脚本参数

配置“动作”时用到的“默认主题”
从3.0.0版本开始支持

{ALERT.MESSAGE}→ 告警脚本参数

配置“动作”时用到的“默认消息”
从3.0.0版本开始支持

{TRIGGER.STATUS}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 手动操作脚本事件
当前触发器的值 可以是 PROBLEM 或者 OK.
{STATUS} 已弃用。
{TRIGGER.NAME}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 基于触发器的内部通知
→ 手动操作脚本事件
触发器的名称 (已解析宏).
请注意自4.0.0开始,{EVENT.NAME} 可用于操作以显示已解析的宏触发的事件/问题名称。
{TRIGGER.SEVERITY}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 基于触发器的内部通知
→ 手动操作脚本事件
触发器严重性名称 可以在这里定义 管理 → 通用 → 触发器展示选项.
{TRIGGER.NAME}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 基于触发器的内部通知
→ 手动操作脚本事件
触发器的名称 (已解析宏).
请注意自4.0.0开始,{EVENT.NAME} 可用于操作以显示已解析的宏触发的事件/问题名称。
{HOST.NAME}→ 基于触发器的通知和命令
→ 问题更新通知和命令
→ 内部通知
→ 映射元素标签,映射URL名称和值
→ 监控项关键参数
→ 主机接口IP/DNS
→ 触发器监控项 "允许的主机" 字段
→ 数据库监控附加字段
→ SSH和Telnet脚本
→ Web监控4
→ 低级别自动发现过滤正则表达式
→ 动态URL仪表盘组件的URL字段
→ 触发器名称,事件名称,操作型数据和描述
→ 触发器URL
→ 标签名称和值
→ 脚本类型监控项,监控项原型和发现规则参数名称和值
→ HTTP代理类型监控项,监控项原型和发现规则字段:
URL,查询字段,请求正文,报头,代理,SSL证书文件,SSL密钥文件,允许的主机。.
→ 自定义主机操作 scripts (including confirmation text)
→ 自定义事件操作 scripts (including confirmation text)
可见的主机名。

这个宏可以和一个数字索引一起使用,例如: {HOST.NAME<1-9>} 指向触发器表达式中的第1个、第2个、第3个等主机。
{HOST.IP}→ 基于触发器的通知和命令
→ 问题更新通知和命令
→ 自动注册通知和命令
→ 内部通知
→ 映射元素标签,映射URL名称和值
→ 监控项关键参数1
→ 主机接口IP/DNS
→ 触发器监控项 "允许的主机" 字段
→ 数据库监控附加字段
→ SSH和Telnet脚本
→ JMX项目终结点字段
→ Web监控4
→ 低级别自动发现过滤正则表达式
→ 动态URL仪表盘组件的URL字段
→ 触发器名称,事件名称,操作型数据和描述
→ 触发器URL
→ 标签名称和值
→ 脚本类型监控项,监控项原型和发现规则参数名称和值
→ HTTP代理类型监控项,监控项原型和发现规则字段:
URL,查询字段,请求正文,报头,代理,SSL证书文件,SSL密钥文件,允许的主机。.
→ 自定义主机操作 scripts (including confirmation text)
→ 自定义事件操作 scripts (including confirmation text)
主机IP地址2.

这个宏可以和一个数字索引一起使用,例如: {HOST.IP<1-9>} 指向触发器表达式中的第1个、第2个、第3个等主机。

{IPADDRESS<1-9>} 已弃用。
{EVENT.DATE}→ 基于触发器的通知和命令
→ 问题更新的通知和命令
→ 基于服务的通知和命令
→ 服务更新的通知和命令
→ 服务恢复通知和命令
→ 自动发现的通知和命令
→ 自动注册的通知和命令
→ 内部通知
→ 手动动作脚本
触发动作的事件的日期
{EVENT.TIME}→ 基于触发器的通知和命令
→ 问题更新的通知和命令
→ 基于服务的通知和命令
→ 服务更新的通知和命令
→ 服务恢复通知和命令
→ 自动发现的通知和命令
→ 自动注册的通知和命令
→ 内部通知
→ 手动动作脚本
* 触发动作的事件时间*
{EVENT.ID}→ 基于触发器的通知和命令
→ 问题更新的通知和命令
→ 基于服务的通知和命令
→ 服务更新的通知和命令
→ 服务恢复通知和命令
→ 自动发现的通知和命令
→ 自动注册的通知和命令
→ 内部通知
→ 触发器 URLs
→ 手动动作脚本
触发动作的事件的数字ID
{ITEM.NAME}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 内部通知
→ 手动操作脚本事件
触发器表达式中导致通知的第N个监控项的名称。

该宏可以与数字索引一起使用,例如 {ITEM.NAME<1-9>} 指向触发器表达式中匹配的第1个,第2个,第3个等主机。
{ITEM.VALUE}→ 基于触发器的通知和命令
→ 故障更新通知和命令
→ 触发器名字,事件名字,操作数据和描述。
→ 标签的名称和值
→ 触发器的URL地址
→ 手动操作脚本事件

​可被解释为如下的任意一项:
1) 如果在触发器状态更改的上下文中使用,则解释为触发器表达式中第N个监控项的历史值(事件发生时),例如在展示事件或发送通知时。
2) 如果在没有触发器状态更改的上下文的情况下使用,触发器表达式中第N个监控项的最新值。例如,在弹出选择窗口中显示触发器列表时。在本例中工作方式与 {ITEM.LASTVALUE}相同。
在第一种情况下,如果历史记录值已被删除或从未存储过,它将解释为*未知*。
在第二种情况下并且仅在前端中,如果收集的最新历史值超过最大历史显示周期时间,它将解析为*未知*. (查看 管理→通用 菜单选项).

自定义 此宏支持宏值,从 Zabbix 3.2.0 开始。

该宏可以与数字索引一起使用,例如 {ITEM.VALUE<1-9>} 指向触发器表达式中的第一个、第二个、第三个等监控项。​

宏函数

1 宏函数

用户宏

用户宏可以在全局、模板和主机级别定义。这些宏有一种特殊的语法:{$MACRO}

Zabbix根据以下优先级解析宏:

1.主机级宏(先选中)

2.为主机的一级模板(即直接链接到主机的模板)定义的宏,按模板ID排序

3.为主机二级模板定义的宏,按模板ID排序

4.为主机的三级模板定义的宏,按模板ID等排序。

5.全局宏(最后选中)

如果同一级别的多个链接模板上存在具有相同名称的宏,则将使用ID最低的模板中的宏。因此,在多个模板中使用相同名称的宏是一种配置风险。

如果Zabbix找不到宏,宏将无法解析。

包含秘密宏Secret 的URLs将无法工作,因为其中的宏将解析为“*******”。

如果用户宏用于模板中的监控项或触发器,建议将该宏添加到模板中,即使该宏是在全局级别定义的。这样,如果宏类型为text,则将模板导出为XML并将其导入另一个系统仍将允许其按预期工作。秘密宏的值不会导出。

配置

一、全局宏

二、模板宏

三、主机宏

值映射

人性化显示,将数值与字符串进行关系绑定,如http响应码,200 是 OK,404 是 Not Found,403 是 Forbidden。

自动发现Discovery

Zabbix Agent被动模式

Zabbix网络发现依赖于以下信息:

  • IP地址范围
  • 可用的外部服务 (FTP, SSH, WEB, POP3, IMAP, TCP等)
  • 来自Zabbix agent的信息(仅支持未加密模式)
  • 来自SNMP agent的信息

实验

为本地IP地址范围192.168.29.140-192.168.29.149设置网络发现规则

  • 发现运行了Zabbix agent的主机
  • 每1分钟执行1次发现
  • 如果主机运行时长大于10秒,添加该主机到监控中
  • 如果主机停机时长大于15秒,则删除主机
  • 添加Linux主机到"Linux服务器"组中
  • 添加Windows主机到"Windows服务器"组中
  • 给Linux主机使用 Linux 模板
  • 给Windows主机使用 Windows 模板

现有环境:

  • 一台Centos8环境的Zabbix Server   192.168.291.141   主机名:zabbix_server   配置文件中Hostname=Zabbix Server(server安装的也有agent)
  • 一台Centos8环境Zabbix Agent(192.168.29.142   web1   主机名:web1   配置文件中Hostname=web1)
  • 一台Centos8环境Zabbix Agent(192.168.29.143   主机名:web2   配置文件中Hostname=web2)
  • 一台Windows Server 2012环境Zabbix Agent(192.168.29.144   计算机名:WIN-K3RJ16R46AS   配置文件中Hostname=web3)

1、Windows Server 2012安装Zabbix Agent

官网下载安装包。也可以选择OpenSSL-MSI,通过exe程序一键安装配置,简单。

下载后传送安装包至虚拟机windows server 2012,并解压缩;在C盘创建文件夹Zabbix,将解压后的文件复制到Zabbix中

修改 C:\Zabbix\conf 文件夹下的zabbix_agentd.conf,配置和linux端agent一样;修改后复制zabbix_agentd.conf 到C盘下

打开PowerShell,进入到 C:\Zabbix\bin 目录下,执行注册服务的命令 zabbix_agentd.exe --install,会有successful字样的返回结果

通过cmd输入 services.msc打开服务列表,最后一个就是agentd服务,右键启动即可,关闭防火墙。

2、创建Linux和Windows主机群组

3、创建自动发现规则

规则添加后会自动启动(可以先把所有agentd服务停止)

主机的发现机制是通过尝试连接主机上的Zabbix agent并获取 system.uname 这个键来实现的。从Zabbix agent获取到的值可以用于给主机命名以及为不同操作系统执行不同的动作。

主机名称选择system.uname时,在 配置>主机 中显示的主机名为:

主机名称选择system.hostname时,在 配置>主机 中显示的主机名为:

4、创建自动发现动作

配置>动作>发现动作

发现动作—操作 中添加到主机群组的同时会自动创建主机(该主机之前不存在)

5、测试

开启agentd服务

Discovered hosts主机群组是自动产生的;管理>一般>其它 可看到相关设置 

自动注册Registration

Zabbix Agent必须是主动模式才能进行自动注册。

只要有未知的主动模式agent请求检查,就会触发自动注册。

该特性对于云上新增节点的自动监控很方便。一旦云上新增了一个节点,Zabbix就开始自动收集该节点的性能和可用性数据。

对于通过zabbix agent(被动模式)添加的主机,agent(主动模式) 自动注册同样可以监控它们。agent(主动模式)请求检查时,会将配置文件中定义的监听IP(ListenIP)或监听端口(ListenPort)参数一同发送给Zabbix server。

可以使用DNS名称作为默认agent接口来进行自动注册。

注册新主机时,Zabbix server使用收到的IP地址和端口信息来配置agent。如果没收到IP地址信息,则使用入站连接中的对端IP地址。如果没收到端口信息,则使用10050作为agent的端口。

以下情况会重新执行自动注册:

  • 主机 元数据 信息变更:
    • 由于HostMetadata信息变更并且agent重启
    • 由于HostMetadataItem信息变更
  • 手动添加的主机丢失元数据信息
  • 已注册的主机手动迁移到另一个Zabbix proxy上
  • 从一个新的Zabbix proxy收到同一台主机的自动注册信息

安全性

一种安全的自动注册方式是通过配置基于预共享密钥(PSK)的认证对通信加密。

开启后全局生效;两者可同时开启,一些主机注册时不经过加密,另一些主机经过加密方式注册

Zabbix server新增主机前会对预共享密钥(PSK)进行核实。 一旦核实成功,主机就会被添加,并且 从主机发起的/到主机的通信连接 设置为仅使用 'PSK' 并且其身份/预共享密钥与全局的自动注册配置中设置的相同。

为确保使用Zabbix proxy时自动注册的安全性,Zabbix server和proxy之间应该启用加密。

使用主机元数据

agent会将主机名称和自动注册请求一同发送到Zabbix server上。

主机元数据在agent端配置文件 /etc/zabbix/zabbix_agentd.conf 中定义,两种方式

参数必填范围默认值描述
HostMetadata0-255 个字符定义主机元数据的可选参数。主机元数据仅用于主机自动注册流程(主动 agent)。
若未定义,则将从 HostMetadataItem 获取该值。
若指定的值超过限制或非 UTF-8 字符串,则 agent 将报错并且不会启动。
HostMetadataItem定义用于获取主机元数据的 Zabbix agent 监控项的可选参数。仅当未定义 HostMetadata 时,才使用本参数。
支持 UserParameters 和 aliases。不论 AllowKey/DenyKey 的值如何,都支持 system.run[]
在每次尝试自动注册时都会获取 HostMetadataItem 的值,并且该值仅用于主机自动注册流程(主动 agent)。
在自动注册请求期间,若指定监控项返回的值超过255个字符的限制,则 agent 会记录一条警告消息。
该监控项返回的值必须是 UTF-8 字符串,否则将被忽略。

Agent关键配置

Server=Zabbix Server IP

ServerActive=Zabbix Server IP        #客户端主动模式是实现自动注册前提

Hostname=Agent IP    #要确保主机名唯一

#HostnameItem=system.hostname

HostMetadata==<key>        #非必须项,可以做为添加主机的验证标识和分类,或者实现加入主机的验证功能

HostMetadataItem=<监控项Item>         #非必须项,监控项的值可以做为添加主机的验证标识和分类

实验

环境和自动发现中一样。

利用主机元数据分辨Linux和Windows

1、修改agent端配置文件

添加一行 HostMetadataItem=system.uname ,然后重启agentd服务

2、创建自动注册动作

3、测试

注意192.168.29.144主机名的变化,在自动发现(被动模式)中是WIN-K3RJ16R46AS,在自动注册(主动模式)中是web3

可用性灰色是因为是主动模式

权限和角色

具有超级管理员类型和适当权限的 Zabbix 用户可以修改或删除现有角色或创建新的自定义角色。

在Zabbix中,只有通过用户组才能授予用户访问主机数据的权限。个人用户无法直接获得主机访问权,必须加入一个有权限的用户组。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值