Zabbix(二)

news2024/11/26 4:27:08

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

模板Template

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

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

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

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

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

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

监控项Items

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

实验一

监控/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,监控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

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

触发器状态

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 产生“未知”。

实验一

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手动新增一个用户,查看监测面板 

动作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(磁盘、内存或其他)资源不足时向云环境添加新节点

1、在 Zabbix agent上执行远程命令(自定义脚本)必须先在agent配置中启用。

必须确保添加了AllowKey=system.run[*]参数,并重启 agent后台驻留程序。

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

vim /etc/zabbix/zabbix_agentd.conf

2、agent开启sudo权限

visudo

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并将其导入另一个系统仍将允许其按预期工作。秘密宏的值不会导出。

配置

一、全局宏

二、模板宏

三、主机宏

自动发现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

官网下载安装包

下载后传送安装包至虚拟机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 字符串,否则将被忽略。

实验

环境和自动发现中一样。

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

1、修改agent端配置文件

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

2、创建自动注册动作

3、测试

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二章 模态命题:必然、可能

第二章 模态命题&#xff1a;必然、可能 第一节 模态命题-句式转换-逻辑转换 题-模态命题-句式转换-逻辑转换&#xff1a;①不一定不可能&#xff1b;②不一定可能不未必。 1.唐代韩愈在《师说》中指出&#xff1a;“孔子曰&#xff1a;三人行&#xff0c;则必有我师。是故…

MM32F3273G8P火龙果开发板MindSDK开发教程1 - 点亮LED

MM32F3273G8P火龙果开发版MindSDK开发教程1-点亮LED 1、登录官网下载对应的MindSDK固件 https://mindsdk.mindmotion.com.cn/&#xff0c;然后注册下载mm32F3270的固件即可。 下载完的文件为 plus-f3270_mdk.zip 解压后的文件路径如图&#xff1a; 2、新建LED工程 将下载…

ModNet抠图算法及摄像头实时抠图示例

目录 一、视频抠图采用绿幕的原因 1、摄像机成色原因 2、抠图效果原因 3、经济成本 二、抠图背景知识 1、Trimap 2、什么是抠图 3、抠图算法分类 三、Deep Image Matting算法 1、网络结构图 2、算法解读 &#xff08;1&#xff09;Encoder-Decoder阶段 &#xff0…

vue3 -- lottie-web使用

Lottie简介 官方介绍:Lottie是一个库,可以解析使用AE制作的动画(需要用bodymovie导出为json格式),支持web、ios、android、flutter和react native。在web端,lottie-web库可以解析导出的动画json文件,并将其以svg或者canvas的方式将动画绘制在我们的页面上. Lottie的优点 …

chatgpt赋能python:Python版本切换教程

Python版本切换教程 Python是一种高级编程语言&#xff0c;用于多种编程任务。但是&#xff0c;由于Python版本之间的不兼容性&#xff0c;有时候需要切换Python版本以满足特定的需求。在本文中&#xff0c;我们将介绍Python版本切换的方法&#xff0c;包括安装和使用多个版本…

机器学习 | 集成算法 | Bagging | Boosting | 概念向

&#x1f4da;Bagging和Boosting的概念 集成学习&#xff08;Ensemble Learning&#xff09;就是通过某种策略将多个模型集成起来&#xff0c;通过群体决策来提高决策准确率。为什么集成学习会好于单个学习器呢&#xff1f;原因可能有三&#xff1a; 训练样本可能无法选择出最好…

【ARMv8 SIMD和浮点指令编程】NEON 通用算术指令——杂项也不少

算术通用指令杂项包括以下指令: UABA、UABAL/UABAL2、UABD 和 UABDL/UABDL2。无符号向量差值绝对值累加和差值绝对值。 ABS 和 NEG向量绝对值和求反。 UMAX、UMIN、UPMAX、UPMIN、UMAXV 和 UMINV。无符号向量最大值,无符号向量最小值,无符号向量按对最大值,无符号向量按对最…

chatgpt赋能python:Python怎么分行输出?教程来了!

Python怎么分行输出&#xff1f;教程来了&#xff01; Python是一种解释型、面向对象、动态数据类型的高级编程语言。在Python中&#xff0c;分行输出是非常常见的操作&#xff0c;本文将介绍Python分行输出的不同方式以及使用的情况。 一、使用换行符 使用换行符是Python分…

python文字转语音(pyttsx3+flask)

提示&#xff1a;文章结尾有全部代码 目录 前言一、Flaskpyttsx基本使用Flask导入Flask框架配置基础环境初始Flask代码 pyttsx3库基本使用导入pyttsx3初始化pyttsx3文字转语音运行 二、具体实现1.引入库 总结 前言 本文主要讲解如何用python的pyttsx3库flask框架&#xff0c;手…

