概述

Hosts and templates within a host group are not in any way linked to each other.

主机组内的主机和模板之间没有任何关联

模板直接链接到各个主机

预处理:数据存储到数据库之前进行转换

事件标签如何生成(??)

问题更新:添加评论,确认,改变严重性,手动关闭

escalation(升级)如何实现的

web scenario:通过一个或多个HTTP请求以检查网站可用性

item prototype:低级发现后,变量会自动替换为实际发现的参数

主机,主机组

克隆:保留host参数,以及模板链接(来自链接的所有实体)

在host配置页面,每个interface最右侧都有一个default单选按钮,当有多个同类型的接口存在时来指定选择哪一个做默认接口

为什么一个主机需要有多个interface,在有多个同类型的interface时需要指定默认interface

监控项需要指定通过什么接口来获取数据,多个接口会提供更多选择

tag:

此主机的所有problem将会用此处主机级的tag来标记

User macros, {INVENTORY.*} macros, {HOST.HOST}, {HOST.NAME}, {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {HOST.PORT} and {HOST.ID} macros 支持在tag中使用

macros:

在主机配置页的macros栏可以编辑模板级以及全局级宏

inventory:

disabled - 禁用inventory填充

manual - 手动

automatically - 自动

encryption:与主机加密连接

连接到主机 - 无加密,PSK,证书

连接自主机 - 默认无加密

issuer - 允许的证书颁发者,空则为所有CA都接受

subject - 空表示接受所有CA签名的有效证书

PSK identity - 预共享密钥身份字符串,以未加密的方式通过网络传输,以告知接收方使用哪个 PSK。

PSK - 预共享密钥(十六进制字符串)

Apply permissions and tag filters to all subgroups

将相同级别的权限/标签过滤器应用于所有嵌套主机组。对于可能已将不同权限分配给嵌套主机组的用户组,将强制执行父主机组的权限级别。一次性选项,不会保存在数据库中。(???)

当创建已有父主机组的子主机组时,子主机组直接继承父主机组权限

为已有子主机组创建父主机组时,父主机组的权限不会被子主机组影响

这里的权限和标签过滤器,是指用户组对主机组的权限设置和标签设置,一般来说,一个用户组设置对主机组01读写,则主机组01/子组01不继承读写权限,仍然为none,现在去主机组01的设置里勾选应用于所有嵌套主机组,更新后,这个用户组的权限里主机组01的子组也都变为读写,这是个一次性的更改,这个勾选框在更新后重置为未勾选状态

Inventory

如果主机inventory信息中包含一个以 'http' 或 'https' 开头的 URL,则在Inventory部分将生成一个可点击的链接。

Item

flexible interval - 重叠期间使用最小间隔,flexible period之外使用默认interval

如果灵活间隔设置为 '0',则在灵活间隔期间不会对该项进行轮询,并在该期间结束后根据默认更新间隔恢复轮询

Scheduling intervals - 度时间间隔被用来指定一个独立的检查计划,该计划是并行执行的

md<filter>wd<filter>h<filter>m<filter>s<filter>

filter> 用于指定其前缀(天、小时、分钟、秒)的值,定义为: [<from>[-<to>]][/<step>][,<filter>]

关于间隔的关系没搞清楚,如果update interval是5m;flexible interval是1m,period是1-7,08:00-12:00;scheduling interval是wd1-7h11-13。那最后表现出来的间隔应该是什么样的?

预处理

预处理由 Zabbix server或proxy完成

任何预处理步骤失败,则该监控项将变为不受支持,除非已配置“自定义失败错误处理”

xml path

从xml数据中提取值或片段(server必须支持 libxml 编译)

需要注意custom on fail选框

JSON Path

从 JSON 数据中提取值或片段

需要注意custom on fail选框

Custom multiplier

将值乘以指定的整数或浮点值

使用此选项将以 KB、MBps 等接收的值转换为 B、Bps。否则 Zabbix 将无法正确设置前缀(K、M、G 等)

Note that if the item type of information is Numeric (unsigned), incoming values with a fractional part will be trimmed (i.e. '0.9' will become '0') before the custom multiplier is applied.

Simple change

计算当前值与前一个值之间的差

对于测量不断增长的值非常有用。如果当前值小于前一个值,Zabbix 将丢弃该差异(不存储任何内容)并等待另一个值。

Change per second

对于收集不断增长的值的每秒速度非常有用 (value-prev_value)/(time-prev_time)

此计算可能产生浮点数,建议将“信息类型”设置为数值(浮点)

Javascript

可用的 JavaScript 长度取决于所使用的数据库

In range

定义范围,值应该在这个范围内,必须至少存在一个值

Matches regular expression

必须匹配的正则表达式

Does not match regular expression

不能匹配

Check for error in JSON

检查位于 JSONpath 的应用程序级错误消息。如果成功且消息不为空,则停止处理;否则,继续处理在此预处理步骤之前的值。请注意,这些外部服务错误将原样报告给用户,不会添加预处理步骤信息。解析无效的 JSON 时不会报告错误。

Check for error in XML

检查位于 XPath 的应用程序级错误消息。如果成功且消息不为空,则停止处理;否则,继续处理在此预处理步骤之前的值。请注意,这些外部服务错误将原样报告给用户,不会添加预处理步骤信息。

Check for error using a regular expression

使用正则表达式检查应用程序级别的错误消息。如果成功且消息不为空,则停止处理;否则,继续使用此预处理步骤之前的值进行处理。请注意,这些外部服务错误会原样报告给用户,而不添加预处理步骤信息。

Prometheus pattern

使用查询从 Prometheus 指标中提取所需数据

Prometheus to JSON Prometheus

将所需的 Prometheus 指标转换为 JSON

prometheus???

值的处理流程

  1. 从数据源收集原生数据,此时,数据包括ID,时间戳,值

  2. ????

  3. 基于套接字的进程间通信机制将数据从数据gatherer传递到预处理manager。在这一点上,数据收集器继续收集数据,而无需等待预处理管理器的响应。

  4. 执行预处理

  5. 预处理manager的本地缓存中的历史数据装入历史缓存

  6. 数据流停止,直到下一个历史缓存的同步

  7. 规范数据,存入数据库

值的预处理

  1. 值通过基于socket的进程间通信机制传给预处理manager

  2. 将值放入队列

  3. 等待可用的预处理worker

  4. 发送任务给可用worker

  5. 处理完成(成功或失败),预处理值返回传回manager

  6. manager将其转换格式,将结果放回队列。如果当前监控项有从属,则从属监控项也会入队列,在主监控项之后。

JSONPath

JSONPath用 . 分割段,每个段可以是单词,也可以是[ ]结构,当出现[ ]时,前面的 . 可以不写

$.object.name

$.object.['name']

$.[?(@.name == 'Object')]['name']

$.[?(@.price > 10)].length()

[1 : 3]表示数组第2项到第3项,左闭右开,从0开始

$..name返回所有名为name的属性的值

$:根 @:当前对象

当使用到宏时,如果宏值带有"", \这些特殊符号,需要在宏外加上""

$.["{#MACRO}"].value

JS

暂时没学习JS,这里仿佛在强调输入应该为字符串,输出也应该为字符串

CSV to JSON

第一个参数允许设置自定义分隔符,没设置就使用CSV第一行的Sep=来分隔,也没有就用逗号

第二个参数允许设置引用符号

如果选中“带标题行”复选框,则标题行的值将被解释为列名。在这种情况下,列名必须是唯一的,并且数据行不应包含比标题行更多的列

如果未选中“带标题行”复选框,则标题行将被解释为数据。列名将自动生成(1,2,3,4...)

Nr,Item name,Key,Qty
1,active agent item,agent.hostname,33
"2","passive agent item","agent.version","44"
3,"active,passive agent items",agent.ping,55

有标题行:

[
          {
             "Nr":"1",
             "Item name":"active agent item",
             "Key":"agent.hostname",
             "Qty":"33"
          },
          {
             "Nr":"2",
             "Item name":"passive agent item",
             "Key":"agent.version",
             "Qty":"44"
          },
          {
             "Nr":"3",
             "Item name":"active,passive agent items",
             "Key":"agent.ping",
             "Qty":"55"
          }
       ]

无标题行:

[
          {
             "1":"Nr",
             "2":"Item name",
             "3":"Key",
             "4":"Qty"
          },
          {
             "1":"1",
             "2":"active agent item",
             "3":"agent.hostname",
             "4":"33"
          },
          {
             "1":"2",
             "2":"passive agent item",
             "3":"agent.version",
             "4":"44"
          },
          {
             "1":"3",
             "2":"active,passive agent items",
             "3":"agent.ping",
             "4":"55"
          }
       ]

历史与趋势

历史保留每个收集的值,而趋势则在每小时的基础上保留平均信息,因此对资源的需求较少

其保留长时间的历史记录,不如保留更长时间的趋势数据

趋势设置为0,则完全不计算或存储趋势

趋势是使用与原始值相同的数据类型计算和存储的。因此,无符号数据类型值的平均值计算会被四舍五入,值区间越小,结果的精度就越低。例如,如果项目的值为 0 和 1,则平均值将是 0,而不是 0.5。此外,重启服务器可能会导致当前小时无符号数据类型平均值计算的精度损失

可加载模块

使用user parameters扩展zabbix功能的方法每次都会分叉一个新进程,影响性能。

可加载模块有许多好处。出色的性能和实现任何逻辑的能力是非常重要的,但也许最重要的优势是能够开发、使用和共享 Zabbix 模块。这有助于无故障维护,并帮助更轻松地交付新功能,而不依赖于 Zabbix 核心代码库。

这到底啥玩意

Windows performance counters

觉得在windows系统上有挺强的能力,是否真的好用且高效呢?

值映射

使用范围:前台,通知

指定值映射的地方:item配置中的"Show Value"

支持的key

>>>

The Items supported by platform (zabbix.com)

<<<

key

description

agent.hostname

从配置文件返回hostname

agent.ping

使用nodata()函数检测主机是否可用(???)

agent.variant

agent1 or agent2

agent.version

kernel.maxfiles

os支持最大打开文件数

kernel.maxproc

os支持最大进程数

log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]

