一、前言
今天去splunk power 认证失败,一共65道题没做完,主要考的是知识对象管理这一部分,最开始看英文版的,现在再从中文版再看一次,对照学习,争取下一次考过
二、开始
2.1.字段和字段提取
关于字段
自动提取字段
在给传入的数据新建索引的时候,会自动提取host、source、sourcetype、时间戳和若干其他的默认字段,也会提取事件数据中以key=value对形式显示的字段,这成为字段发现,通过禁用字段发现可以改进搜索性能,当无key时,splunk会通过正则表达式模式匹配规则来提取
为获取数据中的所有字段,新建自定义字段提取
所有的字段提取包括自定义字段提取,均需要与特定的source、sourcetype或host关联,自定义字段提取应该在搜索时间发生,极少数情况下可以安排一些自定义字段提取在索引时间
在新建自定义字段提取前,需要进行事件样式检查
要对事件数据的格式和模式进行检查,当事件具有一致可靠格式,可以新建一个能准确从中捕获多个字段值的字段提取,但如果特定主机、来源类型或数据来源包含多个事件模式时,需要定义匹配每个模式的字段提取,而不是设计能单个适用所有模式的提取
字段提取中使用必填文本
必填文本减少了扫描的事件集,提高了字段提取效率和降低了假阳性字段提取的数目
自定义字段提取的方法
- 能生成字段提取正则表达式的字段提取实用工具来提取
字段提取器分为正则表达式提取和分隔符提取,字段提取器只能构建数据中特定数据来源和来源类型(host不行)关联的搜索时间的字段提取 - 字段设置页面
在多个数据来源、来源类型或主机间重复使用相同的正则表达式;对同一个数据来源、来源类型或主机应用多个正则表达式;使用正则表达式从其他字段中提取字段,字段提取和字段转换页面之定义搜索时间字段提取 - 配置文件添加字段提取配置
只能通过在props.conf和transforms.conf中配置索引时间字段提取方式来新建此类提取,向默认索引字段集中添加字段提取会导致搜索性能和索引问题
使用默认字段
内部字段
以下划线开头的字段为内部字段
_raw 该字段包含事件的原始数据,你无法直接对其值进行搜索,需要使用regex或sort来筛选
eventtype=sendmail | regex _raw=*10.\d\d\d\.\d\d\d\.\d\d\d\*
_time Unix时间表示的时间戳
sourcetype=mail to=wangteng@sino-bridge.com | sort _time
_indextime 使用此字段可以筛选出特定时间范围内新建索引的事件,这是一个隐藏字段,不会在搜索结果中显示,如果要显示,可以重命名或者与eval结合使用
_cd 为索引内的事件提供精确地址,这也是一个隐藏字段
_bkt 包含了存储事件的数据统ID,这也是一个隐藏字段
默认字段
host 事件的原始设备的主机名或IP地址,可以使用通配符来匹配多个主机
host=corp* eventtype=access user=wangteng | head 20
404 | regex host=*192.\d\d\d\.\d\d\d\.\d\d\d\*
index 给事件新建索引的索引名称,默认情况所有事件的索引都将在main索引中新建
index="myweb" *.php
linecount 事件包含的行数
40 linecount=40 host=corp 404
punct 从事件中提取标点符号模式,每一种事件类型的标点符号模式唯一
punct=":*:"
source 事件来源的文件
source="/var/log/secure"
sourcetype 指定数据来源的数据导入格式
sourcetype=access_combined
splunk_server 事件所属的splunk服务器名称,在分布式搜索中很有用
splunk_server=yumserver3 index=main 404
timestamp 包含事件的时间戳,可以通过搜索中添加timestamp=none来筛选出没有可识别时间戳的事件
timestamp=none | stats count(_raw) as count
splunk提取字段时
索引时间的字段提取
对每一个事件提取默认字段,比如host、source、sourcetype
搜索时间的字段提取
如果启用字段发现
- splunk提取默认前50个字段提取,该数字可以通过修改limit.conf中kv值来改变
- 提取搜索中明确指出的所有字段,它会通过自动提取找到这些字段,但不在前50个字段范围内
- 通过字段提取器、设置中的提取字段页面、配置文件编辑或rex等搜索命令执行自定义字段提取
如果禁用字段发现
- splunk提取搜索中明确指出的字段
- 默认字段和索引字段
- CAN_OPTIMIZE设置为true(transforms.conf)的所有自定义字段
除此之外,只有在以下情况才会提取除了默认字段和搜索中明确指出的字段以外的字段
- 智能模式下运行非转换搜索
- 详细模式下运行任何搜索
带字段提取的正则表达式
正则表达式命名规则
- 包括数字、字母、.、:或_
- 不能以数字或_开头
2.2.使用字段提取器
使用字段提取器构建字段提取
字段提取概述
访问字段提取器
-
字段边栏底部访问字段提取器
-
从全部字段对话框访问字段提取器
-
从特定事件访问字段提取器物
-
从设置的字段提取页面访问字段提取器
设置-字段-字段提取 -
从splunk主页添加数据选项右下方的提取字段链接访问字段提取器
注意:该方式只针对有管理员权限的用户
选择示例步骤
选择数据类型和示例事件
这里假设我们是从splunk主页上添加数据右下角的提取字段链接访问字段提取器
1、
2、
选择方法
1、选择合适的字段提取方法
一般来说,非结构化数据选择正则表达式(比如系统日志),结构化数据选择分隔符(比如csv文件和数据库表)
如果选择正则表达式
下一步会是
如果选择分隔符
下一步会是
选择字段
确定一个或多个值
同理我们再确定一个status字段
预览提取结果
从上图中你可以通过切换到匹配视图来移除不匹配的事件
我们也可以单击字段选项卡查看字段值统计分布
添加示例事件扩大正则表达式范围
当在示例事件中选择字段集时,发现带有这些字段的事件并不匹配,当字段提取器匹配了了与示例类似的事件,但是错过了模式略有不同的其他事件的时候,这种情况就会发生,那么如何解决这种情况?
将错过的事件之一添加为补充示例事件来生成涵盖两种事件模式的正则表达式,下面是一个例子:
确定必填文本新建与特定事件模式匹配的提取
当一个来源类型包含不同种类的事件,同样的字段或想提取的字段,这个时候去设计一个单一的能匹配多个事件模式的字段提取是困难的,这时候我们根据需要对特定的事件模式去来定义不同字段提取
上图可以看到只有包含了必填文本且符合正则表达式的事件才会突出显示提取的字段值
手动编辑正则表达式
也可以根据需要手动编辑正则表达式
重命名字段
该步骤基于分隔符字段提取
确定分隔符或重命名一个或者多个字段
单击想要重命名的字段
预览提取字段的结果
验证
验证这一步只基于使用正则表达式提取字段的方法
有时候我们提取的字段值不正确,这个时候会出现下图的情况
字段提取器在表上方显示反例事件,并用红色删除线标记不正确的值,同时也会更新正则表达式和预览结果
保存
这里注意权限设置
所有者表示只有创建该字段提取的用户有读写权限
应用表示只有该字段提取所属应用的用户使用
所有应用表示所有应用的所有用户均能使用
应用和所有应用可以根据角色来设置用户的读写权限
2.3.使用字段提取器设置页面
使用字段提取页面
检查搜索时间字段提取
设置-字段-字段提取-新增
字段提取只在props.conf中定义,该类提取始终与正则表达式相关连,故可以直接编辑props.conf来提取字段提取有两类:内联和transforms.conf,内联提取完全在props.conf中定义,不引用外部字段转换,而转换提取引用transforms.con中的字段转换。
内联字段提取的好处是可以将字段提取应用到多个来源类型;字段转换的好处是可以对相同的数据来源、来源类型和主机应用多个字段提取正则表达式
下面是一个字段转换的例子,在props.conf中
[access_combined]
REPORT-access = access_extractions,ip-extractions
添加新的字段提取
添加错误代码字段
编辑props.conf
[testlog]
EXTRACTION-errors = deviced_id=\[w+\](?<err_code>[^:]+)
从字标记新建字段
略
更新现有字段提取
设置-字段提取-字段提取名称
更新字段提取权限
如果字段提取是通过内联提取的方式提取的,那么最开始只有新建者可以使用,如果想要应用的其他用户或者其他引用的所有用户也能够使用,那么就需要权限修改
删除字段提取
这个操作要慎重,因为字段提取可能是某个事件类型的基础,那么将该提取删除会导致对其他知识对象产生负面影响
使用字段转换页面
转换字段提取使用场景
1、多个数据来源、来源类型或主机之间重复使用相同的字段提取表达式
2、同一个数据来源、来源类型或主机应用多个字段提取正则表达式
3、使用正则表达式从其他字段值中提取的字段
索引时间字段提取是无法通过web界面的来实现的,必须通过配置文件props.conf和transform.conf来实现
查看更新搜索时间字段转换
我们需要了解如何在配置文件props.conf和transform.conf中配置字段提取的
下面是一个字段转换的例子
cat transforms.conf
[banner]
REGEX = /js/(?<license_type>[^/]*)/(?<version>[^/]*)/login/(?<login>[^/]*)
SOURCE_KEY= uri
cat props.conf
[source::.../banner_access_log*]
REPORT-banner = banner
新建字段转换
设置-字段-字段转换
这里强调以下SOURCE_KEY,默认为_raw,表示应用于整个事件
2.4.使用配置文件配置字段提取
搜索时间配置自定义字段
通过splunk web可以管理搜索时间的字段提取,但是不能配置自动键值字段提取
字段提取类型
提取场景
配置内联提取
内联提取和搜索时间操作顺序
内联字段提取位于搜索时间操作顺序的最开始,这就决定了它无法引用其他搜索事件操作派生或添加的字段 配置内联搜索时间字段提取
编辑目录$SPLUNK_HOME/etc/system/local或者自定义应用目录$SPLUNK_HOME/etc/apps下的props.conf,在该配置文件中按EXTRACT字段的提取类型的格式配置包含事件的主机、数据来源、来源类型和所配置的正则表达式的字段提取段落,如果您的字段是一个字标记,还需要在fields.conf中添加一个条目,最后重启splunk
语法:
EXTRACT-class = regex expression
字段转换配置高级提取
转换提取由两部分组成:transforms.conf中字段转换配置和props.conf中的REPORT-class字段提取配置。转换提取中,正则表达式位于transforms.conf,字段提取位于props.conf,可以将一个正则表达式应用于多个字段提取配置或在一个字段提取配置中有多个正则表达式
转换提取和搜索时间操作顺序
提取转换是在搜索时间操作顺序中排第二,并在内联字段提取之后处理
配置转换提取
转换提取使用props.conf中的REPORT提取配置,每个REPORT提取段落都引用一个字段转换,该转换在transforms.conf中定义
字段转换语法
略
引用了转换的字段提取配置方法
REPORT-class = uniq transform_stanza_name1,...
配置自动键值提取
自动键值提取是一种搜索时间字段提取配置,使用KV_MODE属性自动与特定主机、数据来源、来源类型相关的事件提取字段 ,自动键值提取是非显示的,无法配置该提取来查找特定字段或字段组,此类提取查找的是事件中的键值模式,然后将它们提取为字段/值对。此字段提取不能在splunk web中配置,也不能用于索引时间提取
键值字段自动提取和搜索操作顺序
自动键值字段提取是搜索操作中的第三位,在字段别名之前,转换提取之后
自动键值字段提取格式
KV_MODE = [none|auto|auto_escaped|multi|json|xml]
当KV_MODE设置为auto或auto_escaped时,自动JSON字段提取可能会与其他自动键/值字段提取一起运行,如果想禁用JSON字段提取但是又不想更改当前KV_MODE的设置值auto,则可以添加AUTO_KV_MODE=false
禁用特定数据来源、来源类型或主机的自动提取
cat <<EOF>> props.conf
[<spec>]
KV_MODE = none
EOF
host::
source::
内联字段提取示例
错误代码字段提取示例
[testlog]
EXTRACT-errors = device-id=\[w+\] (?<err_code>[^:]+)
使用正则表达式提取多个字段
有事件:#%LINEPROTO-5-UPDOWN: Line protocol on interface GigabitEthernet9/16,changed state to down
在props.conf中添加如下配置
[syslog]
EXTRACT-port_flapping = Interface\s(?<interface>(?<media>[^\d]+) (?<slot>\d+)\/(?<port>\d+))\,\schanged\sstate\sto\s(?<port_status>up|down)
上面提取了五个字段interface、media、slot、port、port_status
使用已提取的字段报告端口不断开关事件
1、使用标记在eventtypes.conf中定义事件类型
[cisco_ios_port_down]
search = "changed state to down"
[cisco_ios_port_up]
search = "changed state to up"
2、在savedsearches.conf中新建报表来将大部分事件类型结合在一起
[port flapping]
search = eventtype=cisco_ios_port_down OR eventtype=cisco_ios_port_up starthoursago=3 | stats count by interface,host,port_status | sort -count
转换字段提取配置示例