通过 KafkaMQ 接入Skywalking 数据最佳实践

Skywalking

SkyWalking 是一个开源的分布式追踪系统,主要用于监控和分析分布式系统的性能和行为。它支持多种语言和框架,能够实时收集和分析服务间的调用链路数据、性能指标和日志信息,帮助开发者快速定位系统瓶颈和问题。

SkyWalking Java Agent 是 SkyWalking 提供的针对 Java 应用的自动追踪工具。它通过字节码增强技术,在不修改应用代码的情况下,自动注入追踪代码,实现对 Java 应用的性能监控和调用链追踪。Java Agent 可以与 SkyWalking OAP Server 配合,将采集到的指标、日志和调用链数据上报到后端进行分析和可视化展示,帮助开发和运维团队更好地管理和优化分布式系统。

SkyWalking KafkaMQ

SkyWalking KafkaMQ 是 SkyWalking 项目中的一个插件,用于将 SkyWalking 采集的指标、日志和调用链数据通过 Kafka 消息队列上报到 SkyWalking OAP Server。它允许 SkyWalking Java Agent 将数据发送到 Kafka 集群,再由 Kafka 消费者将数据转发到 SkyWalking OAP Server,从而实现数据的异步传输和解耦,提高系统的可扩展性和可靠性。这种架构特别适用于大规模分布式系统,能够有效减轻 OAP Server 的压力,同时确保数据的高效传输和处理。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

观测云兼容 SkyWalking 的数据,可以将 SkyWalking 的数据直接推送至观测云,或者使用 KafkaMQ 的方式消费 SkyWalking 数据上报至观测云。

实践

实践主题:SpringBoot 应用接入 SkyWalking ,并激活 SkyWalking KafkaMQ 组件上报数据至观测云。

流程

  1. 应用接入 SkyWalking 探针,并通过 KafkaMQ plugin 进行数据上报至 KafkaMQ Server
  2. KafkaMQ Server 缓存 Skywalking 数据
  3. DataKit 启动 KafkaMQ 采集器,消费 KafkaMQ Server 队列数据
  4. DataKit 启动 Skywalking 采集器, KafkaMQ 采集器消费到的数据使用 SkyWalking 采集器进行解析并推送至观测云

应用

当前主要是以 JAVA 应用为主,新增 skywalking-agent 进行自动化埋点,启动命令如下:

ini 复制代码
java -javaagent:/home/liurui/agent/skywalking-agent-8.15/skywalking-agent.jar \
-Dskywalking.agent.service_name=demo-app  \
-DSW_KAFKA_BOOTSTRAP_SERVERS=localhost:9092 \
-DSW_KAFKA_NAMESPACE=dev  \
-jar demo-app.jar
  • -Dskywalking.agent.service_name: 服务名称
  • -DSW_KAFKA_BOOTSTRAP_SERVERS: kafkamq server
  • -DSW_KAFKA_NAMESPACE: topic 的 namespace,配置后,会影响默认的队列名称。将当前 namespace 作为前缀追加到默认队列名称上。

如需 Skywalking Kafka 插件生效,需要将 optional-reporter-plugins/kafka-reporter-plugin-xxx.jar 文件复制到 plugins 目录下,Skywalking 自动激活 Kafka 插件,并使默认的配置 collector.backend_service 失效。

访问应用产生链路信息,后续采集会用到。

采集器

DataKit 采集器目录为 /usr/local/datakit/conf.d

  • 开启 KafkaMQ 采集器
bash 复制代码
cd kafkamq
cp kafkamq.conf.sample kafkamq.conf

调整 kafkamq.conf,内容如下:

ini 复制代码
# {"version": "1.72.0", "desc": "do NOT edit this line"}

[[inputs.kafkamq]]
  addrs = ["localhost:9092"]
  # your kafka version:0.8.2 ~ 3.2.0
  kafka_version = "2.0.0"
  group_id = "datakit-group"
  # consumer group partition assignment strategy (range, roundrobin, sticky)
  assignor = "roundrobin"

  offsets=-1

  ## skywalking custom
  [inputs.kafkamq.skywalking]
  ## Required: send to datakit skywalking input.
    dk_endpoint="http://localhost:9529"
    thread = 8 
    topics = [
      "skywalking-metrics",
      "skywalking-profilings",
      "skywalking-segments",
      "skywalking-managements",
      "skywalking-meters",
      "skywalking-logs",
    ]
    # 需要跟应用配置的kafka namespace 保持一致
    namespace = "dev"
  • 开启 Skywalking 采集器
bash 复制代码
cd skywalking
cp skywalking.conf.sample skywalking.conf

内容不需要调整。

  • 重启 DataKit

    datakit service -R

效果

登录观测云控制台,点击「应用性能监测」 -「链路」,即可查看服务调用链情况。

点击列表数据可以查看到每一个 trace 的 span 信息。

点击「场景」 -「新建仪表板」,输入 "JVM Skywalking", 选择 "JVM Skywalking 监控视图",点击 "确定" 即可添加视图。

相关推荐
邂逅星河浪漫9 小时前
Docker 详解+示例
linux·docker·容器·kafka
玄辰星君12 小时前
【在 macOS 系统上使用 Docker 启动 Kafka 的完整指南】
macos·docker·kafka
友莘居士15 小时前
Logstash数据迁移之mysql-to-kafka.conf两种路由决策对比
mysql·kafka·logstash·路由决策
斯普信专业组15 小时前
Fluent Bit针对kafka心跳重连机制详解(上)
kafka·fluent bit
哈基米喜欢哈哈哈1 天前
Kafka复制机制
笔记·分布式·后端·kafka
孫治AllenSun1 天前
【Kafka】重点概念和架构总结
分布式·架构·kafka
3Cloudream1 天前
互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
java·spring boot·redis·elasticsearch·微服务·kafka·电商架构
Hello.Reader2 天前
Kafka 4.0 从零到一8 步快速上手 + 实战要点与避坑
分布式·kafka
neoooo2 天前
Spring Boot 3 + Kafka 实战指南
java·spring boot·kafka