正则表达式匹配此字符串的主机名是什么?

时间:2012-07-27 00:54:09

标签: regex snmp splunk

我正在尝试匹配此提取的SNMP数据包中的主机名

2012-07-27 12:16:03 SUP-V5-ISA-1 [10.165.26.10] (via UDP: [10.165.26.10]:61151->[0.0.0.0]:0) TRAP, SNMP v1, community public
ISAMANAGER-MIB::isaManager Enterprise Specific Trap (ISAMANAGER-MIB::clipModified) Uptime: 1:22:15.08
ISAMANAGER-MIB::vClipId = INTEGER: 42059

SUP-V5-ISA-1是主机名,在这个例子中不常见的是它不是FQDN(它取决于它来自的系统)

我正在尝试将它提供给splunk,但我不能为我的生活找到我如何选择第三个单词,而不是将连字符视为单词边界。 我每次都能选择第3个'单词','27'和SUP,但永远不会抓住整个'单词'

它始终跟随时间戳,并且在方括号中始终跟有IP,但通常不包含任意数量的连字符。

3 个答案:

答案 0 :(得分:0)

使用正则表达式^\S+\s+\S+\s+(\S+)并使用第一个捕获组作为结果

答案 1 :(得分:0)

使用字段拆分而不是正则表达式

正则表达式并不总是最佳解决方案。如果您可以将日志记录拆分为字段,则此问题有一个简单的解决方案,因为获取记录的第三个字段要比创建防弹正则表达式容易得多。

我不熟悉Splunk,但请考虑以下说明性示例。假设您的日志记录存储在记录变量中:

# Field-splitting with awk.
hostname=$(echo "$record" | awk '{print $3}')

# Field-splitting with cut.
hostname=$(echo "$record" | cut -d' ' -f3)

在这两种情况下, hostname 都设置为SUP-V5-ISA-1,方法是将记录解析为字段,并提取第三个字段的值。对于这个特定的用例来说,这似乎是一种更可靠的方法,假设您的框架允许您执行类似的操作。

答案 2 :(得分:0)

在Splunk中,您可以通过从日志事件中提取字段来在索引​​时转换主机名。

要执行此操作,您需要在$ SPLUNK_HOME / etc / apps / yourapp / local

中添加2个文件

替换 yourapp yoursourcetype 以适应您的环境。

<强> props.conf

[yoursourcetype]
TRANFORMS-h1=set-host-name
SHOULD_LINEMERGE=false

<强> transforms.conf

[set-host-name]
DEST_KEY = MetaData:Host
REGEX =^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s((?:\w|-)+)\s\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\].+$
FORMAT = host::$1