-1

我正在尝试匹配此提取的 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,但我一生都无法弄清楚如何选择第三个单词,而不是将连字符视为单词边界。我每次都能选择第三个“单词”,即“27”和 SUP,但从来没有抓住整个“单词”

它始终跟在时间戳之后,并且始终跟在方括号中的 IP 后面,但通常不包含那么多连字符。

4

3 回答 3

0

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

于 2012-07-27T01:40:11.350 回答
0

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

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

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

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

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

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

于 2012-07-27T07:36:55.353 回答
0

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

为此,您需要在 $SPLUNK_HOME/etc/apps/yourapp/local 中的 2 个文件中添加条目

替换yourappyoursourcetype以适应您的环境。

道具.conf

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

转换.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
于 2012-08-13T06:24:10.407 回答