agent必须是主动模式(???)

maxlines - agent每秒将发送到server的最大行数。该参数覆盖zabbix_agentd.conf中'MaxLinesPerSecond'的值

mode - all:读取所有符合条件的日志行

skip:跳过已读过的日志行

output - 可选输出模板,为空则返回包含匹配文本的整行,\1表示返回第一个捕获组,([0-9]+)就是一个捕获组

maxdelay - 最大延迟(??)

options :mtime-noreread :非唯一记录,只在文件大小发生变化时重新读取(???)

persistent_dir - 存储持久文件的目录的绝对路径名

log.count[ ~ <maxproclines> ~ ]

agent必须是主动模式

自agent进行最后一次日志检查以来,匹配行被计算在新行中,因此计数取决于项更新间隔。

maxproclines - agent每秒最大解析行数

logrt[file_regexp,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]

支持日志轮换的日志文件监控(???)

agent必须是主动模式

file_regexp - 文件的绝对路径和正则表达式描述的文件名。注意,只有文件名是正则表达式

options:rotate(默认),copytruncate - (???)copytruncate不能与maxdelay一起使用,mtime-reread 修改时间或大小发生变化时重新读取, mtime-noreread :非唯一记录,只在文件大小发生变化时重新读取

logrt.count[ ~ <maxproclines> ~ ]

