kafka-splunk数据通路实践

目的: 鉴于目前网络上没有完整的kafka数据投递至splunk教程,通过本文操作步骤,您将实现kafka数据投递至splunk日志系统
在这里插入图片描述
实现思路

  1. 创建kafka集群
  2. 部署splunk,设置HTTP事件收集器
  3. 部署connector服务
  4. 创建connector任务,将kafka主题消息通过connector投递到splunk

测试环境

  • 测试使用的操作系统为centos7.5_x86_64
  • 文章提供了两种部署方式,分别是单机部署和容器化部署
  • 单机部署使用的主机来自腾讯云-cvm产品(腾讯云CVM),1台4c8g(如果条件允许,建议使用3台2c4g主机,分别部署kafka、connector、splunk,钱包有限,这里只是教程,不讲究这些)
  • 上述云主机,已安装JDK8及以上版本
  • 容器化部署使用的k8s集群来自腾讯云TKE,可以一键部署k8s集群,欢迎体验~

一、部署splunk

●splunk是一款收费软件,如果每天的数据量少于500M,可以使用Splunk提供的免费License,但不能用安全,分布式等高级功能。
部署步骤如下:

部署方式1:容器部署:

  1. 安装并启动docker(k8s集群节点可免除此步骤):
yum install docker -y
systemctl start docker
  1. 获取splunk镜像:
# https://hub.docker.com/r/splunk/splunk/tags
docker pull splunk/splunk
  1. 【非必须,3和4选一个】启动splunk容器,设置为自动接受lic,设置密码:
docker run -d -p 8000:8000 -e "SPLUNK_START_ARGS=--accept-license" -e "SPLUNK_PASSWORD=你的密码"  -p 8088:8088 --name splunk splunk/splunk:latest
  1. 【非必须,3和4选一个】在k8s中以工作负载方式部署splunk,这将为你创建一个splunk-ns命名空间,并创建deployment类型的工作负载部署splunk,以及一个LB类型的service,请根据你的需要修改命名空间、镜像、密码、端口:
vi splunk-deployment.yaml
apiVersion: v1
kind: Namespace
metadata:name: splunk-ns---apiVersion: apps/v1
kind: Deployment
metadata:name: splunknamespace: splunk-ns
spec:replicas: 1selector:matchLabels:app: splunktemplate:metadata:labels:app: splunkspec:containers:- name: splunkimage: splunk/splunk:latestports:- containerPort: 8000- containerPort: 8088env:- name: SPLUNK_START_ARGSvalue: "--accept-license"- name: SPLUNK_PASSWORDvalue: "你的密码"volumeMounts:- name: splunk-datamountPath: /opt/splunk/varvolumes:- name: splunk-dataemptyDir: {}---apiVersion: v1
kind: Service
metadata:name: splunknamespace: splunk-ns
spec:selector:app: splunkports:- name: httpport: 8000targetPort: 8000- name: mgmtport: 8088targetPort: 8088type: LoadBalancer
  1. 打开浏览器,访问splunk的地址:8000,预期可以看到splunk的页面。用户名/密码:admin/你的密码
    在这里插入图片描述

部署方式2:单机部署:

  1. 注册账号并获取splunk下载链接:https://www.splunk.com/en_us/download/splunk-enterprise.html ⚠️
  2. 解压缩
# 解压到/opt
tar -zxvf splunk-8.0.8-xxzx-Linux-x86_64.tgz -C /opt  
  1. 启动splunk,接受许可
cd /opt/splunk/bin/
./splunk start --accept-license  //启动,并自动接收许可
  1. 输入自定义用户名、密码
    在这里插入图片描述
    其他命令参考:
./splunk start   //启动splunk
./splunk restart   //重启splunk
./splunk status    //查看splunk状态
./splunk version   //查看splunk版
#卸载
./splunk disable boot-start //关闭自启动
./splunk stop //停止splunk
/opt/splunk/bin/rm–rf/opt/splunk //移除splunk安装目录
  1. splunk安装之后,默认开启Splunk Web端口8000。我们访问8000端口
    ●ps:Splunkd端口8089为管理端口
    在这里插入图片描述

