我正在尝试匹配此提取的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,但通常不包含任意数量的连字符。
答案 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