当前位置: 首页 > 知识库问答 >
问题:

如何根据日志负载中的某个关键字在Fluentd中更改日志消息的严重性级别(信息、错误、警告等)?

聂和宜
2023-03-14

我有集装箱在GKE的kubernetes运行。在/var/log/containers/my_container.log中,我有如下内容(在其他一些不同格式的日志中):

{"log":"17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason\n","stream":"stdout","time":"2017-10-17T04:36:29.750702216Z"}

此日志显示在Stackdriver(GKE中的Fluentd输出)上,作为信息日志和类似内容:

23:02:32.000 17-Oct-2017;04:36:29.744 : [main] [server:] [id:] [yt:] ERROR no.myproject.service.Server - call failed for some reason

所以

23:02:32.000 
<filter reform.**>
  type parser
  format /^(?<time>\d{2} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w)\s+(?<log2222>.*)/
  reserve_data true
  suppress_parse_error_log false
  key_name log
</filter>

我错过了什么?在编写Regex模式时,我不确定是否应该考虑kubernetes日志文件中消息的“log”字段,还是我称之为format 2的字段(在Stackdriver上添加了时间)。

我真的很感激任何建议,这将是一个很大的帮助。

共有1个答案

翟元凯
2023-03-14

我不知道您使用的工具,但看起来regex的第一部分与日志字符串中前缀时间的确切格式不匹配。

实际上\d{2}只匹配2个数字。

要匹配整个时间前缀,可以使用(?:\d{2}:){2}\d{2}\.\d{3}

^(?<time>(?:\d{2}:){2}\d{2}\.\d{3} [^\s]*) : (?<message2>[^ \]]*)\] (?<message3>[^ \]]*)\] (?<message4>[^ \]]*)\] (?<message5>[^ \]]*)\] (?<severity>\w+)\s+(?<log2222>.*)
 类似资料:
  • 问题内容: 我正在使用Python的机制将输出打印到屏幕上。我可以使用print语句来做到这一点,但是我想允许用户调整更好的粒度以禁用某些类型的输出。我喜欢为错误打印的格式,但是当输出级别为“信息”时,我希望使用更简单的格式。 例如: 在此示例中,我希望以不同的方式打印错误的格式: 是否可以在没有多个日志记录对象的情况下针对不同的日志级别使用不同的格式?我宁愿在创建记录器后就不修改它,因为有大量的

  • 我一直在尝试更改用户日志的日志级别,即出现在

  • 我试图找出我的代码或方法有什么问题。我正在使用Azure函数(v3)并使用ILogger接口从我的函数中记录事件。下面是我正在使用的示例代码: 我的Azure函数启用了应用程序洞察,因此日志被写入traces表,我可以像这样查询它们: 但结果如下所示(列是时间戳、消息,最后一列是日志严重性级别): null 预期的行为是应用程序洞察中的严重性与文档中的严重性级别相匹配。我错过了什么? 附注。我的h

  • 本文向大家介绍C# 如何添加错误日志信息,包括了C# 如何添加错误日志信息的使用技巧和注意事项,需要的朋友参考一下 系统日志 系统日志包含了由Windows系统组件记录的事件。例如,在启动期间装入驱动程序或其他系统组件失败被记录到系统日志。要查看系统日志: 打开命令提示符。 在提示符下输入eventvwr。这打开了Windows事件查看器。 应用程序日志 应用程序日志包含了由应用程序或程序记录的事

  • 我在一个集群中工作,在该集群中,我没有权限在使用pyspark时更改文件log4j.properties以停止信息日志记录(如这里的第一个答案所述)上面问题的第一个答案解释了以下解决方案,适用于spark-shell(scala)

  • 问题内容: 使用log4j时,该方法可用,可用于在运行时确定的日志级别记录消息。我们正在利用这个事实和技巧将stderr重定向到特定日志级别的记录器。 slf4j没有我可以找到的通用方法。这是否意味着无法实现上述目的? 问题答案: 无法使用来执行此操作。 我认为缺少此功能的原因是几乎无法构造一个类型,该类型可以有效地映射到幕墙后面所有可能的记录实现中使用的(或等效)类型。另外,设计人员认为您的用例