agent必须是主动模式

agent必须是主动模式

自agent进行最后一次日志检查以来,匹配行被计算在新行中,因此计数取决于项更新间隔。

maxproclines - agent每秒最大解析行数

net.dns[<ip>,name,<type>,<timeout>,<count>,<protocol>]

检测dns服务是否正常

IP - windows上忽略

type - 要查询的记录类型(默认为SOA)(??)

timeout - windows上忽略

count - 尝试次数,win上忽略

protocol - 执行DNS查询时使用的协议:udp(默认)或tcp

net.dns.record[ ~ ]

执行DNS查询

net.if.collisions[if]

if - 网络接口名称

net.if.discovery

网络接口列表,JSON格式

net.if.in[if,<mode>]

网络接口上的入站流量统计

net.if.out[if,<mode>]

出站

net.if.total[if,<mode>]

进出站总和

net.tcp.listen[port]

检查此 TCP 端口是否处于 LISTEN 状态

net.tcp.port[<ip>,port]

检查是否可以与指定端口建立 TCP 连接

net.tcp.service[service,<ip>,<port>]

检查服务是否正在运行并接受 TCP 连接

service - ssh, ldap, smtp, ftp, http, pop, nntp, imap, tcp, https, telnet

net.tcp.service.perf[service,<ip>,<port>]

检查 TCP 服务的性能

