splunk编写自定义命令

1. 自定义命令简介

splunk有丰富的内置搜索命令,但也提供了编写自定义命令来实现个性化的搜索需求,以此方式扩展splunk搜索处理语言(SPL)。

自定义搜索命令是一个可执行文件,可读入和写出数据,它可以是一个python脚本、C++程序或者其他可执行二进制文件,本教程考虑利用python编写自定义命令。

2. 自定义命令是如何运行的

搜索的处理方式是一次一个命令,前一个命令的结果会发送给下一个命令,当搜索到达自定义命令时,搜索会使用协议前一个命令的结果发送给单独的进程。这一单独的进程可以是内置进程,也可以是外部进程。

现在假设有如下SPL搜索语句,其中含自定义搜索命令testcmd,该命令接收1个关键参数args,但该脚本不做任何事情,只是接收数据而后原封不动的将数据返回给Splunk:

index="main" 
| table _time,count 
| testcmd args=count

其中 table 是splunk内置命令,该语句运行原理如下图所示:
在这里插入图片描述
testcmd为自定义命令,接收一个参数args,参数值为count字段,该命令会将count的值传递给python脚本进行处理,然后再返回到搜索结果中,进行后续的SPL处理。

3. splunk内置python环境

3.1 内置python位置

splunk自带pyhton环境,位于

$SPLUNK_HOME/bin/python

$SPLUNK_HOME 是splunk安装目录的环境变量

3.2 在后台使用内置的python:

$SPLUNK_HOME/bin/python
# 或者
$SPLUNK_HOME/bin/splunk cmd python

3.3 内置python版本

$SPLUNK_HOME/bin/python --version

3.4 内置python使用的包和库所在的位置

$SPLUNK_HOME/bin/python -c "import sys;print(sys.path)"

4. 开发所需要的SDK

splunk官方提供了python开发语言的官方sdk,splunk官方开发网站https://dev.splunk.com/enterprise/ ,该网站提供了splunk 开发的一些手册和sdk包,本次用到的python sdk下载地址为https://github.com/splunk/splunk-sdk-python/
在这里插入图片描述

4.1 SDK下载

点击 code 下载:
在这里插入图片描述
下载包为 splunk-app-examples-master.zip,解压后取出里面的 splunklib 文件夹,即为我们开发自定义命令所需要的。
在这里插入图片描述

4.2 sdk存放位置

因为是开发自定义命令,所以刚刚取出的splunklib文件夹将存放于Splunk服务器上。

为了方便,将splunklib放到自定义命令放在同一目录之下。其中{APP_NAME}为自己的APP名字,如果没有自己的APP,放在search默认APP的目录。

存放位置如下:

$SPLUNK_HOME/etc/apps/{APP_NAME}/bin/splunklib

5. 编写自定义命令python脚本

5.1 参考手册

创建自定义命令完整流程参考手册:https://dev.splunk.com/enterprise/docs/devtools/customsearchcommands/createcustomsearchcmd/

自定义命令脚本编写示例:https://dev.splunk.com/enterprise/docs/devtools/customsearchcommands/customsearchcmdexamples/

5.2 Splunk内置命令类型:

  • distributable streaming
  • centralized streaming
  • transforming
  • generating
  • orchestrating
  • dataset processing

命令类型详见:https://docs.splunk.com/Documentation/Splunk/9.0.0/Search/Typesofcommands

5.3 能开发的自定义命令类型

  • GeneratingCommand
  • StreamingCommand
  • EventingCommand
  • ReportingCommand

自定义命令类型详见splunklib中源码注释:splunklib/searchcommands/init.py

本文主要介绍 StreamingCommand 类型命令编写方法

5.4 StreamingCommand 命令编写模板

# coding: utf-8
import sys
from splunklib.searchcommands import dispatch, StreamingCommand, Configuration, Option, validators@Configuration()
class 自定义命令的Python类名(StreamingCommand):def stream(self, records):# records为splunk前一命令执行的结果记录for record in records:#对每一条记录record执行xxxx处理,主要编写这里的处理逻辑;获取记录中的某一个字段值,可以用 record['字段名']yield recorddispatch(自定义命令的Python类名, sys.argv, sys.stdin, sys.stdout, __name__)

脚本内容解释:

  • @Configuration():照着写就行了
  • 自定义命令的Python类名:自己定义,不要和其他自定义命令脚本里的相同即可。
  • StreamingCommand:用以说明该自定义命令为一个流式命令。
  • def stream(self, records):
    stream:这个自定义命令类中必须的一个函数,用来被Splunk平台调用。
    records:该参数是Splunk传递进来的所有数据,即,一个张二维表。
  • yield record :返回处理后的record记录
  • dispatch:照着写就行了,注意保持和class后的自定义命令的Python类名一致即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

办公效率翻倍!2024最适合办公电脑安装的系统推荐!

当前,电脑已成为我们日常办公最常用的工具。为了确保高效顺畅的办公体验,选择一款合适的操作系统至关重要。那么,如何找到并下载最适合办公电脑的操作系统呢?接下来系统之家小编为您推荐2024年最适合办公电脑安装的系统&#xff0…

Qt窗口程序整理汇总

到今日为止,通过一个个案例的实验,逐步熟悉了 Qt6下 窗体界面开发的,将走过的路,再次汇总整理。 Qt Splash样式的登录窗https://blog.csdn.net/castlooo/article/details/140462768 Qt实现MDI应用程序https://blog.csdn.net/cast…

基于单片机STC89C52和GSM实现的远程拨号开锁设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于单片机STC89C52和GSM实现的远程拨号开锁设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。 目录 摘要 仿真图 单片机系统流程图 实物图 代码 系统论文 资源下载 摘要 本文介…

