加载中

开发环境调试

从源码运行 Kibana 时,有多种调试方法。

你需要使用 --inspect--inspect-brk 运行 Node 以启用检查器。更多信息可参见 Node.js 文档

一旦启用了检查器的 Node 开始运行,你可以在 Chrome 浏览器中打开 chrome://inspect。你应该能看到一个正在运行的检查器远程目标。点击“inspect”(检查)。现在你就可以开始使用调试器了。

接下来,我们将详细介绍如何为代码库的不同部分启用检查器。

你需要直接从 Node 脚本运行 Jest

node --inspect-brk node_modules/.bin/jest --runInBand --config [JestConfig] [TestPathPattern]

更多信息可参见 Jest 故障排查文档

node --inspect-brk scripts/functional_test_runner

node --inspect-brk scripts/kibana

更多信息请参阅 使用 Visual Studio Code 调试代码VS Code 中的 Node.js 调试

调试 Kibana 服务器代码有两种选择:附加到进程 (Attach to process) 或从 VS Code 启动 Kibana。

  1. 创建或修改你的 .vscode/launch.json 文件,使用以下配置。更多信息请参阅 Visual Studio Code 调试配置文档
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "kibana-9229",
      "port": 9229,
      "presentation": {
        "hidden": true,
        "group": "Kibana Debug",
        "order": 1
      },
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"]
    },
    {
      "type": "node",
      "request": "attach",
      "name": "kibana-9230",
      "port": 9230,
      "presentation": {
        "hidden": true,
        "group": "Kibana Debug",
        "order": 1
      },
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"]
    },
    {
      "type": "node",
      "request": "attach",
      "name": "kibana-9231",
      "port": 9231,
      "presentation": {
        "hidden": true,
        "group": "Kibana Debug",
        "order": 1
      },
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"]
    }
  ],
  "compounds": [
    {
      "name": "Debug Kibana Server",
      "description": "Attaches to Kibana server in debug mode. Requires first starting Kibana with `yarn debug`",
      "configurations": ["kibana-9229", "kibana-9230", "kibana-9231"],
      "restart": true,
      "presentation": {
        "hidden": false,
        "group": "Kibana Debug",
        "order": 1
      },
      "stopAll": true
    }
  ]
}
		
  1. 使用 yarn es snapshot 启动 Elasticsearch。
  2. 使用 yarn debugnode --inspect scripts/kibana --dev 启动 Kibana。
  3. 在 VS Code 中,点击侧边栏中的“运行和调试”图标。
  4. 从下拉菜单中选择“Debug Kibana Server”。
  5. 点击绿色播放按钮开始调试。
  1. 创建或修改你的 .vscode/launch.json 文件,使用以下配置。
{
  "version": "0.2.0",
  "inputs": [
    {
      "id": "runExamples",
      "type": "pickString",
      "description": "Run developer examples?",
      "default": "No",
      "options": [
        {
          "label": "No",
          "value": ""
        },
        {
          "label": "Yes",
          "value": "--run-examples"
        }
      ]
    }
  ],
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch and Debug Kibana",
      "runtimeExecutable": "node",
      "runtimeArgs": [
        "--nolazy",
        "--inspect=127.0.0.1:9229",
        "scripts/kibana",
        "--dev",
        "${input:runExamples}"
      ],
      "autoAttachChildProcesses": true
    }
  ]
}
		
  1. 使用 yarn es snapshot 启动 Elasticsearch,但不要启动 Kibana,并关闭任何正在运行的 Kibana 实例。
  2. 在 VS Code 中,点击侧边栏中的“运行和调试”图标。
  3. 从下拉菜单中选择“Launch and Debug Kibana”。
  4. 点击绿色播放按钮开始调试。你可以选择是否运行开发示例。

安装 VS Code 的 Jest 扩展

如有必要,将以下内容添加到你的 .vscode/settings.json 文件中。

// self managed
"jest.jestCommandLine": "yarn test:jest --runInBand"
		