net.udp.listen[port]

~

net.udp.service[service,<ip>,<port>]

~

net.udp.service.perf[service,<ip>,<port>]

~

proc.cpu.util[<name>,<user>,<type>,<cmdline>,<mode>,<zone>]

进程CPU使用率

proc.mem[<name>,<user>,<mode>,<cmdline>,<memtype>]

进程使用内存

proc.num[<name>,<user>,<state>,<cmdline>,<zone>]

进程数

sensor[device,sensor,<mode>]

读取硬件传感器

system.boottime

系统启动时间

system.cpu.discovery

检测到的CPU列表

system.cpu.intr

设备中断???

system.cpu.load[<cpu>,<mode>]

CPU负载

system.cpu.num[<type>]

CPU数量

system.cpu.switches

上下文切换次数???

system.cpu.util[<cpu>,<type>,<mode>,<logical_or_physical>]

CPU使用率

system.hostname[<type>, <transform>]

系统主机名

通过Windows上的GetComputerName()(用于netbios)或gethostname()(用于host)函数获取,也可以通过其他系统上的uname()系统API输出获取nodename。

system.hw.chassis[<info>]

底盘信息???

system.hw.cpu[<cpu>,<info>]

CPU信息

system.hw.devices[<type>]

PCI 或 USB 设备列表

system.hw.macaddr[<interface>,<format>]

MAC 地址列表

system.localtime[<type>]

系统时间,只能用在被动模式

system.run[command,<mode>]

在主机上运行指定命令

最多可以返回512KB的数据,包括被截断的尾随空格。

为了正确处理,命令的输出必须是文本。

system.stat[resource,<type>]

系统统计

该选项仅在AIX上支持?

system.sw.arch

软件架构信息

system.sw.os[<info>]

操作系统信息

system.sw.packages[<regexp>,<manager>,<format>]

列出(按字母顺序)名称与给定包正则表达式匹配的已安装包

system.swap.in[<device>,<type>]

交换(从设备到内存)统计信息???

system.swap.out[<device>,<type>]

从内存到设备的交换统计信息???

system.swap.size[<device>,<type>]

交换空间大小

system.uname

系统的识别

system.uptime

系统运行时间

system.users.num

登录用户数

在代理端使用Who命令获取

vfs.dev.discovery

块设备及其类型列表???

仅Linux平台支持此项

vfs.dev.read[<device>,<type>,<mode>]

磁盘读取统计信息

vfs.dev.write[<device>,<type>,<mode>]

磁盘写入统计信息

vfs.dir.count[dir,<regex_incl>,<regex_excl>,<types_incl>,<types_excl>,<max_depth>,<min_size>,<max_size>,<min_age>,<max_age>,<regex_excl_dir>]

目录条目计数

vfs.dir.size[dir,<regex_incl>,<regex_excl>,<mode>,<max_depth>,<regex_excl_dir>]

目录大小

vfs.file.cksum[file]

文件校验和,由 UNIX cksum 算法计算得出???

vfs.file.contents[file,<encoding>]

检索文件内容

vfs.file.exists[file,<types_incl>,<types_excl>]

检查文件是否存在

vfs.file.md5sum[file]

文件的 MD5 校验和

vfs.file.regexp[file,regexp,<encoding>,<start line>,<end line>,<output>]

在文件中查找字符串

只返回第一个匹配的行

vfs.file.regmatch[file,regexp,<encoding>,<start line>,<end line>]

在文件中查找字符串,返回找没找到

vfs.file.size[file]

文件大小

该文件要求zabbix用户拥有读权限

vfs.file.time[file,<mode>]

文件时间信息??

vfs.fs.discovery

已挂载文件系统及其类型的列表???

vfs.fs.get

已挂载文件系统的列表,包括它们的类型、磁盘空间和 inode 统计信息

vfs.fs.inode[fs,<mode>]

inode 的数量或百分比???

vfs.fs.size[fs,<mode>]

磁盘空间以字节或占总量的百分比表示

zabbix.stats[<ip>,<port>]

返回一组 Zabbix 服务器或代理的内部指标

请注意,将只接受来自目标实例上的'StatsAllowedIP'服务器/代理参数中列出的地址的统计请求

zabbix.stats[<ip>,<port>,queue,<from>,<to>]

返回在 Zabbix 服务器或代理上远程延迟的队列中监控项的数量