python数据可视化(9)——绘制小提琴图

课程学习来源:b站up:【蚂蚁学python】 【课程链接:【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接:【链接】】 python:3.12.3 所有库都使用最新版。 Python绘制小提琴图 小提琴图(violin plot…

【经验总结】将markdown文档转换为word(swagger导出word)

工具准备: 任意markdown编辑器,以typora为例pandoc,官方下载地址 思路整理: 从swagger提取离线md文档将md文档转换为word格式 操作步骤: 一、安装pandoc (markdown编辑器安装略) 前往官网…

Yak与nuclei的深度融合:打造高效漏扫生态,解锁PoC管理新姿势

在Yakit中使用nuclei很简单,只需要几行代码。在Yak Runner中,使用下面代码,指定扫描的目标与选项,便能调用nuclei的漏扫能力: results:nuclei.Scan(target,opts...)~for result in results { dump(result)} 比如以…

UNiapp微信小程序Ucharts

效果图如下 以上为加载接口所得数据的玫瑰图与折线图 具体步骤如下 1,将插件导入Hbuiler 所需要的项目中(插件地址:秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场) 2,导入成功是这样的 3&#xff0c…

相对定位语法:css+xpath基础语法使用-定位页面元素

文章目录 CSS相对定位获取元素关系定位顺序关系 XPath相对定位基础语法顺序关系-通过索引获取元素选取元素 总结 ✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味&#xff0c…

uniapp小程序上传pdf文件

<template><view class="mainInnBox"><view class="formBox"><!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 --><u-form :model="form" ref="uForm" :rules="rules"&g…

韦东山嵌入式linux系列-具体单板的 LED 驱动程序

笔者使用的是STM32MP157的板子 1 怎么写 LED 驱动程序&#xff1f; 详细步骤如下&#xff1a; ① 看原理图确定引脚&#xff0c;确定引脚输出什么电平才能点亮/熄灭 LED ② 看主芯片手册&#xff0c;确定寄存器操作方法&#xff1a;哪些寄存器&#xff1f;哪些位&#xff1f;…

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建 文章目录 STM32 Customer BootLoader 刷新项目 (三) 程序框架搭建典型工作流程 1. 硬件原理图介绍1.1 USART硬件介绍1.2 LED和按键介绍 2. STM32 CubeMX工程搭建2.1 创建工程2.2 系统配置2.3 USART串口配置2.4 配置按键G…

GD32 MCU上电跌落导致启动异常如何解决

大家是否碰到过MCU上电过程中存在电源波动或者电压跌落导致MCU启动异常的问题&#xff1f;本视频将会为大家讲解可能的原因以及解决方法&#xff1a; GD32 MCU上下电复位波形如下图所示&#xff0c;上电过程中如果存在吃电的模块&#xff0c;比如wifi模块/4G模块/开启某块电路…

10校大满贯!中国内地高校2024年1-6月CNS发文统计出炉

随着全球科研竞争的日趋激烈&#xff0c;CNS&#xff08;Cell、Nature、Science&#xff09;作为科学领域的三大顶级期刊&#xff0c;不仅是科研成果的展示平台&#xff0c;更是各国科研实力比拼的重要战场。近年来&#xff0c;中国高校在国际科研舞台上的表现愈发抢眼&#xf…

排队问题--逆序对应用

对于逆序对&#xff0c;我们可以用树状数组的方式来求&#xff0c;但是值得注意的是&#xff0c;我们逆序对一般求的是比这个元素小的个数&#xff08;位置可以是前或者后&#xff09;&#xff0c;那么求比这个元素大的个数怎么办&#xff0c;我们可以用 i - query() !!! 每个元…

生物安全柜验证:气流流型、粒子、浮游菌等参考标准

生物安全柜也是制药行业常见设备&#xff0c;根据GMP的要求&#xff0c;需对生物安全柜定期进行验证确认&#xff0c;确保生物安全柜的性能满足GMP洁净厂房的相关要求。 生物安全柜是实验室的基本设备&#xff0c;也是生物安全实验室的一级安全隔离屏障。其最重要的作用就是气流…

Windows与Linux双机热备软件推荐

网络数据安全在如今信息化的时代越来越变得举足轻重&#xff0c;因此服务器维护和管理也成为企业健康稳定运营的一项重要工作。但实际情况是很多公司并没有配备专业的运维人员&#xff0c;一般都会通过一些管理软件维护或者主机托管给服务商。整理6款服务器的Windows与Linux双机…

JAVA-----异常处理

一、定义 在 Java 中&#xff0c;异常&#xff08;Exception&#xff09;是指程序在执行过程中遇到的不正常情况&#xff0c;这些情况可能导致程序无法继续执行或产生错误的结果。异常可以是 Java 标准库中提供的内置异常类&#xff0c;也可以是开发人员自定义的异常类。 二、…

PyTorch面部表情识别项目实战

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 本书案例比较丰富、比较完整&#xff0c;可以用于课题研究、毕业论文素材&#xff0c;值得大家收藏。 人脸表情是人类信息交流的重要方式&#xff0c;它所包含的人体行为信息与人的情感状态、精神状态、健康状态等有着极为…

关于Ubuntu22.04中的Command ‘vim‘ not found, but can be installed with:

前言 在Ubuntu终端编辑文本内容时需要利用vim&#xff0c;但新安装的虚拟机中并未配置vim&#xff0c;本文记录了vim的安装过程。 打开终端后&#xff0c;在home目录中输入 vim test.txt但提示报错&#xff0c;提示我们没有找到vim&#xff0c;需要通过以下命令进行安装&…

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录&#xff0c;像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得…