测试环境 setup
官方给出了 Splunk 的 docker image 我们可以通过它来创建本地测试环境 docker hub link。就两条命令,官方也给了很详细的命令解释,赞。
1 | docker pull splunk/splunk:latest |
PS: 如果需要测试 Splunk REST API, 还需要开放其端口 -p 8089:8089。登陆系统后 Settings -> Server settings -> General settings 查看端口映射
本地测试环境运行测试用例体验比公司的快很多,体验很好
创建测试数据
发现一个很有意思的函数,可以用它创建简单的测试数据,使用之前最好对照官方文档看看例子,新版有支持 format 为 json, csv 的数据,旧版不行
1 | # 创建 100 条数据只显示 5% < index < 95% |
最常用的 case - search with keyword
直接输入 keyword + enter
常用统计操作 stats
对整个数据集做统计,可以结合 average,count 和 sum 使用,支持 by 做分组
1 | # 创建 name-score 测试集 |
stats vs eventstats vs streamstats
stats: transforming command, 数据集会发生改变
eventstats: Dataset processing command, 需要所有 event 都找出来后才能工作
streamstats: streaming command, 针对每一个 event 做操作
1 | # 创建测试集 |
此外 streamstats count 还可以用来显示行号,很方便
1 | | makeresults count=10 |
eval
可以对每一行做计算,支持数学计算,字符串操作和布尔表达式
1 | # 生产 4 条数据并对 count 列做平方操纵 |
和 eventstats 的区别
总觉得 eval 和 eventstats 很相似,特意查了一下定义,还是有很明显的区别的。
eval 是针对每一行做计算,比如新增 field = field1 - field2
eventstats 突出以总体概念,可以做 by group 的操作,比如 sum(field1) by field2
Comparison and Conditional functions
case
match
nullif
searchmatch
validate
…
eval 配合条件函数使用可以衍生出很多效果
1 | # 根据 status 匹配 description 信息 |
rex 抽取特定的 field
splunk 支持字符串匹配,常用案例如下,需要注意的是,他只会从 _raw 中抽取信息
1 | | makeresults |
收集分散在多个 event 中的数据
有两种解决方案,一种是子查询,一种是 eventstats,两种方案对向能消耗都很大。
看到一个从多条分散的 event 中收集数据的例子,刚好是我现在需要的。核心思路是通过 eventstats 为每个 event 计算一个新的 field 做跳板
这里还有一个很神奇的语法,通过 values 统计出来的结果,在 if 条件中,我们可以直接通过使用 field=values 的语法达到类似 in 的效果。找了半天文档,没发现有这种个语法说明 (; ̄ェ ̄)
相似的还有一个 command 叫做 subsearch,通过自查询缩小范围,然后进一步查询
就我处理的案例来说,subsearch performance 要小很多,通过子查询可以很快的缩小处理范围
行转列 transpose
如果统计结果为
A | B | C |
---|---|---|
1 | 2 | 3 |
转化为饼图的时候,只会显示 A 类型的数据,因为 Splunk 默认使用 X 轴作为分类标的。这时可以使用 search cmd | transpose
达到行专列的效果
1 | | makeresults |
去重
1 | | makeresults count=4 |
使用 where 达到 filter 的效果
1 | | makeresults count=4 |
查询 event 的日均量
1 | eventtype="searchAccountLocked" | timechart span=1d count | stats avg(count) |
取整数
使用 ceil 和 round 分别达到向上和向下取整
1 | | makeresults |
更多计算函数,参考 math
显示时移除 fields
指定显示结果 search cmd | fields host, src
, 从结果集中 remove 某个 field search cmd | fields - host, src
复制 field
eval 和 rename 都能达到类似的效果,只不过 rename 之后原来的 field 不在了,eval 的话还在,相当于 copy
1 | search cmd |
Splunk SDK
尝试了 python 版本的 SDK,香!
参考 官方文档 下载依赖,在本地配置 .splunkrc
文件写入连接信息方便调用。第一次用的时候密码配错了,还以为内网不可用,需要用 vlab,再测试的时候发现了这个问题。总的来说很可以。
Steps:
- clone git 开源项目 Splunk SDK Python
- 用户目录下创建
.splunkrc
文件 - cd 到
splunk-sdk-python/examples
folder 下,运行命令python search.py "search * | head 10" --earliest_time="2011-08-10T17:15:00.000-07:00" --rf="desc" --output_mode=json
可以看到对应时间戳下的前 10 条记录
.splunkrc
文件模板
1 | # Splunk host (default: localhost) |
Splunk REST API
本地测试过了,但是产品上失败,可能公司用的 Splunk 有特殊限制
1 | # 创建搜索 job |
Splunk dashboard sample
官方制作了一个 dashboard 插件,里面有大量的精美 bashboard 案例 dashboard examples。需要注册账号,不过是免费的,下载完成后还会给出安装步骤。
- Log into Splunk Enterprise.
- On the Apps menu, click Manage Apps.
- Click Install app from file.
- In the Upload app window, click Choose File.
- Locate the .tar.gz file you just downloaded, and then click Open or Choose.
- Click Upload.
- Click Restart Splunk, and then confirm that you want to restart.
To install apps and add-ons directly into Splunk Enterprise
Put the downloaded file in the $SPLUNK_HOME/etc/apps directory.
Untar and ungzip your app or add-on, using a tool like tar -xvf (on *nix) or WinZip (on Windows).
Restart Splunk.
After you install a Splunk app, you will find it on Splunk Home. If you have questions or need more information, see Manage app and add-on objects.
三个小例子快速入门
搜索 event 并通过饼图展示
- 输入时间节点和关键词:
MessageBox topic=com.successfactors.usermanagement.event.UserChangeEvent | stats count by servername
- 选择可视化 tab
- 选择饼图
显示每天的 event 量
- 选择时间
- 输入搜索条件:
MessageBox topic=com.successfactors.usermanagement.event.UserChangeEvent | timechart count span=1d
- 选择图形
通过正则删选 event 并计算百分比
- 选择时间
- 输入删选条件:
MessageBox topic=com.successfactors.usermanagement.event.UserChangeEvent | stats count as total count(eval(match(field1, "companyId"))) as containsCID | eval CID_PCT=round(containsCID/total*100, 2)