~

>>>

Windows-specific item keys (zabbix.com)

<<<

简单检测

支持简单检测的key有:

icmpping[<target>,<packets>,<interval>,<size>,<timeout>]

icmppingloss[<target>,<packets>,<interval>,<size>,<timeout>]

icmppingsec[<target>,<packets>,<interval>,<size>,<timeout>,<mode>]

net.tcp.service[service,<ip>,<port>]

net.tcp.service.perf[service,<ip>,<port>]

net.udp.service[service,<ip>,<port>]

net.udp.service.perf[service,<ip>,<port>]

日志监测???

日志时间格式:

23480:20100328:154718.045 Zabbix agent started

则格式为ppppp:yyyyMMdd:hhmmss

M为月,m为分

server和agent用两个计数器来跟踪被监控日志的大小(大小计数器)和最后被修改的时间(时间计数器)

agent内部使用inode号码(UNIX/GNU/Linux),文件索引(Windows)和前512日志文件字节的MD5校验和,用来改善日志文件被截断和轮换时的决策???

这三项由agent内部搜集,不会传给server,并且在agent停止时丢失

如果对于logrt()有多个匹配的日志文件,且agent正在追踪其中最新的日志文件,而当这个文件被删除时,会记录告警信息。Zabbix agent ignores log files with modification time less than the most recent modification time seen by the agent for the logrt[] item being checked. ???

agent会从上次结束的点开始读取日志文件

已经解析了的字节数(大小计数器)以及最后修改的时间(时间计数器)都存储在zabbix 数据库中,并且发给agent以确保agent在刚刚启动或者接收到了之前被禁用或不支持的项目时,从此点开始读取日志。

如果大小计数器不为0,而logrt或logrt.count里没有匹配的文件,则大小计数器会被重置为0,使得之后出现文件时从开头读取。

当日志文件大小小于大小计数器时,计数器被重置为0

如果有多个相同最后修改时间的文件,agent就会尝试分析所有这些文件,并避免遗漏数据或重复读取数据。当出现多个这样的文件时,agent会按字典降序处理。

agent每隔一段时间处理一次日志文件的新记录

为了找到所需字符串,zabbix会处理10倍于MaxLinesPerSecond的新行

log和log.count限制为agent发送缓冲区的1/2大小,即使其中没有非日志项???

因此,为了一个连接中发送的maxlines值,agent的BufferSize至少为2倍maxlines

在没有日志项时,所有agent代理缓存区用于非日志项,当出现日志值时,会替换较旧的非日志值,直到1/2

对于超过256KB的日志文件记录,仅对其前256kB进行正则表达式匹配,其余被忽略,当agent被停止时,内部状态丢失,长记录文件可能会在agent重启后以不同方式处理

文件名中只支持logrt的正则表达式,目录正则不被支持

在unix平台上,预期找到的日志文件的目录不存在,则logrt[]会变为NOTSUPPORTED,而在windows上不会

logrt[]项缺少日志文件不意味着它是NOTSUPPORTED,这个错误会被记录为warnings放入agent的日志文件中,但这样也并不意味着该项为NOTSUPPORTED

在agent日志文件中可以找出为什么变为NOTSUPPORTED,zabbix可以监控agent的日志,debuglevel = 4或5

maxdelay:

有时一些应用程序会写大量日志,如果经过慎重判断,可以通过设置maxdelay来跳过一些日志

如果maxdelay>0,则每次检测都会计算出一个估计延迟,来分析完成剩余记录需要多长时间,如果没有超过maxdelay,照常分析,如果超过了,就会跳过部分日志,使得剩余日志的延迟小于maxdelay

这个位置是大概的,因为跳转后会将位置调整为当前行的开头

copytruncate:

这是个啥???

使用了copytruncate选项的logrt假设日志文件具有不同记录,因此初始块的MD5校验和(最多前512字节)将会是不同的。若两个初始块的MD5校验和相同的文件意味着一个是原件,一个是副本。有copytruncate选项的logrt致力于正确处理日志文件副本而不报告重复项。

agent和server的通信失败时的操作:

agent发送缓冲区的指定日志区域有空闲时,如果失败,日志监控结果会积累在缓冲区,减轻短暂的通信故障

