Splunk

Splunk Enterprise 知识对象手册学习笔记

一、前言

今天去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.使用字段提取器

使用字段提取器构建字段提取
字段提取概述
07a3
访问字段提取器

  • 字段边栏底部访问字段提取器
    07a4

  • 从全部字段对话框访问字段提取器
    07a5
    07a6

  • 从特定事件访问字段提取器物
    07a7

  • 从设置的字段提取页面访问字段提取器
    设置-字段-字段提取

  • 从splunk主页添加数据选项右下方的提取字段链接访问字段提取器
    注意:该方式只针对有管理员权限的用户
    07a8


选择示例步骤
选择数据类型和示例事件
这里假设我们是从splunk主页上添加数据右下角的提取字段链接访问字段提取器
1、07a9
2、07a10


选择方法
1、选择合适的字段提取方法
一般来说,非结构化数据选择正则表达式(比如系统日志),结构化数据选择分隔符(比如csv文件和数据库表)
如果选择正则表达式
07a12
下一步会是
07a13
如果选择分隔符
07a14
下一步会是
07a15


选择字段
确定一个或多个值
07a16
同理我们再确定一个status字段
07a17
预览提取结果
07a19
从上图中你可以通过切换到匹配视图来移除不匹配的事件
我们也可以单击字段选项卡查看字段值统计分布
07a18
添加示例事件扩大正则表达式范围
当在示例事件中选择字段集时,发现带有这些字段的事件并不匹配,当字段提取器匹配了了与示例类似的事件,但是错过了模式略有不同的其他事件的时候,这种情况就会发生,那么如何解决这种情况?
将错过的事件之一添加为补充示例事件来生成涵盖两种事件模式的正则表达式,下面是一个例子:
07a20

确定必填文本新建与特定事件模式匹配的提取
当一个来源类型包含不同种类的事件,同样的字段或想提取的字段,这个时候去设计一个单一的能匹配多个事件模式的字段提取是困难的,这时候我们根据需要对特定的事件模式去来定义不同字段提取
07a20
上图可以看到只有包含了必填文本且符合正则表达式的事件才会突出显示提取的字段值

手动编辑正则表达式
也可以根据需要手动编辑正则表达式
0722


重命名字段
该步骤基于分隔符字段提取
确定分隔符或重命名一个或者多个字段
0723
0724
单击想要重命名的字段
0725
预览提取字段的结果
0726


验证
验证这一步只基于使用正则表达式提取字段的方法
有时候我们提取的字段值不正确,这个时候会出现下图的情况
08a21
字段提取器在表上方显示反例事件,并用红色删除线标记不正确的值,同时也会更新正则表达式和预览结果
保存
08a22
这里注意权限设置
所有者表示只有创建该字段提取的用户有读写权限
应用表示只有该字段提取所属应用的用户使用
所有应用表示所有应用的所有用户均能使用
应用和所有应用可以根据角色来设置用户的读写权限

2.3.使用字段提取器设置页面

使用字段提取页面
检查搜索时间字段提取
设置-字段-字段提取-新增
08a28
字段提取只在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>[^:]+)  

08a29
从字标记新建字段

更新现有字段提取
设置-字段提取-字段提取名称
更新字段提取权限
如果字段提取是通过内联提取的方式提取的,那么最开始只有新建者可以使用,如果想要应用的其他用户或者其他引用的所有用户也能够使用,那么就需要权限修改
删除字段提取
这个操作要慎重,因为字段提取可能是某个事件类型的基础,那么将该提取删除会导致对其他知识对象产生负面影响


使用字段转换页面
转换字段提取使用场景
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可以管理搜索时间的字段提取,但是不能配置自动键值字段提取
字段提取类型
08a30
提取场景
08a31


配置内联提取
内联提取和搜索时间操作顺序
内联字段提取位于搜索时间操作顺序的最开始,这就决定了它无法引用其他搜索事件操作派生或添加的字段 配置内联搜索时间字段提取
编辑目录$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

转换字段提取配置示例

支付宝扫码打赏 微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章

linuxwt's Picture
linuxwt

我叫王腾,来自武汉,2016年毕业后在上海做了一年helpdesk,自学了linux后回武汉从事系统运维的工作,从2017年开始写博客记录自己的学习工作,现在正在进行数据迁移到此博客,目前就职于北京神州新桥科技有限公司,个人的座右铭是:逃脱舒适区才能在闲暇的时候惬意的玩耍。

武汉光谷 https://linuxwt.com

Subscribe to 今晚打老虎

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!

Comments