Splunk二次开发使用Python 编写自定义搜索命令

前言

本文的目标是让读者对Splunk编写自定义搜索命令有个基本的概念,并不是详尽的开发指南。

自定义搜索命令简介

Splunk Spl语言是将Splunk的一系列搜索命令组织成数据处理的管道,如下图所示,提供了140多种搜索命令,基本覆盖了日常对数据处理的各种场景。其中search命令是SPL语言的默认命令,可以不明确的写在语句中。

 

 

但是在日常使用的过程中,有很多特殊的应用场景中,我们需要根据业务逻辑对数据进行处理,那么就需要一种机制,能够灵活的添加新的命令,满足业务需求,如下图所示,GOCRAZY命令就是我们编写的自定义搜索命令。

 

自定义搜索命令的执行原理

SPL的执行过程

  1. 将SPL查询语句分解为命令

  1. 分析语句中是否存在自定义搜索命令

  1. 获取外部资源路径

  1. 外部进程解析自定义命令参数

  1. 使用外部命令处理数据

自定义搜索命令的抽象概念

能够编写新的搜索命令,扩展SPL语言,实现新的数据分析。

能够使我们对搜索结果进行处理,例如接收csv结构的数据,进过处理之后,输出csv格式的数据。

实现为外部进程(一个我们编写的程序),最典型的是编写python脚本。

自定义搜索命令的底层细节

Splunkd和外部进程的交互协议

因为自定义搜索命令运行在外部进程中,所以splunkd需要与外部进程之间进行交互,splunk定义了两种交互协议:

  1. 协议V1,历史遗留协议,始于Splunk3.0开始,主要被InterSplunk.py使用。

    当搜索结果中的数据量非常大的时候,需要拆分成一批一批的被自定义命令处理。协议V1会对每一批数据启动一次外部进程,效率较低。

    转换命令(事件命令、报表命令)的事件上限是50,000。"Transforming" commands limited to 50,000 events

  2. 协议V2,始于Splunk6.3版本中添加的新协议,主要在Python SDK中使用。

    两种协议都是用std in/std out进行交互。

    协议V2只启动外部进行一次,每一批数据会一次发送给外部进程进行处理,只需要在commands.conf中设置chunked=true即可。

    可以支持非python平台开发的程序作为自定义命令。

功能对比

 

协议

API

性能

扩展性

简单配置(配chunk=true)

是否支持其他编程语言实现

编程语言

V1

Intersplunk.py,

Python SDK

Python

V2

Python SDK

支持

Python,
任意实现了协议的二进制程序

 

性能对比

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值