Splunk简介
Splunk是一个广泛用于信息分析的一个软件,功能非常强大,并且提供了非常好的二次开发体验,总的来说Splunk支持两种二次开发,一种是关于统计分析内容的,splunk提供多种多样的数据可视化的功能,开发人员只要简单的编写符合splunk标准的xml文件或者Django的文件就可以轻松实现多种多样的数据分析和显示;另外一种是关于数据导入的,虽然splunk提供了众多的导入方式,但是并不是所有的都能覆盖到,所以用户可以根据自己的数据结构来开发plugin,来导入特定的信息类型,比如IPFIX。本文就简述如何开发一个splunk plugin。
Splunk SDK
Splunk 提供了多种语言的SDK,本文我们以Python为例,猛击这里下载Python SDK
建立自己的splunk plugin
Splunk SDK 提供三种主要的功能
- 设置plugin需要接受的参数, 这部分参数会在你配置你的plugin的时候在splunk页面上显示出来
- 验证参数, 确保你设置的参数有效.
- 发送数据流.
下面是一个plugin的框架, 你必须继承于splunk提供的Script类, 并且实现三个函数: get_scheme
, validate_input
, stream_events
|
|
好, 这就是最基本的plugin的框架, 下面我们来具体实现它, 我们将建立一个plugin来监听UDP端口, 来转发到Splunk server, 你可能要说Splunk不是已经提供了一个UDP类型的输入么, 当然, 我们这里只是以此为例, 因为很多UDP的数据都是自定义的, 所以Splunk自带的UDP未必能够满足你的需求, 所以还是可能需要自己开发.
UDP receiver例子
我把各个部分的解释放到了注释中。
|
|
stream_events方法中包含两个参数,一个是input,一个是ew, 从input中可以获取我们设置的参数,ew是eventWriter,是splunk sdk内置的一个类,用来发送数据,同时也具备log功能。
添加log
Splunk具有log的功能,在sdk也提供了写入系统log的功能,我们可以通过这样的语句来发送一个log ew.log(EventWriter.ERROR,"OUTPUT STRING:"+str(outstr))
除了ERROR我们还有几种log level
- ERROR
- WARNING
- INFO
- DEBUG
现在的DEBUG level的log似乎会有问题,不知道原因,所以慎用。log最终被写入splunkd.log文件中,实际上splunk sdk的log是对标准输出和标准错误输出进行了重新定向。
生成安装包
在生成之前先建立自己的目录结构
|
|
需要把splunklib目录拷贝到$SPLUNK_HOME/etc/apps/<app_name>/bin
, 然后根据需要建立app.conf和inputs.conf.spec.
Splunk的安装包是spl格式,但实际上就是个tar.gz格式,所以可以直接打包
|
|
之后我们就可以在splunk上直接安装啦。
参考文档
联系方式
Matthew Gao, matthewgao[at]gmail.com