在这里插入图片描述
至此,splunk部署成功

二、配置Splunk HTTP 事件收集器

  1. 在splunk中配置HTTP 事件收集器:
    a. 进入splunk web页面,点击右上角【设置】-【数据输入】
    在这里插入图片描述
    b. 选择HTTP事件收集器,点击【全局设置】,启用标记,HTTP端口为8088,点击【保存】
    在这里插入图片描述
    c. 点击右上角【新建标记】,新建HTTP事件收集器,填写:

    填写名称:splunk_kafka_connect_token,点击【下一步】;
    新建来源类型“splunk_kafka_data”,新建索引“splunk_kafka_index”,点击【检查】;
    提交;

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 随后,在设置-数据输入-HTTP事件收集器页面,将得到一个token,记录此token
    在这里插入图片描述

三、启动kafka并生产消息

  1. 启动kafka实例
    a. 安装jdk
yum install java -y

b. 下载kafka:https://kafka.apache.org/downloads,以2.12版本为例
在这里插入图片描述

c.解压

tar -zxvf kafka_2.12-3.6.1.tgz 

d.启动zookeeper

cd kafka_2.12-3.6.1/
./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

e.启动kafka

./bin/kafka-server-start.sh config/server.properties &

在这里插入图片描述

f.创建topic,假设叫topic0

./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic topic0

在这里插入图片描述

g.使用生产者发送若干条消息

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic0

在这里插入图片描述

h.消费

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic topic0

在这里插入图片描述
至此,kafka启动成功

三、使用splunk for kafka connector实现splunk与kafka数据通路

  1. github上下载splunk for kafka connector的latest jar,下载地址:https://github.com/splunk/kafka-connect-splunk,在执行以下操作前请仔细阅读github上的redame,因为随着版本更新,配置或许会改变
    在这里插入图片描述
    在这里插入图片描述
  2. 配置splunk for kafka connector
    a.此步骤将完成kafka connector服务。返回带有kafka sdk的主机(注意,这里我只有一台测试机,但是如果你是多台主机分别部署kafka、connector的背景下,这里返回的不是kafka集群主机,我们要创建connector服务,kafka sdk是带有connector的配置的),编辑kafka_2.12-3.6.1/config/connect-distributed.properties
    参数说明:
    注意:rest.advertised.host.name和rest.advertised.port在不同的kafka版本中参数名不同,以connect-distributed.properties原文档参数为准;StringConverter表示日志格式为string,若日志为其他格式,请参考官方文档
# 将10.0.0.0:19000替换为你的kafka地址
bootstrap.servers=10.0.0.0:19000
group.id=test-splunk-kafka-connector
# 假设消息是string类型,格式不对splunk就不能解析日志
key.converter=org.apache.kafka.connect.storage.StringConverter
value.converter=org.apache.kafka.connect.storage.StringConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
# 换为connector的地址
rest.advertised.host.name=10.1.1.1
rest.advertised.port=8083
#指定splunk-kafka-connector.jar所在目录
plugin.path=/usr/local/bin/
  1. 启动conncetor:
cd kafka_2.12-3.6.1/
./bin/connect-distributed.sh config/connect-distributed.properties
  1. 验证splunk connector:
# curl http://「connector ip」:8083/connector-plugins
curl http://10.1.1.1:8083/connector-plugins

预期出现这个字段,表示splunk connector已经启动了:{“class”:“com.splunk.kafka.connect.SplunkSinkConnector”,“type”:“sink”,“version”:“v2.2.0”}
在这里插入图片描述

  1. 创建connector任务,替换10.1.1.1为您的kafka connector地址10.0.0.0为您的splunk地址,token为splunk事件收集器的token,topics替换为您的kafka topic
curl 10.1.1.1:8083/connectors -X POST -H "Content-Type: application/json" -d'{"name": "splunk-kafka-connect-task","config": {"connector.class": "com.splunk.kafka.connect.SplunkSinkConnector","tasks.max": "3","topics": "topic0","splunk.indexes": "splunk_kafka_index","splunk.hec.uri":"https://10.0.0.0:8088","splunk.hec.token": "b4594xxxxxx","splunk.hec.ack.enabled" : "false","splunk.hec.raw" : "false","splunk.hec.json.event.enrichment" : "org=fin,bu=south-east-us","splunk.hec.ssl.validate.certs": "false","splunk.hec.track.data" : "true"}
}'

