如何让时间戳在 Apache NiFi 中工作?

问题描述 投票:0回答:1

我已经设置了一个 Apache NiFi 进程来将 CentOS 日志发送到 ElasticSearch。

我使用ListenSyslog从CentOS服务器接收系统日志。

现在不幸的是,愚蠢的事情随后删除了时间戳并植入了自己的时间戳。那里的时间戳是 ISO6801 (Centos Syslog Timestamp(2024-05-23T20:29:27Z)),但随后它插入了看起来像 this 的愚蠢时间戳: “5 月 23 日 09:25:59”

所以,我尝试了很多事情,但最近的流程是这样的: ListenSyslog > ExtractText > UpdateAttribute > ReplaceText > ConvertRecord > PutElasticsearchJson

日志被摄取后:
提取文本
要获取时间戳(我不想生成新的时间戳,以防万一在摄取日志时出现延迟,而是保留日志本身的时间戳。
更新属性
这会将年份附加到时间戳上
替换文本
这将正确格式化日期
转换记录
将日志转换为 Json 对象
PutElasticsearchJson
实际将日志发送到Elasticsearch

但是由于时间戳,整个事情失败了。

现在,我CAN让它发送日志,但是时间被视为关键字,并且你不能使用它们来指定时间范围,你只能将它们用作过滤器(在X 时间)或显示日志最多的 5 次(最多第二次)(然后任何其他时间都会被过滤到称为“其他”的大堆中。

一些细节:
提取文本
我有一个名为“orig_timestamp”的自定义字段,其值为

(\w{3,} \d{2} \d{2}:\d{2}:\d{2})

更新属性
我有一个名为“orig_timestamp_with_year”的自定义字段,带有

${orig_timestamp:toDate("yyyy MMM dd HH:mm:ss"):format("yyyy-MM-dd'T'HH:mm:ss.SSSZ")}

替换文本
更换策略:

Regex Replace
搜索值:
\w{3,} \d{2} \d{2}:\d{2}:\d{2}
重置价值:
${'$1 '}${now():format('yyyy')}

转换记录
记录阅读器:SyslogReader
记录写入器:JsonRecordSetWriter

Schema Write Strategy: Do Not Write Schema
Date Format: yyyy-MM-dd
Time Format: HH:mm:ss

PutElasticsearchJson
指数操作:指数
客户服务:PutElasticsearchJson

流程是什么样的

elasticsearch timestamp centos kibana apache-nifi
1个回答
0
投票

您可以尝试不使用提取文本和替换文本。通过使用 syslog reader 作为 reader 和 json writer 作为 writer 来使用更新记录,然后需要使用记录路径值更新时间戳。/orig_timestamp in value use ${field.value :toDate():format("yyyy-MM-dd'T'HH:mm:ss.SSSZ")}

© www.soinside.com 2019 - 2024. All rights reserved.