fluentd - Fluentd 元素发出消息记录
问题描述
我们有一个带有以下标签的 td_agent.conf 文件:
#this filter is used for C API which remove "[stdout]" from log
#if CLOG Unified Logging C API won't be used, this filter can be removed
<filter k.**.log>
@type parser
format /^(\[stdout\])*(?<log>.+)$/
key_name log
suppress_parse_error_log true
</filter>
以及以下示例日志行:
{"host":"omer","level":"TRACE","log":{"classname":"Manager:452","message":"^~\"DD\"-^ TRACE Added context","stacktrace":"","threadname":"Processing-ThreadPool-2"},"process":"Context","service":"","time":"2020-11-04T13:37:12.979Z","timezone":"Kolkata","type":"log"}
在 Fluentd 中具有上述逻辑时,我们会输出日志,并发出 log: {},这意味着在弹性数据库中没有我们想要的信息。删除标签时,一切正常。谁能解释为什么需要这样做?
td-agent 的开始是:
<source>
@type tail
path /var/log/containers/*s*.log
pos_file /var/log/td-agent/containers.json.access.pos
tag k.*
#read_from_head true
<parse>
@type regexp
expression /(^(?<header>[^\{]+)?(?<message>\{.+\})$)|(^(?<log>[^\{].+))/
</parse>
</source>
<filter k.var.log.containers.**.log>
@type parser
key_name message
format json
#time_parse false
time_key time
time_format %iso8601
keep_time_key true
</filter>
#this filter is used for C API which remove "[stdout]" from log
#if CLOG Unified Logging C API won't be used, this filter can be removed
<filter k.**.log>
@type parser
format /^(\[stdout\])*(?<log>.+)$/
key_name log
suppress_parse_error_log true
</filter>
解决方案
推荐阅读
- java - Get 方法返回错误的空值
- java - 在 android 的键盘上阻止字符 ë、à、é、ä 等
- r - 在 R 中绘制 glm 与 3 个变量的交互
- javascript - 聚合物 - 绑定值中的格式日期
- ios - 快速打开特定的视图控制器
- javascript - 如何切换从 AJAX 获取的数据?
- python - 比 Pandas Dataframe 的逐行计算更有效的方法
- php - 异常 'Viewflex\Forex\ForexException' 带有消息'检索汇率时出错
- javascript - 在表单中显示为 HTML 实体的特殊字母
- ant - Ant 中 exec 任务的重试任务给出了不正确的结果属性