SkyWalking集成Kafka实现日志异步采集经验总结

SkyWalking日志异步采集架构

【重点知识】

1、【Agent】kafka-reporter-plugin-x.x.x.jar包放plugins目录后必走kafka(kafka没有正确配置就会报错)

2、【Agent】异步如不开启数据压缩,日志数据较大,pod多、业务大时容易造成网络拥堵

3、【Agent】SW_AGENT_INSTANCE_NAME默认:UUID@hostname,建议调整为:nodeip@podip

4、【Agent】官方说:使用Kafka时skywalking.collector.backend_service参数依然要配置

5、【APM】SkyWalking OAP配置启用kafka并配置好后,OAP启动时会自动创建Topic

环境及帮助文件

SkyWalking-OAP官方下载地址

SkyWalking-OAP帮助文档 -- 配置说明

SkyWalking-Agent官方下载地址

SkyWalking-Agent帮助文档 -- 配置说明

Agent is available for JDK 8 - 21

Oracle JDK8u202(Oracle JDK8最后一个非商业版本) 下载地址:Oracle JDK8u202

skywalking- OAP 服务

启用kafka配置

编辑oap配置文件 ${skywalking-apm}/config/application.yml配置

Scala 复制代码
# line 323 apache-skywalking-apm-9.6.0
kafka-fetcher:
  selector: ${SW_KAFKA_FETCHER:default}
  default:
    # 多个使用逗到分隔
    bootstrapServers: ${SW_KAFKA_FETCHER_SERVERS:localhost:9092}
    namespace: ${SW_NAMESPACE:""}
    # 默认3,几个消费者就配几
    partitions: ${SW_KAFKA_FETCHER_PARTITIONS:3}
    # 不能超过kafka集群机器的数量,默认2
    replicationFactor: ${SW_KAFKA_FETCHER_PARTITIONS_FACTOR:2}
    enableNativeProtoLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_PROTO_LOG:true}
    enableNativeJsonLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_JSON_LOG:true}
    consumers: ${SW_KAFKA_FETCHER_CONSUMERS:1}
    kafkaHandlerThreadPoolSize: ${SW_KAFKA_HANDLER_THREAD_POOL_SIZE:-1}
    kafkaHandlerThreadPoolQueueSize: ${SW_KAFKA_HANDLER_THREAD_POOL_QUEUE_SIZE:-1}
...

skywalking-agent服务

经验

-》 kafka-reporter-plugin-x.x.x.jar 这个包放plugins目录后必走kafka,如果kafka没有正确配置就会报错

-》 不压缩的情况下,一次请求约1KB日志

-》 SW_AGENT_INSTANCE_NAME 默认:UUID@hostname,建议:host_ip@pod_ip

-》 使用Kafka时skywalking.collector.backend_service参数依然要配置(官方说的)

开启Kafka

  1. {skywalking-agent}/optional-reporter-plugins/kafka-reporter-plugin-x.x.x.jar 拷贝到 {skywalking-agent}/plugins

开启消息数据压缩

optional-reporter-plugins下面任选一种(lz4、snappy、zstd-jni)压缩实现包即可

  1. {skywalking-agent}/optional-reporter-plugins/zstd-jni-x.x.x.jar 拷贝到 {skywalking-agent}/plugins

Springboot应用增加jvm参数

应用启动参数,多个kafka地址使用逗号分割

Scala 复制代码
# myApp 改为你的包名
java \
-javaagent:/usr/local/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=myApp \
-Dskywalking.collector.backend_service=aigoServer:11800 \
-Dskywalking.plugin.kafka.bootstrap_servers=10.81.**.14:9092 \
-Xmx1g \
myApp.jar

Tomcat应用增加jvm参数

应用启动参数,多个kafka地址使用逗号分割

Scala 复制代码
#  myApp 改为实际应用名
JAVA_OPTS="$JAVA_OPTS --javaagent:/usr/local/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=myApp \
-Dskywalking.collector.backend_service=aigoServer:11800 \
-Dskywalking.plugin.kafka.bootstrap_servers=10.81.**.14:9092"

说明:

使用Kafka时skywalking.collector.backend_service参数依然要配置(官方说的)

附件

附件一:lz4压缩算法

lz4压缩算法 --- 压缩速度快

GitHub - lz4/lz4: Extremely Fast Compression algorithm

附件二:snappy压缩工具

snappy压缩算法 --- 压缩速度快

GitHub - google/snappy: A fast compressor/decompressor

附件三:Zstd压缩算法

Zstd压缩算法 --- 压缩比高,CPU比较富裕时此算法

GitHub - facebook/zstd: Zstandard - Fast real-time compression algorithm

附件四:Kafka可视化管理工具

-) Kafka Map -- 国产、开源,通过配置kafka地址实现管理(作者使用)

kafka-map: 一个美观简洁且强大的kafka web管理工具。

-) kafka CMAK -- 通过配置zookeeper地址实现管理(作者使用)

GitHub - yahoo/CMAK: CMAK is a tool for managing Apache Kafka clusters

-) kafka-monitor -- 开源

https://github.com/linkedin/kafka-monitor/wiki

-) kafka-eagle -- 商业软件(收费)

EFAK

等等

附件五:客户端配置示例

客户端参数两种key形式

bash 复制代码
# 客户端参数两种key形式
-Dskywalking.agent.service_name=smet-rpc-service
-javaagent:/app/saashealth/skywalking-agent/skywalking-agent-9.2.0/skywalking-agent.jar
-Dskywalking.plugin.kafka.bootstrap_servers=10.130.***.92:19092
-Dskywalking.collector.backend_service=10.130.***.92:11801

大写变量形式

bash 复制代码
-DSW_AGENT_NAME=smet-rpc-service \
-javaagent:/app/saashealth/skywalking-agent/skywalking-agent-9.2.0/skywalking-agent.jar \
-DSW_KAFKA_BOOTSTRAP_SERVERS=10.130.***.92:19092 \
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=10.130.***.92:11801 \
相关推荐
接着奏乐接着舞2 天前
springcloud skywalking
spring·spring cloud·skywalking
他们叫我阿冠3 天前
Kafka的基本了解
分布式·kafka
汪小哥3 天前
kafka 初识
分布式·kafka
可乐ea3 天前
【知识获取与分享社区项目 | 项目日记第 24 天】终章总结:从认证、发布、计数、Feed、搜索到 RAG:完整复盘一个知识社区后端系统
java·spring boot·redis·mysql·elasticsearch·ai·kafka
Jabes.yang3 天前
Java面试实录:AIGC场景下的Stream、微服务、Redis、Kafka与安全实战
java·spring boot·redis·微服务·面试·kafka·aigc
我是一颗柠檬3 天前
【Java项目技术亮点】Kafka异步写+写聚合:吞吐量提升10倍的消息队列优化秘籍
java·分布式·kafka·linq
Solis程序员4 天前
解决双写不一致!Canal+Outbox+Kafka 高可靠事件驱动架构
redis·分布式·架构·kafka·canal
可乐ea4 天前
【知识获取与分享社区项目 | 项目日记第 23 天】项目梳理下篇:高并发与最终一致性复盘:Redis、Kafka、Outbox、ES 与 RAG 如何协同
java·redis·mysql·elasticsearch·缓存·ai·kafka
我是一颗柠檬4 天前
【Java项目技术亮点】Outbox事件驱动模式:解决分布式事务的终极方案
java·开发语言·分布式·后端·中间件·kafka
JAVA面经实录9174 天前
RocketMQ全套学习知识手册
java·kafka·rabbitmq·rocketmq