所有实验的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 → Unknown | Yes |
2 | not | 逻辑非 | not Unknown → Unknown | Yes |
3 | * | 乘法 | 0 * 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 → Unknown | Yes |
- | 算术减 | 1.2 - Unknown → Unknown | Yes | |
5 | < | 少于. 运算符定义为: A<B ⇔ (A<B-0.000001) | 1.2 < Unknown → Unknown | Yes |
<= | 小于或等于。运算符定义为: A<=B ⇔ (A≤B+0.000001) | Unknown <= Unknown → Unknown | Yes | |
> | 多于。运算符定义为: 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 | ||
7 | and | 逻辑与 | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown | Yes |
8 | or | 逻辑或 | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown | Yes |
1 如果字符串操作数仍然转换为数字:
- 另一个操作数是数字
- 运算符以外的 = or <> 在操作数上使用
(如果转换失败 - 数字操作数被转换为字符串操作数并且 两个操作数都作为字符串进行比较。
not、and 和 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} | → 告警脚本参数 | 配置“动作”时用到的“默认主题” |
{ALERT.MESSAGE} | → 告警脚本参数 | 配置“动作”时用到的“默认消息” |
{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地址 → 手动操作脚本事件 | 可被解释为如下的任意一项: 自定义 此宏支持宏值,从 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 中定义,两种方式
参数 | 必填 | 范围 | 默认值 | 描述 |
HostMetadata | 否 | 0-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
可用性灰色是因为是主动模式