有关如何运行和调试单元测试的信息,请参阅 VS Code 的 Jest 扩展文档

  1. 创建或修改你的 .vscode/launch.json 文件,使用以下配置
{
  "version": "0.2.0",
  "inputs": [
    {
      "id": "grep",
      "type": "promptString",
      "description": "Grep pattern to filter tests"
    },
    {
      "id": "ftConfig",
      "type": "promptString",
      "description": "Path to the functional tests config file"
    },
    {
      "id": "ftHeadless",
      "type": "pickString",
      "description": "Run functional tests in headless mode?",
      "options": [
        {
          "label": "No - tests run in Chrome",
          "value": "0"
        },
        {
          "label": "Yes - tests run in headless mode",
          "value": "1"
        }
      ]
    }
  ],
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "FT Server",
      "program": "${workspaceFolder}/scripts/functional_tests_server",
      "internalConsoleOptions": "openOnFirstSessionStart",
      "outputCapture": "std",
      "presentation": {
        "hidden": false,
        "group": "Functional tests",
        "order": 0
      },
      "args": ["--config", "${input:ftConfig}", "--debug"],
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"]
    },
    {
      "type": "node",
      "request": "launch",
      "name": "FT Runner",
      "env": {
        "TEST_BROWSER_HEADLESS": "${input:ftHeadless}"
      },
      "program": "${workspaceFolder}/scripts/functional_test_runner",
      "internalConsoleOptions": "openOnSessionStart",
      "outputCapture": "std",
      "presentation": {
        "hidden": false,
        "group": "Functional tests",
        "order": 1
      },
      "args": ["--config", "${input:ftConfig}", "--grep", "${input:grep}", "--verbose"],
      "skipFiles": ["<node_internals>/**", "**/node_modules/**"]
    }
  ]
}
		
  1. 点击侧边栏中的“运行和调试”图标。
  2. 从下拉菜单中选择“FT Server”并点击绿色播放按钮以启动功能测试服务器。
  3. 出现提示时,输入你的功能测试配置文件的相对路径。
  4. 监控“DEBUG CONSOLE”(调试控制台)标签页,直到功能测试服务器准备就绪。
  5. 从下拉菜单中选择“FT Runner”并点击绿色播放按钮以启动功能测试运行器。
  6. 出现提示时,选择以无头模式 (headless mode) 或在 Chrome 浏览器中运行测试。
  7. 功能测试配置文件的路径应与步骤 4 中的相同。
  8. 出现提示时,可选择输入 grep 模式以过滤测试。留空则运行所有测试。

运行 Kibana 时,启用详细日志记录有时很有帮助。

yarn start --verbose

使用详细日志记录通常会产生比你感兴趣的内容多得多的信息。日志文档涵盖了更改特定类型日志级别的方法。

在存储于 config/kibana.dev.yml 中的以下配置示例中,我们记录了所有 Elasticsearch 查询以及 Management 插件创建的任何日志。

logging:
  appenders:
    console:
      type: console
      layout:
        type: pattern
        highlight: true
  root:
    appenders: [default, console]
    level: info

  loggers:
    - name: plugins.management
      level: debug
    - name: elasticsearch.query
      level: debug
		

Kibana 内置了用于调试和可观测性的 OpenTelemetry 插桩。以下章节介绍了追踪配置。

要启用 OTel 追踪,请应用以下配置

telemetry.tracing:
  enabled: true
  sample_rate: 1
  exporters:
    - proto:
        url: <URL_TO_THE_OTLP_ENDPOINT>
        headers:
          authorization: 'ApiKey [REDACTED]'
		
  1. 1 为默认值

OTLP 端点可以是任何 OTel/EDOT 收集器。建议使用 Elastic Cloud 提供的 mOTLP(托管 OTLP)端点。获取 OTLP 端点和 API 密钥的说明可在 开始使用追踪和 APM 中找到。

Kibana 支持 gRPC、protobuf 和纯 HTTP 协议来导出 OTel 追踪。所使用的协议在配置中通过导出器声明中的顶级属性名称指定。所有协议的配置语法相同。

telemetry.tracing:
  enabled: true
  sample_rate: 1
  exporters:
    - grpc:
        url: <URL_TO_THE_GRPC_OTLP_ENDPOINT>
        headers:
          authorization: 'ApiKey [REDACTED]'
    - proto:
        url: <URL_TO_THE_PROTO_OTLP_ENDPOINT>
        headers:
          authorization: 'ApiKey [REDACTED]'
    - http:
        url: <URL_TO_THE_HTTP_OTLP_ENDPOINT>
        headers:
          authorization: 'ApiKey [REDACTED]'
		
  1. 1 为默认值
