dev_docs/tutorials/debugging.mdx
There are multiple ways to go about debugging Kibana when running from source.
You will need to run Node using --inspect or --inspect-brk in order to enable the inspector. Additional information can be found in the Node.js docs.
Once Node is running with the inspector enabled, you can open chrome://inspect in your Chrome browser. You should see a remote target for the inspector running. Click "inspect". You can now begin using the debugger.
Next we will go over how to exactly enable the inspector for different aspects of the codebase.
You will need to run Jest directly from the Node script:
node --inspect-brk node_modules/.bin/jest --runInBand --config [JestConfig] [TestPathPattern]
Additional information can be found in the Jest troubleshooting documentation.
node --inspect-brk scripts/functional_test_runner
node --inspect-brk scripts/kibana
See Debug code with Visual Studio Code and Node.js debugging in VS Code for more information.
There are two options for debugging server code in Kibana: Attach to process or Launch Kibana from VS Code.
.vscode/launch.json file with the following configuration. See the Visual Studio Code debug configuration documentation for more information.{
"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.yarn debug or node --inspect scripts/kibana --dev..vscode/launch.json file with the following configuration.{
"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, but don't start Kibana and kill any running instances of Kibana.Install the Jest extension for VS Code.
If necessary, add the following to your .vscode/settings.json file.
// self managed
"jest.jestCommandLine": "yarn test:jest --runInBand"
See the Jest extension for VS Code documentation for information on how to run and debug your unit tests.
.vscode/launch.json file with the following configuration{
"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/**"]
}
]
}
When running Kibana, it's sometimes helpful to enable verbose logging.
yarn start --verbose
Using verbose logging usually results in much more information than you're interested in. The logging documentation covers ways to change the log level of certain types.
In the following example of a configuration stored in config/kibana.dev.yml we are logging all Elasticsearch queries and any logs created by the Management plugin.
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 is integrated with APM's node and RUM agents. To learn more about how APM works and what it reports, refer to the documentation.
We currently track the following types of transactions from Kibana:
Frontend (APM RUM):
http-request- tracks all outgoing API requestspage-load - tracks the inidial loading time of kibanaapp-change - tracks application changesBackend (APM Node):
request - tracks all incoming API requestskibana-platform - tracks server initiation phases (preboot, setup and start)task-manager - tracks the operation of the task manager, including claiming pending tasks and marking them as runningtask-run - tracks the execution of individual tasksIn some cases, it is beneficial to enable APM on a local development environment to get an initial undesrtanding of a feature's performance during manual or automatic tests.
Integrations and enable the Elastic APM integration.config\kibana.dev.yml on your local development environment.elastic.apm.active: true
elastic.apm.serverUrl: <serverUrl>
elastic.apm.secretToken: <secretToken>
It is possible to enable APM via environment variables as well.
They take precedence over any values defined in kibana.yml or kibana.dev.yml
Set the following environment variables to enable APM: