像 Chrome DevTools 一样的后台调试工具 Sidekick

开源
在远程环境中调试应用程序很痛苦,因为你无法像在本地环境中那样为远程应用程序设置断点。Sidekick 背后的主要动机是帮助开发人员减轻在分布式环境的远程开发过程中由于缺乏调试工具而造成的痛苦。

Sidekick 是一个开源的实时应用程序调试器,可让你在应用程序运行时对其进行故障排除。添加动态日志并在你运行的应用程序中放置不间断的断点,而无需停止和重新部署。Sidekick 允许我们进行自托管使实时调试更易于访问,专为需要从运行的应用程序中获取额外信息的开发者而设计的。

图片

简介

在远程环境中调试应用程序很痛苦,因为你无法像在本地环境中那样为远程应用程序设置断点。Sidekick 背后的主要动机是帮助开发人员减轻在分布式环境的远程开发过程中由于缺乏调试工具而造成的痛苦。

Sidekick 消除了调试的负担,使开发人员能够为你的代码设置一个非侵入式断点,这不会中断执行,即使你的应用程序已启动并正在运行,仍然能够调试你的应用程序。

Sidekick 为应用程序运行时提供 Java、Python 和 NodeJS 代理。开发人员使用 Web IDE、Visual Studio Code 或 IntelliJ IDEA 将 Sidekick 操作(日志点和跟踪点)放入代码中,Sidekick 将点位置传送给代理。当代码执行时,代理会在不停止应用程序的情况下拍摄应用程序状态、调用堆栈、捕获的变量等的快照,并将快照或生成的日志作为事件发送到你的环境。

使用 Sidekick 捕获快照或生成日志后,开发人员可以分析事件以了解应用程序的行为。

图片

虽然利用日志数据似乎是调试远程应用程序的最明显选择,但 Sidekick 提供了一个额外的优势,具有类似于在本地环境中调试应用程序的无缝调试体验。

无论你是开发人员、测试软件工程师还是 QA 工程师,Sidekick 都可以帮助你找到错误的根本原因。

特性

  • 你的日志点和跟踪点的条件和自定义命中限制,只收集你需要的内容
  • 用于日志点的 Mustache 动力表达系统,轻松将可变数据添加到你的日志上下文
  • 可定制的代理 -> 配置代理的工作方式,定义深度和帧数
  • 使用 Thundra APM 和 Open-telemetry 跟踪聚合你收集的数据
  • 自动收集错误并将它们发送给你选择的目标(将于 8 月 30 日提供)
  • 定义自定义数据编辑函数来控制收集的内容(仅限 Node.js)
  • 以编程方式控制您的日志点和跟踪点
  • 使用 Sidekick 客户端以你的方式处理收集的数据

图片图片

安装

使用 Sidekick 的最简单方法是在 Sidekick Cloud 上创建一个帐户,此外我们也可以进行自托管,我们可以自己构建 Sidekick 或使用官方的 Docker 镜像。

可以使用如下所示的命令来运行 Sidekick:

$ git clone https://github.com/runsidekick/sidekick
$ cd sidekick/docker
  • 1.
  • 2.

该目录下面有一个自带的 docker-compose.yml 文件:

version: '3.1'
services:
  sidekick-db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    container_name: sidekick-db
    env_file: .env
    ports:
      - 3306:3306
    volumes:
      - sidekick-db:/var/lib/mysql
      - ./scripts/schema.sql:/docker-entrypoint-initdb.d/schema.sql
  sidekick-cache:
    image: redis:6.2-alpine
    restart: always
    container_name: sidekick-cache
    command: redis-server --save 20 1 --loglevel warning
    ports:
      - 6379:6379
    volumes:
      - sidekick-cache:/data
  sidekick-mq:
    image: rabbitmq:3-management
    container_name: sidekick-mq
    ports:
      - 5672:5672
      - 15672:15672
      - 61613:61613
    volumes:
      - rabbitmq-data:/var/lib/rabbitmq/
      - rabbitmq-log:/var/log/rabbitmq
    restart: always
  sidekick-broker:
    image: runsidekick/sidekick-broker:latest
    restart: always
    container_name: sidekick-broker
    depends_on:
      - sidekick-cache
      - sidekick-db
      - sidekick-mq
    ports:
      - 7777:7777
      - 8080:8080
    env_file: .env
  sidekick-api:
    image: runsidekick/sidekick-api:latest
    restart: always
    container_name: sidekick-api
    depends_on:
      - sidekick-cache
      - sidekick-db
      - sidekick-mq
      - sidekick-broker
    ports:
      - 8084:8084
    env_file: .env