提示

gRPC 通常在与 protobuf 和 http 协议不同的端口上运行。

使用 mOTLP 端点时,端口相同,但端点会发生变化

  • gRPC 使用根路径 (https://my-ech-deployment.ingest.europe-west1.gcp.elastic-cloud.com:443)
  • Protobuf 和 HTTP 使用路径 /v1/traces (https://my-ech-deployment.ingest.europe-west1.gcp.elastic-cloud.com:443/v1/traces)
重要提示

OTel 插桩仅在服务器端可用。对于 RUM 可观测性,Kibana 使用 Elastic RUM

一旦 用于 RUM 的 OTel 准备好用于生产环境,浏览器中的 OTel 插桩将在未来提供。

telemetry.tracing.enabledtrue 时,服务器端 Elastic APM 默认被禁用,但 kibana-frontend (RUM) 服务保持活跃。Elastic APM 和 OpenTelemetry 追踪不能同时启用;在启用 OTel 追踪的同时设置 elastic.apm.active: true 会导致 Kibana 启动失败。你仍然可以使用 Elastic RUM 收集浏览器追踪。

要在 OTel 追踪的同时启用 Elastic RUM,请在 Kibana 配置中定义 APM 服务器的 URL。代理接受的任何设置 也是接受的

elastic:
  apm:
    serverUrl: https://my-ech-deployment.apm.europe-west1.gcp.cloud.es.io:443
    # RUM is enabled by default when telemetry.tracing.enabled is true; serverUrl is required to send data to your deployment.
    # Below are optional
    environment: localhost
    transactionSampleRate: 1
		
提示

RUM 从浏览器发送追踪时无需嵌入凭据。建议使用为 RUM 接收配置的 Elastic Cloud Hosted (ECH) APM 端点。无服务器 APM 端点通常需要经过身份验证的接收,通常不适合 RUM,除非你的部署明确支持未经身份验证的浏览器接收。

警告

此方法已弃用。请改用 OTel 追踪

Kibana 集成了 APM 的 node 和 RUM 代理。要了解有关 APM 如何工作及其报告内容的更多信息,请参阅 文档

我们目前跟踪来自 Kibana 的以下类型的事务

前端 (APM RUM)

  • http-request- 跟踪所有传出的 API 请求
  • page-load - 跟踪 kibana 的初始加载时间
  • app-change - 跟踪应用程序变更

后端 (APM Node)

  • request - 跟踪所有传入的 API 请求
  • kibana-platform - 跟踪服务器启动阶段(预引导、设置和启动)
  • task-manager - 跟踪任务管理器的操作,包括认领待处理任务并将其标记为运行中
  • task-run - 跟踪单个任务的执行

在某些情况下,在本地开发环境中启用 APM 以在手动或自动测试期间初步了解功能性能是很有益的。

  1. 创建一个辅助监控部署来收集 APM 数据。最简单的选择是使用 Elastic Cloud 创建一个新部署。
  2. 打开来自监控部署的 Kibana(不是你本地的 Kibana),转到 Integrations 并启用 Elastic APM 集成。
  3. 向下滚动并复制服务器 URL 和密钥令牌。你也可以在云控制台的 APM & Fleet 下找到它们。
  4. 在你的本地开发环境中创建或打开 config\kibana.dev.yml
  5. 添加以下设置
elastic.apm.active: true
elastic.apm.serverUrl: <serverUrl>
elastic.apm.secretToken: <secretToken>
		
  1. 运行 Kibana 并开始使用它后,两个新服务 (kibana, kibana-frontend) 应该会出现在 APM 部署的 APM UI 下。 APM UI

也可以通过环境变量启用 APM。它们优先于 kibana.ymlkibana.dev.yml 中定义的任何值

设置以下环境变量以启用 APM

  • ELASTIC_APM_ACTIVE
  • ELASTIC_APM_SERVER_URL
  • ELASTIC_APM_SECRET_TOKEN 或 ELASTIC_APM_API_KEY
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.