开发环境调试
从源码运行 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。
- 创建或修改你的
.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
}
]
}
- 使用
yarn es snapshot启动 Elasticsearch。 - 使用
yarn debug或node --inspect scripts/kibana --dev启动 Kibana。 - 在 VS Code 中,点击侧边栏中的“运行和调试”图标。
- 从下拉菜单中选择“Debug Kibana Server”。
- 点击绿色播放按钮开始调试。
- 创建或修改你的
.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
}
]
}
- 使用
yarn es snapshot启动 Elasticsearch,但不要启动 Kibana,并关闭任何正在运行的 Kibana 实例。 - 在 VS Code 中,点击侧边栏中的“运行和调试”图标。
- 从下拉菜单中选择“Launch and Debug Kibana”。
- 点击绿色播放按钮开始调试。你可以选择是否运行开发示例。
如有必要,将以下内容添加到你的 .vscode/settings.json 文件中。
// self managed
"jest.jestCommandLine": "yarn test:jest --runInBand"
有关如何运行和调试单元测试的信息,请参阅 VS Code 的 Jest 扩展文档。
- 创建或修改你的
.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/**"]
}
]
}
- 点击侧边栏中的“运行和调试”图标。
- 从下拉菜单中选择“FT Server”并点击绿色播放按钮以启动功能测试服务器。
- 出现提示时,输入你的功能测试配置文件的相对路径。
- 监控“DEBUG CONSOLE”(调试控制台)标签页,直到功能测试服务器准备就绪。
- 从下拉菜单中选择“FT Runner”并点击绿色播放按钮以启动功能测试运行器。
- 出现提示时,选择以无头模式 (headless mode) 或在 Chrome 浏览器中运行测试。
- 功能测试配置文件的路径应与步骤 4 中的相同。
- 出现提示时,可选择输入 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 为默认值
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 为默认值
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.enabled 为 true 时,服务器端 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 以在手动或自动测试期间初步了解功能性能是很有益的。
- 创建一个辅助监控部署来收集 APM 数据。最简单的选择是使用 Elastic Cloud 创建一个新部署。
- 打开来自监控部署的 Kibana(不是你本地的 Kibana),转到
Integrations并启用 Elastic APM 集成。 - 向下滚动并复制服务器 URL 和密钥令牌。你也可以在云控制台的 APM & Fleet 下找到它们。
- 在你的本地开发环境中创建或打开
config\kibana.dev.yml。 - 添加以下设置
elastic.apm.active: true
elastic.apm.serverUrl: <serverUrl>
elastic.apm.secretToken: <secretToken>
- 运行 Kibana 并开始使用它后,两个新服务 (kibana, kibana-frontend) 应该会出现在 APM 部署的 APM UI 下。

也可以通过环境变量启用 APM。它们优先于 kibana.yml 或 kibana.dev.yml 中定义的任何值
设置以下环境变量以启用 APM
- ELASTIC_APM_ACTIVE
- ELASTIC_APM_SERVER_URL
- ELASTIC_APM_SECRET_TOKEN 或 ELASTIC_APM_API_KEY