chatgpt赋能python:Python切换指南:让你无缝转换到Python

Python切换指南&#xff1a;让你无缝转换到Python Python是一个高级的编程语言&#xff0c;它可以用来进行各种各样的应用开发和数据分析。 Python有很多优点&#xff0c;比如它易于学习和使用&#xff0c;它是一个开源的语言&#xff0c;它具有广泛的库和框架。 如果你是处于…

Mysql数据库(六):基本的SELECT语句

基本的SELECT语句 前言一、SELECT...二、SELECT ... FROM三、列的别名四、去除重复行五、空值参与运算六、着重号七、查询常数八、显示表结构九、过滤数据 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#…

如何监控EMC VNX控制器的启动过程

这里我们要讨论的内容基本上适用于所有的EMC VNX中端存储系统&#xff0c;包含老的Clariion CX3&#xff0c;CX4&#xff0c;VNX1和VNX2&#xff0c;其实VNXe和Unity很多内容也是一样的。当然由于VNXe和Unity 操作系统的大的变化&#xff0c;差异也是比较大的。 导致EMC Clarr…

什么是M-LAG?为什么需要M-LAG?

M-LAG&#xff08;Multichassis Link Aggregation Group&#xff09;提供一种跨设备链路聚合的技术。M-LAG通过将两台接入交换机以同一个状态和用户侧设备或服务器进行跨设备的链路聚合&#xff0c;把链路的可靠性从单板级提升到设备级。同时&#xff0c;由于M-LAG设备可以单独…

如何设计一个完整的交互流程,提升产品用户体验

交互流程设计是一项关乎用户体验的重要工作。通过设计和规划用户与产品或服务的交互方式和流程&#xff0c;我们可以提高用户的满意度和使用效果。在本文中&#xff0c;我们将深入探讨交互流程设计的关键要素以及其对用户体验的重要性。 交互流程设计本质是通过设计和规划用户与…

【Python】Python进阶系列教程-- Python3 SMTP发送邮件(六)

文章目录 前言实例使用Python发送HTML格式的邮件Python 发送带附件的邮件在 HTML 文本中添加图片使用第三方 SMTP 服务发送 前言 往期回顾&#xff1a; Python进阶系列教程-- Python3 正则表达式&#xff08;一&#xff09;Python进阶系列教程-- Python3 CGI编程&#xff08;…

chatgpt赋能python:Python怎么倒序输出字符串

Python怎么倒序输出字符串 Python是一种高级编程语言&#xff0c;它可以让开发人员快速编写代码。在Python中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;其支持各种字符串操作。在这篇文章中&#xff0c;我们将讨论如何在Python中倒序输出字符串。 倒序输出字符…

openGauss5.0企业版使用指南之企业版安装

文章目录 0. 前言1. 安装1.1 获取安装包1.1.1 操作步骤1.1.2 准备软硬件安装环境1.1.3 软硬件环境要求1.1.4 修改操作系统配置1.1.5 **关闭操作系统防火墙**1.1.6 **设置字符集参数**1.1.7 **设置时区和时间**1.1.8 **&#xff08;可选&#xff09;关闭swap交换内存**1.1.9 **关…

MOVEit Transfer 漏洞似乎被广泛利用

Progress Software 已在其文件传输软件 MOVEit Transfer 中发现一个漏洞&#xff0c;该漏洞可能导致权限提升和潜在的未经授权访问环境&#xff0c;该公司在一份安全公告中表示。 在 MOVEit Transfer Web 应用程序中发现了一个 SQL 注入漏洞&#xff0c;可能允许未经身份验证…

【ARMv8 SIMD和浮点指令编程】NEON 逻辑指令——与或非有多少?

NEON 逻辑指令主要包括与、或、异或、位清除、或非、为 False 时按位插入、为 True 时按位插入和按位选择指令,下面我们来详细学习这些指令。 一、逻辑指令 1.1 AND 按位与(向量),该指令将两个源 SIMD&FP 寄存器按位与,并将结果写入目标 SIMD&FP 寄存器。 AND …

基于JDBC的账务管理系统

一、项目介绍 1.1 项目目标 本项目为JAVAEE基础和数据库的综合项目&#xff0c;包含了若干个知识点&#xff0c;达到将从基础班到现在所学的知识综合使用&#xff0c;提高了我们对项目的理解与知识点的运用。熟练View层、Service层、Dao层之间的方法相互调用操作熟练使用工具类…