DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

macOS 日志过滤失败

Collector 0.159.0 的 macOS 日志接收器缺少 messageType 字段别名,简单过滤表达式会被拒绝。使用受支持的小写 logType 等式,并分别验证配置与实际过滤结果。

给 OpenTelemetry Collector 的 macos_unified_logging 配置 messageType == 'Error',启动却报 predicate must contain at least one valid field name。在 contrib 0.159.0 中,这可能是接收器缺少字段别名,不是 macOS 没有错误日志。

简单表达式失败的原因

这个版本的字段名单包含 logType,没有 messageType。校验又只要求表达式中出现至少一个已知字段,所以加入一个 subsystem 条件后可能通过,却不能由此证明其余字段和值也被正确验证。

不要为了让启动成功随便追加一个无关条件。校验通过与系统日志过滤出正确记录,是两个不同结果。

用已支持的级别写法

旧版可以采用受支持的 logType 别名,并用小写级别名称和显式 OR。下面只是已有接收器的局部配置,保留原日志范围、格式、时间窗口和 service pipeline:

receivers:
  macos_unified_logging:
    predicate: "logType == 'error' OR logType == 'fault'"

还需要按子系统过滤时,在原条件后加上带括号的级别组,避免改动逻辑优先级。示例中包含两种级别,项目只需要 error 时不必扩大到 fault。

不能将 messageType IN {'Error', 'Fault'} 当成两个等式的同义写法。日志级别涉及枚举转换,IN 的字符串集合不一定采用等式比较的转换方式;它可能没有语法错误,却返回零条。

新版仍要核对值与结果

正式 0.162.0 已加入 messageType 等字段别名,并把组合示例改为 OR。但核对的值校验仍用字符串包含匹配,小写 error、fault 与大写示例不能不加区分。采用上述小写形式后,仍应使用实际版本验证完整配置,不能仅凭 README 中存在一个写法就认定它可用。

配置能启动后,在获准查看的有限时间窗口内,用已知匹配记录核对接收结果,也确认不匹配记录被排除。没有收到记录,还可能与时间范围、归档模式、权限或实际日志内容有关,不要直接删除过滤条件采集整台机器的日志。