若通信故障较长:

  • 停止log和logrt检查,通信恢复后并且缓冲区出现可用空闲时,在之前停止的位置恢复检查,这样就没有匹配行丢失

  • log.count和longrt.count在maxdelay=0时停止,行为与上类似,但是会影响count结果,例如,一个检查在日志文件中计数 100 行匹配,但由于缓冲区中没有空闲槽,检查被停止。当通信恢复时,代理再次计数相同的 100 行匹配和 70 行新的匹配。代理现在发送计数 = 170,仿佛它们是在一次检查中找到的

  • log.count和logrt.count在maxdelay>0,如果没有产生跳跃,行为与上同,如果发生了跳跃,则跳跃后的位置被保留,但计数结果被丢失

calculated

在type栏选择calculated,是一种类型

在“formula”字段中输入计算定义。实际上,公式和key之间没有任何联系。

如果用户宏用于引用函数参数或常量,则将在公式中展开用户宏。如果引用函数、主机名、项目键、项目键参数或运算符,则不会展开用户宏

与触发器表达式不同,Zabbix 根据计算型监控项的更新间隔处理计算,而不是在接收到新值时处理。

其一大特点是,支持多个监控项数值的计算(trigger能否做到?自己想一下?)

计算型监控项进行计算,trigger进行判断

SSH

无需agent???,且server必须配置为支持SSH2(libssh)

1.密码认证 2.认证密钥文件

密钥文件需要对server配置项进行修改,设置公钥,私钥放置的绝对路径

SSHKeyLocation=/home/zabbix/.ssh

external checks

外部检查是由 Zabbix server或proxy通过运行 shell 脚本或二进制文件执行的检查。

server会从配置文件中ExternalScripts参数指定的目录查找脚本并执行

访问权限和环境变量需要在wrapper脚本中处理

运行脚本会降低性能

aggregate checks

直接数据库查询收集来自监控项的聚合信息

无需agent

groupfunc["host group","item key",itemfunc,timeperiod]

主持的groupfunc有:grpavg,grpmax,grpmin,grpsum

可以包含多个主机组,指定父主机组会包含其嵌套的所有主机组

itemfuc有:avg,count,last,max,min,sum

//主机组 'MySQL 服务器' 的平均处理器负载
grpavg["MySQL Servers","system.cpu.load[,avg1]",last]

JMX

检索特定jmx计数器,server需要查询zabbix java网关,使用JMX management API来查询应用程序

key:jmx[],内部两个参数,object name - MBean 的对象名称??? attribute name - MBean 属性名称

jmx[com.example:Type=Hello,weight]
jmx[com.example:Type=Hello,apple.weight]

jmx endpoint:可以指定自定义 JMX 端点。确保 JMX 端点连接参数与 JMX 接口匹配???

监控一个boolean计数器,信息类型需要设为无符号数,然后添加bool转十进制的预处理步骤

ODBC

不直接连接数据库,使用ODBC中设置的接口和驱动

使用开源unixODBC

配置unixODBC

需要安装unixODBC以及对应数据库的驱动

key:

db.odbc.select[<unique short description>,<dsn>,<connection string>]

db.odbc.get[<unique short description>,<dsn>,<connection string>]

dsn:数据源名称 connection string:连接描述

二选一,都是描述连接的,若同时存在,采用connection string

数据源:

[test]

Description = MySQL test database

Driver = mysql

Server = 127.0.0.1

User = root

Password =

Port = 3306

Database = zabbix

db.odbc.get[MySQL 示例,,"Driver=/usr/local/lib/libmyodbc5a.so;Database=master;Server=127.0.0.1;Port=3306"]

dependent items

依赖监控项的间隔必须和主监控项的间隔一致

可通过预处理从主数据中提取依赖所需数据

最多允许3层依赖关系

从模板继承的主监控项的依赖监控项将不会导出到xml???

在依赖项预处理中配置提取所需部分

plugins???

限制agent检测

默认情况下,所有system.run[*]都是禁用的

若要允许远程命令,为特定的命令添加AllowKey=system.run[<command>,*]

禁止特定的远程命令,在 AllowKey=system.run[*] 参数之前添加 DenyKey 参数和 system.run[] 命令

因为system.run[*]默认禁用,所以可以不添加denyrule的情况下添加allowkey,但其它情况下不能只有allowkey

AllowKey 和 DenyKey 规则不影响 HostnameItem、HostMetadataItem、HostInterfaceItem 配置参数???

trigger