【入门第3课】Splunk字段提取

前言

Splunk 是一款功能强大的搜索和分析引擎,而字段是splunk搜索的基础,提取出有效的字段就很重要。

当Spklunk开始执行搜索时,会查找数据中的字段。与预定义提取指定字段不同,Splunk可以通过用户自定义从原始数据中动态提取字段。

一、字段提取器

1.1 访问字段提取器

执行事件搜索,左边栏往下,单击提取新字段,进入字段提取器。

1.2 选择示例

在事件列表中,选择一个需要进行字段提取的示例事件。

1.3 选择方法

提供了两种字段提取的方法:正则表达式分隔符。正则表达式主要用于非结构化数据;而基于表格的结构化数据,使用分隔符即可。

1.4 选择字段

选择需要字段提取的值,下面会出现对话框,对字段名称进行命名。一般我们也可手动编辑正则表达式进行调整。

1.5 验证

通过预览,以确认事件列表的匹配程序,从下图看到,第一次的选择字段还是有部分字段无法识别,那么我们可以进行第二次的字段提取

1.6 保存

在这一步,可以对提取名称和权限进行设置,点击完成来保存提取。

然后可以获取正则表达式

^\w+\s+\w+\s+\d+\s+\d+\s+\d+:\d+:\d+\s+\w+\d+\s+\w+\[\d+\]:\s+\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(?P<user>\w+) from (?P<ip>[^ ]+)

1.7 提取字段的例子

了解一下Linux secure日志中比较常见的登录日志,如下两条登录记录作为示例:

#失败登录
Thu Nov 05 2023 13:02:24 mailsv1 sshd[5276]: Failed password for invalid user appserver from 194.8.74.23 port 3351 ssh2
#成功登录
Thu Nov 05 2023 13:02:24 mailsv1 sshd[74181]: Accepted password for nsharpe from 10.2.10.163 port 4245 ssh2
#invalid user 登录
Thu Nov 05 2023 13:02:24 mailsv1 sshd[5276]: Failed password for invalid user appserver from 194.8.74.23 port 3351 ssh2

先做第一次的字段提取工作,我们针对1、2条进行提取,基本上他们的格式一致,提取后我们进行保存

但是“invalid user”则不能成功识别,需要针对它进行第二次的提取工作,都是提取相同的字段,保存

最后完成提取的结果如下:关于用户账号登录成功/失败的日志字段均能成功识别

最后可以在search上面验证一个字段识别的情况。

二 新字段提取

在Splunk Web中,提供了一种快速设置字段提取的方式,只需提供正则表达式,就可以直接完成新字段提取

2.1 新字段提取

(1)设置→ 字段提取→新字段提取

设置名称、sourcetype,写入正则表达式,点击保存即可。

2.2 查看字段提取规则

在字段提取页面中,搜索关键词,可找到刚才设置的字段提取规则。

三、使用搜索命令提取字段

通过搜索命令以不同方式提取字段,如rex、extract、xpath等。但这种方式仅适用于搜索过程中的返回的中间结果,无法新建字段重复使用。

sourcetype="secure-2" port  "failed password"
| rex field=_raw "(?P<user>\w+)\sfrom\s(?P<ip>[^ ]+)"
| table user,ip

<think>我们正在讨论Splunk中的正则表达式字段提取。根据引用,特别是引用[1]和引用[2],我们知道在Splunk中可以使用`rex`命令通过正则表达式提取字段。基本语法是:`rex[field=<field>](<regex-expression>[max_match=<int>][offset_field=<string>])`或者使用sed模式:`rex(mode=sed<sed-expression>)`目标:从事件数据中提取字段。例如,从原始事件(_raw)中提取用户名和IP地址(如引用[2]的例子):sourcetype="secure-2"port"failedpassword"|rexfield=_raw"(?P<user>\w+)\sfrom\s(?P<ip>[^]+)"|tableuser,ip另一个例子(引用[3]):从包含URL的字段提取IP地址:source="xxx.csv"|rexfield=input"http://(?<ip>\d+\.\d+\.\d+\.\d+)"|fieldsip|statscountbyip引用[4]展示了更复杂的场景,使用了多个`rex`命令和`max_match=0`(表示匹配所有出现)来提取多个字段。它还提到处理字段值中包含双引号等特殊情况。因此,步骤总结如下:1.确定要从中提取字段的原始字段(通常是`_raw`,也可以是其他字段使用`field`参数指定)。2.编写正则表达式,使用命名捕获组(`?P<字段名>正则表达式`)来定义要提取字段3.可选参数:`max_match`指定最大匹配次数(0表示所有匹配),`offset_field`指定存储匹配位置偏移量的字段。4.如果需要对字段内容进行替换,可以使用`mode=sed`的模式。注意:这种方式提取字段仅存在于当前搜索中,不会永久保存。如果需要重复使用,可能需要配置字段提取(通过配置文件或界面)。现在,根据用户的问题“如何在Splunk中通过正则表达式提取字段”,我们给出清晰的步骤和示例。同时,生成相关问题。</think>### 如何在 Splunk使用正则表达式提取字段Splunk 中,通过 `rex` 命令使用正则表达式提取字段的操作流程如下: #### **1. 基础语法** ```sql rex [field=<源字段>] "<正则表达式>" [max_match=<匹配次数>] ``` - **`field`**:指定源字段(默认 `_raw`) - **正则表达式**:必须包含命名捕获组 `(?P<字段名>规则)` - **`max_match`**:匹配次数(0=所有匹配,默认1次) - **`offset_field`**:存储匹配位置的字段(可选) #### **2. 操作步骤** **步骤1:确定数据源** ```sql sourcetype="secure_logs" // 指定日志类型 ``` **步骤2:编写正则表达式** ▸ 提取用户名和IP(引用[2]示例): ```sql | rex "\(?P<user>\w+)\sfrom\s\(?P<ip>[^ ]+)" ``` ▸ 提取URL中的IP(引用[3]示例): ```sql | rex field=url "http://\(?P<ip>\d+\.\d+\.\d+\.\d+)" ``` **步骤3:处理复杂场景** ▸ 多字段提取(引用[4]示例): ```sql | rex max_match=0 "FIELD_A=\"\(?P<FIELD_A>[^\,]*)\"" | rex max_match=0 "FIELD_B=\"\(?P<FIELD_B>[^\,]*)\"" ``` ▸ 特殊字符处理: 当字段值含双引号时,通过相邻字段辅助定位(如引用[4]中的`FIELD_C`) **步骤4:结果展示** ```sql | table user, ip // 表格化展示提取字段 | stats count by ip // 统计IP出现次数 ``` #### **3. 注意事项** - **临时性**:`rex` 提取字段仅当前搜索有效(引用[2]) - **性能优化**: - 使用 `max_match=0` 匹配所有结果(引用[4]) - 避免过于复杂的正则表达式 - **特殊模式**: `mode=sed` 支持替换操作(引用[1]),如: ```sql | rex mode=sed "s/old_text/new_text/g" ``` #### **4. 完整示例** ```sql sourcetype="web_access" | rex "GET\shttp://\(?P<server_ip>\d+\.\d+\.\d+\.\d+)/" | stats count by server_ip ``` > 此查询从 web 访问日志中提取服务器 IP 并统计访问量 #### **5. 常见问题解决** - **匹配失败**:检查正则是否覆盖数据中的空格/特殊符号 - **部分字段缺失**:确认 `max_match` 是否覆盖所有匹配项 - **值截断**:使用 `[^\,]*` 避免逗号干扰(引用[4])
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只会Traceroute

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值