Collectd Tail 插件正后视正则表达式
Collectd Tail plugin positive lookbehind regex
我正在尝试使用 collectd 的 "tail" 插件来匹配文件中的特定值。我在另一个 post 上看到该插件仅支持 POSIX ERE 语法。下面的示例文件:
[18/Jul/2018:23:54:26.388 +0000] SEARCH RESULT instanceName="asdf" threadID=10 conn=1 op=123 msgID=124 requesterIP="asdf" requesterDN="cn=Directory Manager,cn=Root DNs,cn=config" base="cn=System Information,cn=monitor" scope=0 filter="(objectClass=*)" attrs="instanceRoot" resultCode=0 resultCodeName="Success" qtime=1 etime=0.494 preAuthZUsedPrivileges="bypass-acl" entriesReturned=1
[18/Jul/2018:23:54:26.391 +0000] SEARCH RESULT instanceName="asdf" threadID=8 conn=1 op=124 msgID=125 requesterIP="asdf" requesterDN="cn=Directory Manager,cn=Root DNs,cn=config" base="cn=Servers,cn=admin data" scope=0 filter="(objectClass=*)" attrs="1.1" resultCode=32 resultCodeName="No Such Entry" message="Entry cn=Servers,cn=admin data specified as the search base DN does not exist" matchedDN="cn=admin data" qtime=0 etime=0.059 entriesReturned=0
我想找到每个 SEARCH 操作的 etime 编号。我想出的正则表达式似乎适用于在线正则表达式引擎,但似乎不适用于插件并且无法编译:
/(?<=\bSEARCH.*etime=)[+-]?([0-9]*[.])?[0-9]+/g
Compiling the regular expression "(?<=\bSEARCH.*etime=)[+-]?([0-9]*[.])?[0-9]+" failed.
我在这里错过了什么?
为什么不用这样的东西?
/ SEARCH .* etime=([0-9.]+) entriesReturned=[0-9]+$/
当然,这假定 etime=
和 entriesReturned=
始终排在最后。如果该假设是错误的,根据实际的日志条目语法,可能无法使用 POSIX 扩展正则表达式可靠地提取您正在寻找的值。
请注意,只有特定的 DSType
规范才实际使用匹配值。 GaugeInc
不会,但其他 CounterSet
或 GaugeSet
会。
我正在尝试使用 collectd 的 "tail" 插件来匹配文件中的特定值。我在另一个 post 上看到该插件仅支持 POSIX ERE 语法。下面的示例文件:
[18/Jul/2018:23:54:26.388 +0000] SEARCH RESULT instanceName="asdf" threadID=10 conn=1 op=123 msgID=124 requesterIP="asdf" requesterDN="cn=Directory Manager,cn=Root DNs,cn=config" base="cn=System Information,cn=monitor" scope=0 filter="(objectClass=*)" attrs="instanceRoot" resultCode=0 resultCodeName="Success" qtime=1 etime=0.494 preAuthZUsedPrivileges="bypass-acl" entriesReturned=1
[18/Jul/2018:23:54:26.391 +0000] SEARCH RESULT instanceName="asdf" threadID=8 conn=1 op=124 msgID=125 requesterIP="asdf" requesterDN="cn=Directory Manager,cn=Root DNs,cn=config" base="cn=Servers,cn=admin data" scope=0 filter="(objectClass=*)" attrs="1.1" resultCode=32 resultCodeName="No Such Entry" message="Entry cn=Servers,cn=admin data specified as the search base DN does not exist" matchedDN="cn=admin data" qtime=0 etime=0.059 entriesReturned=0
我想找到每个 SEARCH 操作的 etime 编号。我想出的正则表达式似乎适用于在线正则表达式引擎,但似乎不适用于插件并且无法编译:
/(?<=\bSEARCH.*etime=)[+-]?([0-9]*[.])?[0-9]+/g
Compiling the regular expression "(?<=\bSEARCH.*etime=)[+-]?([0-9]*[.])?[0-9]+" failed.
我在这里错过了什么?
为什么不用这样的东西?
/ SEARCH .* etime=([0-9.]+) entriesReturned=[0-9]+$/
当然,这假定 etime=
和 entriesReturned=
始终排在最后。如果该假设是错误的,根据实际的日志条目语法,可能无法使用 POSIX 扩展正则表达式可靠地提取您正在寻找的值。
请注意,只有特定的 DSType
规范才实际使用匹配值。 GaugeInc
不会,但其他 CounterSet
或 GaugeSet
会。