预期返回:
在这里插入图片描述

  1. 进入splunk 主页-search&reporting
    在搜索栏填写:index="splunk_kafka_index"验证index中的数据,预期能查看到我们生产的消息
    在这里插入图片描述
    在这里插入图片描述
    至此,kafka-splunk已打通

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

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

相关文章

Linux文件编译

目录 一、GCC编译 1.直接编译 2.分步编译 预处理: 编译: 汇编: 链接: 3.多文件编译 4.G 二、Make 1.概述 2.使用步骤 3.makefile创建规则 3.1一个基本规则 3.2两个常用函数 4.示例文件 三、GDB 示例:…

优量汇的广告填充率有多高?

一些量级小的媒体在广告变现初期,以接入广告联盟为主, 广告填充率是衡量广告平台表现和广告变现效率的重要指标。 当用户打开APP时,开发者收到一个对应的广告请求。这个广告请求可以被填充或不被填充,广告填充率广告填充数/广告请…

代码随想录算法训练营第27天| Leetcode 39. 组合总和、40.组合总和II、131.分割回文串

目录 Leetcode 39. 组合总和 Leetcode 40.组合总和II Leetcode 131.分割回文串 Leetcode 39. 组合总和 题目链接:Leetcode 39. 组合总和 题目描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使…

070:vue+cesium: 利用canvas设置径向渐变色材质

相关API参考: https://cesium.com/learn/cesiumjs/ref-doc/ColorMaterialProperty.html 第070个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置线性渐变色的材质,这里使用canvas的辅助方法。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. …

uniapp+uView 【详解】录音,自制音频播放器

效果预览 代码实现 <template><view class"btnListBox"><view class"audioBox" v-if"audioLength"><u-row><u-col span"2"><u--text aligncenter :text"currentTime"></u--text>…

android inset 管理

目录 简介 Insets管理架构 Insets相关类图 app侧的类 WMS侧的类 inset show的流程 接口 流程 WMS侧确定InsetsSourceControl的流程 两个问题 窗口显示时不改变现有的inset状态 全屏窗口上的dialog 不显示statusbar问题 View 和 DecorView 设置insets信息 输入法显…

图文并茂讲解Travelling Salesman

题目 思路 一道lca板子题&#xff0c;不会的同学可以先康康 详解最近公共祖先(LCA)-CSDN博客 我们可以发现&#xff0c;商人是从1开始&#xff0c;旅行到第一个城镇&#xff0c;再到第二个&#xff0c;第三个…… 那么我们只需要求出1~第一个城镇的距离&#xff0c;第一个城…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间&#xff0c;以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

第十三篇【传奇开心果系列】Python的OpenCV库技术点案例示例:光流估计

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例:光流估计短博文目录前言一、光流估计介绍二、Lucas-Kanade光流介绍和示例代码三、Horn-Schunck光流介绍和示例代码四、cv::calcOpticalFlowPyrLK()函数实现光流估计介绍和示例代码五、光流估计用于运动分析…

进程的基本概念、查看、创建

1. 进程的概念 概念&#xff1a;加载到内存的程序/正在运行的程序称为内存。 我们在玩电脑的时候是可以启动多个程序的&#xff0c;比如边听歌边写博客&#xff0c;根据上篇文章我们知道肯定要将多个.exe文件加载到内存中&#xff0c;作为操作系统肯定是要管理这多个加载到内存…

LeetCode_19_中等_删除链表的倒数第N个结点

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 计算链表长度2.2 栈 1. 题目 给你一个链表&#xff0c;删除链表的倒数第 n n n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; h e a d [ 1 , 2 , 3 , 4 , 5 ] , n…

何时用‘x-->?‘将其代入lim中?极限的化简

【何时用‘x-->?将其代入lim中】 【极限的化简】 与极限解法区别&#xff1f; 方法有哪些&#xff1f; 什么条件下可以用&#xff1f; 怎么用&#xff1f;