从包含 Splunk 字符串的日志文件中提取 5 个字段
Extracting 5 fields from logfile containing a string in Splunk
以下是示例日志文件数据:
08/22/2018 02:50:06.380 EDT-0400 2 TCP/IP Controller Plugin.Transmitter pool thread <Regular:2>.CybTargetHandlerChannel.call[:695] - Message has been sent: 20180822 02500636+0400 C7STA PLINUX03 ALOPMTA2.N01834/LO.S00001D182340248/MAIN State EXEC SetStart Status(Executing at PLINUX03) Jobno(34523) ChildPid(34527) User(PLINUX03) Host(localhost)
08/22/2018 02:50:06.382 EDT-0400 5 TCP/IP Controller Plugin.Transmitter pool thread <Regular:2>.CybTargetHandlerChannelLogHelper.logConnectionClose[:133] - Conversation with C7STA closed
08/22/2018 02:51:21.761 EDT-0400 5 TCP/IP Controller Plugin.Transmitter pool thread <Regular:1>.CybTargetHandlerChannel.call[:666] - Attempting to send: 20180822 02512176+0400 C7STA PLINUX03 ALOECPC7.N01745/LO.S00002D182340242/MAIN State COMPLETE Cmpc(0) SetEnd User(PLINUX03) Host(localhost)
08/22/2018 02:51:21.771 EDT-0400 2 TCP/IP Controller Plugin.Transmitter pool thread <Regular:1>.CybTargetHandlerChannel.call[:695] - Message has been sent: 20180822 02512176+0400 C7STA PLINUX03 ALOECPC7.N01745/LO.S00002D182340242/MAIN State COMPLETE Cmpc(0) SetEnd User(PLINUX03) Host(localhost)
我试图从包含 "Message has been sent":
的第一行和第四行中提取以下五个字段
- 时间戳:20180822 02500636+0400、20180822 02512176+0400
- 工作名称:ALOPMTA2、ALOECPC7
- 职位编号:01834,1745
- 用户:用户(PLINUX03)、用户(PLINUX03)
- 状态:主要状态 EXEC SetStart,主要状态完成
我能够使用以下表达式过滤包含 "Message has been sent:" 的行,但不确定从该行中提取 5 个字段:
^.*\b(Message has been sent:.)\b.*$
有人可以帮忙吗?这是为了在 Splunk 上提取。谢谢!
我建议你这个正则表达式:
Message has been sent: (?<timestamp>\d{8}\s\d{8}\+\d{4})\s\w+\s\w+\s(?<jobname>\w+)\.N(?<jobnumber>\d+)\/[^\/]+\/(?<statuses>(\w+\s)+)\w+\(.+User\((?<user>\w+)\)
- Group 'timestamp'
(\d{8}\s\d{8}\+\d{4})
: 匹配时间戳
- 组 'jobname'
\s(\w+)\.N
: 匹配职位名称
- 组 'jobnumber'
\.N(\d+)\/
: 匹配职位编号
- 组 'statuses'
((\w+\s)+)
: 匹配状态
- 组 'user'
User\((\w+)\)
: 匹配用户
您可以在此处查看包含您提供的数据的示例:https://regex101.com/r/G6GD46/4
请毫不犹豫地尝试这个示例以获得您需要的结果。
如果您需要这些正则表达式的更多解释,请告诉我。
编辑: 按照@RichG 在评论中的建议,我添加了命名组以允许 Splunk 将组提取为变量。
以下是示例日志文件数据:
08/22/2018 02:50:06.380 EDT-0400 2 TCP/IP Controller Plugin.Transmitter pool thread <Regular:2>.CybTargetHandlerChannel.call[:695] - Message has been sent: 20180822 02500636+0400 C7STA PLINUX03 ALOPMTA2.N01834/LO.S00001D182340248/MAIN State EXEC SetStart Status(Executing at PLINUX03) Jobno(34523) ChildPid(34527) User(PLINUX03) Host(localhost)
08/22/2018 02:50:06.382 EDT-0400 5 TCP/IP Controller Plugin.Transmitter pool thread <Regular:2>.CybTargetHandlerChannelLogHelper.logConnectionClose[:133] - Conversation with C7STA closed
08/22/2018 02:51:21.761 EDT-0400 5 TCP/IP Controller Plugin.Transmitter pool thread <Regular:1>.CybTargetHandlerChannel.call[:666] - Attempting to send: 20180822 02512176+0400 C7STA PLINUX03 ALOECPC7.N01745/LO.S00002D182340242/MAIN State COMPLETE Cmpc(0) SetEnd User(PLINUX03) Host(localhost)
08/22/2018 02:51:21.771 EDT-0400 2 TCP/IP Controller Plugin.Transmitter pool thread <Regular:1>.CybTargetHandlerChannel.call[:695] - Message has been sent: 20180822 02512176+0400 C7STA PLINUX03 ALOECPC7.N01745/LO.S00002D182340242/MAIN State COMPLETE Cmpc(0) SetEnd User(PLINUX03) Host(localhost)
我试图从包含 "Message has been sent":
的第一行和第四行中提取以下五个字段- 时间戳:20180822 02500636+0400、20180822 02512176+0400
- 工作名称:ALOPMTA2、ALOECPC7
- 职位编号:01834,1745
- 用户:用户(PLINUX03)、用户(PLINUX03)
- 状态:主要状态 EXEC SetStart,主要状态完成
我能够使用以下表达式过滤包含 "Message has been sent:" 的行,但不确定从该行中提取 5 个字段:
^.*\b(Message has been sent:.)\b.*$
有人可以帮忙吗?这是为了在 Splunk 上提取。谢谢!
我建议你这个正则表达式:
Message has been sent: (?<timestamp>\d{8}\s\d{8}\+\d{4})\s\w+\s\w+\s(?<jobname>\w+)\.N(?<jobnumber>\d+)\/[^\/]+\/(?<statuses>(\w+\s)+)\w+\(.+User\((?<user>\w+)\)
- Group 'timestamp'
(\d{8}\s\d{8}\+\d{4})
: 匹配时间戳 - 组 'jobname'
\s(\w+)\.N
: 匹配职位名称 - 组 'jobnumber'
\.N(\d+)\/
: 匹配职位编号 - 组 'statuses'
((\w+\s)+)
: 匹配状态 - 组 'user'
User\((\w+)\)
: 匹配用户
您可以在此处查看包含您提供的数据的示例:https://regex101.com/r/G6GD46/4
请毫不犹豫地尝试这个示例以获得您需要的结果。
如果您需要这些正则表达式的更多解释,请告诉我。
编辑: 按照@RichG 在评论中的建议,我添加了命名组以允许 Splunk 将组提取为变量。