volumes:
  sidekick-db:
  sidekick-cache:
  rabbitmq-data:
  rabbitmq-log:
  redis-data:
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.

所以我们可以执行 docker-compose up 命令即可启动了。

$ docker-compose up
Creating network "docker_default" with the default driver
Creating volume "docker_sidekick-db" with default driver
Creating volume "docker_sidekick-cache" with default driver
Creating volume "docker_rabbitmq-data" with default driver
Creating volume "docker_rabbitmq-log" with default driver
Creating volume "docker_redis-data" with default driver
Pulling sidekick-db (mysql:)...
......
sidekick-api       | 2022-08-24 09:22:05.667  INFO 1 --- [           main] o.s.s.c.ThreadPoolTaskExecutor           : Initializing ExecutorService 'applicationTaskExecutor'
sidekick-api       | 2022-08-24 09:22:06.061  INFO 1 --- [           main] o.s.b.w.e.t.TomcatWebServer              : Tomcat started on port(s): 8084 (http) with context path ''
sidekick-api       | 2022-08-24 09:22:06.063  INFO 1 --- [           main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
sidekick-api       | 2022-08-24 09:22:06.080  INFO 1 --- [           main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
sidekick-api       | 2022-08-24 09:22:06.140  INFO 1 --- [           main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
sidekick-api       | 2022-08-24 09:22:06.485  INFO 1 --- [           main] c.r.a.SidekickApiApplication             : Started SidekickApiApplication in 12.02 seconds (JVM running for 13.553)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

应用程序准备就绪后,我们可以使用 ws://<your-server-hostname-or-ip>:7777 这个 url 连接到 agent,同样还可以通过 http://<your-server-hostname-or-ip>:8084/swagger-ui.html 查看 API 的 swagger 界面:

图片

如果需要一个在线的管理系统可以注册 Sidekick 的 Cloud 版本。关于具体如何在应用程序中进行集成调试可以看官方文档 https://docs.runsidekick.com/ 了解更多相关信息。

Git 仓库:https://github.com/runsidekick/sidekick。

责任编辑:姜华 来源: Github爱好者
相关推荐

2022-08-21 14:05:54

调试工具CDP

2013-12-17 09:02:03

Python调试

2025-03-03 00:00:00

Chrome工具前端

2017-08-23 09:26:16

Chromelive 状态代码

2017-10-09 10:04:48

JavaScriptChrome DevT调试

2022-10-21 13:52:56

JS 报错调试本地源码

2022-09-02 09:01:36

ChromeWeb调试

2014-02-27 13:10:57

Visual Stud调试

2023-04-05 14:19:07

FlinkRedisNoSQL

2022-07-29 09:01:20

Chrome试源代码调试技巧

2013-12-31 09:19:23

Python调试

2023-05-23 13:59:41

RustPython程序

2022-12-21 15:56:23

代码文档工具

2017-09-12 15:11:12

Chrome

2015-04-09 11:27:34

2015-03-16 12:50:44

2021-05-20 08:37:32

multiprocesPython线程

2013-08-22 10:17:51

Google大数据业务价值

2011-01-18 10:45:16

乔布斯

2012-06-08 13:47:32

Wndows 8Vista
点赞
收藏

51CTO技术栈公众号