Skip to content

Commit

Permalink
Merge branch 'main' into alert-details-tab
Browse files Browse the repository at this point in the history
  • Loading branch information
mitodrummer authored Mar 22, 2022
2 parents 38288cf + 4cd7f87 commit 74098ed
Show file tree
Hide file tree
Showing 328 changed files with 6,612 additions and 2,515 deletions.
6 changes: 6 additions & 0 deletions .buildkite/pipelines/artifacts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
steps:
- command: .buildkite/scripts/steps/artifacts/build.sh
label: Build Kibana Artifacts
agents:
queue: c2-16
timeout_in_minutes: 60
11 changes: 11 additions & 0 deletions .buildkite/scripts/steps/artifacts/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env bash

set -euo pipefail

.buildkite/scripts/bootstrap.sh

echo "--- Build Kibana Distribution"
node scripts/build --all-platforms --debug --skip-docker-cloud

echo "--- Build dependencies report"
node scripts/licenses_csv_report --csv=target/dependencies_report.csv
1 change: 0 additions & 1 deletion .buildkite/scripts/steps/cloud/build_and_deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ if [ -z "${CLOUD_DEPLOYMENT_ID}" ]; then
else
ecctl deployment show "$CLOUD_DEPLOYMENT_ID" --generate-update-payload | jq '
.resources.kibana[0].plan.kibana.docker_image = "'$CLOUD_IMAGE'" |
.resources.elasticsearch[0].plan.elasticsearch.docker_image = "'$ELASTICSEARCH_CLOUD_IMAGE'" |
(.. | select(.version? != null).version) = "'$VERSION'"
' > /tmp/deploy.json
ecctl deployment update "$CLOUD_DEPLOYMENT_ID" --track --output json --file /tmp/deploy.json &> "$JSON_FILE"
Expand Down
Binary file added dev_docs/tutorials/apm_ui.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 46 additions & 0 deletions dev_docs/tutorials/debugging.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,49 @@ logging:
- name: elasticsearch.query
level: debug
```

## Debugging Kibana with APM

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](https://www.elastic.co/guide/en/apm/guide/current/index.html).

We currently track the following types of transactions from Kibana:

Frontend (APM RUM):
* `http-request`- tracks all outgoing API requests
* `page-load` - tracks the inidial loading time of kibana
* `app-change` - tracks application changes

Backend (APM Node):
* `request` - tracks all incoming API requests
* `kibana-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 running
* `task-run` - tracks the execution of individual tasks

### Enabling APM on a local environment

In 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.

1. Create a secondary monitoring deployment to collect APM data. The easiest option is to use [Elastic Cloud](https://cloud.elastic.co/deployments) to create a new deployment.
2. Open Kibana, go to `Integrations` and enable the Elastic APM integration.
3. Scroll down and copy the server URL and secret token. You may also find them in your cloud console under APM & Fleet.
4. Create or open `config\kibana.dev.yml` on your local development environment.
5. Add the following settings:
```
elastic.apm.active: true
elastic.apm.serverUrl: <serverUrl>
elastic.apm.secretToken: <secretToken>
```
6. Once you run kibana and start using it, two new services (kibana, kibana-frontend) should appear under the APM UI on the APM deployment.
![APM UI](./apm_ui.png)

### Enabling APM via environment variables

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:

* ELASTIC_APM_ACTIVE
* ELASTIC_APM_SERVER_URL
* ELASTIC_APM_SECRET_TOKEN
2 changes: 1 addition & 1 deletion dev_docs/tutorials/endpoints.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ HTTP method. All these APIs share the same signature, and receive two parameters

When invoked, the `handler` receive three parameters: `context`, `request`, and `response`, and must return a response that will be sent to serve
the request.
- `context` is a request-bound context exposed for the request. It allows for example to use an elasticsearch client bound to the request's credentials.
- `context` is a request-bound context exposed for the request. For example, it allows to use an elasticsearch client bound to the request's credentials.
- `request` contains information related to the request, such as the path and query parameter
- `response` contains factory helpers to create the response to return from the endpoint

Expand Down
7 changes: 5 additions & 2 deletions docs/api/cases.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ You can create, manage, configure, and send cases to external systems with
these APIs:

* {security-guide}/cases-api-add-comment.html[Add comment]
* {security-guide}/cases-api-create.html[Create case]
* <<cases-api-create>>
* {security-guide}/cases-api-delete-case.html[Delete case]
* {security-guide}/cases-api-delete-all-comments.html[Delete all comments]
* {security-guide}/cases-api-delete-comment.html[Delete comment]
Expand All @@ -24,5 +24,8 @@ these APIs:
* {security-guide}/cases-api-push.html[Push case]
* {security-guide}/assign-connector.html[Set default Elastic Security UI connector]
* {security-guide}/case-api-update-connector.html[Update case configurations]
* {security-guide}/cases-api-update.html[Update case]
* <<cases-api-update>>
* {security-guide}/cases-api-update-comment.html[Update comment]

include::cases/cases-api-create.asciidoc[leveloffset=+1]
include::cases/cases-api-update.asciidoc[leveloffset=+1]
237 changes: 237 additions & 0 deletions docs/api/cases/cases-api-create.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
[[cases-api-create]]
== Create case API
++++
<titleabbrev>Create case</titleabbrev>
++++

Creates a case.

=== Request

`POST <kibana host>:<port>/api/cases`

`POST <kibana host>:<port>/s/<space_id>/api/cases`

=== Prerequisite

You must have `all` privileges for the *Cases* feature in the *Management*,
*{observability}*, or *Security* section of the
<<kibana-feature-privileges,{kib} feature privileges>>, depending on the
`owner` of the case you're creating.

=== Path parameters

`<space_id>`::
(Optional, string) An identifier for the space. If it is not specified, the
default space is used.

=== Request body

`connector`::
(Required, object) An object that contains the connector configuration.
+
.Properties of `connector`
[%collapsible%open]
====
`fields`::
(Required, object) An object containing the connector fields.
+
--
To create a case without a connector, specify `null`. If you want to omit any
individual field, specify `null` as its value.
For {ibm-r} connectors, specify:
`issueTypes`:::
(Required, array of numbers) The type of the incident.
`severityCode`:::
(Required, number) The severity code of the incident.
For {jira} connectors, specify:
`issueType`:::
(Required, string) The type of the issue.
`parent`:::
(Required, string) The key of the parent issue, when the issue type is `Sub-task`.
`priority`:::
(Required, string) The priority of the issue.
For {sn-itsm} connectors, specify:
`category`:::
(Required, string) The category of the incident.
`impact`:::
(Required, string) The effect an incident had on business.
`severity`:::
(Required, string) The severity of the incident.
`subcategory`:::
(Required, string) The subcategory of the incident.
`urgency`:::
(Required, string) The extent to which the incident resolution can be delayed.
For {sn-sir} connectors, specify:
`category`:::
(Required, string) The category of the incident.
`destIp`:::
(Required, string) A comma separated list of destination IPs.
`malwareHash`:::
(Required, string) A comma separated list of malware hashes.
`malwareUrl`:::
(Required, string) A comma separated list of malware URLs.
`priority`:::
(Required, string) The priority of the incident.
`sourceIp`:::
(Required, string) A comma separated list of source IPs.
`subcategory`:::
(Required, string) The subcategory of the incident.
For {swimlane} connectors, specify:
`caseId`:::
(Required, string) The case ID.
--
`id`::
(Required, string) The identifier for the connector. To create a case without a
connector, use `none`.
//To retrieve connector IDs, use <<cases-api-find-connectors>>).
`name`::
(Required, string) The name of the connector. To create a case without a
connector, use `none`.
`type`::
(Required, string) The type of the connector. Valid values are: `.jira`, `.none`,
`.resilient`,`.servicenow`, `.servicenow-sir`, and `.swimlane`. To create a case
without a connector, use `.none`.
====

`description`::
(Required, string) The description for the case.

`owner`::
(Required, string) The application that owns the case. Valid values are:
`cases`, `observability`, or `securitySolution`. This value affects
whether the case is visible in the {stack-manage-app}, {observability}, or
{security-app}.

`settings`::
(Required, object)
An object that contains the case settings.
+
.Properties of `settings`
[%collapsible%open]
====
`syncAlerts`::
(Required, boolean) Turns alert syncing on or off.
====

`tags`::
(Required, string array) The words and phrases that help
categorize cases. It can be an empty array.

`title`::
(Required, string) A title for the case.

=== Response code

`200`::
Indicates a successful call.

=== Example

[source,sh]
--------------------------------------------------
POST api/cases
{
"description": "James Bond clicked on a highly suspicious email
banner advertising cheap holidays for underpaid civil servants.",
"title": "This case will self-destruct in 5 seconds",
"tags": [
"phishing",
"social engineering"
],
"connector": {
"id": "131d4448-abe0-4789-939d-8ef60680b498",
"name": "My connector",
"type": ".jira",
"fields": {
"issueType": "10006",
"priority": "High",
"parent": null
}
},
"settings": {
"syncAlerts": true
},
"owner": "securitySolution"
}
--------------------------------------------------
// KIBANA

The API returns a JSON object that includes the user who created the case and
the case identifier, version, and creation time. For example:

[source,json]
--------------------------------------------------
{
"id": "66b9aa00-94fa-11ea-9f74-e7e108796192", <1>
"version": "WzUzMiwxXQ==",
"comments": [],
"totalComment": 0,
"totalAlerts": 0,
"title": "This case will self-destruct in 5 seconds",
"tags": [
"phishing",
"social engineering",
"bubblegum"
],
"settings": {
"syncAlerts": true
},
"owner": "securitySolution",
"description": "James Bond clicked on a highly suspicious email banner advertising cheap holidays for underpaid civil servants. Operation bubblegum is active. Repeat - operation bubblegum is now active",
"closed_at": null,
"closed_by": null,
"created_at": "2022-05-13T09:16:17.416Z",
"created_by": {
"email": "ahunley@imf.usa.gov",
"full_name": "Alan Hunley",
"username": "ahunley"
},
"status": "open",
"updated_at": null,
"updated_by": null,
"connector": {
"id": "131d4448-abe0-4789-939d-8ef60680b498", <2>
"name": "My connector",
"type": ".jira",
"fields": {
"issueType": "10006",
"parent": null,
"priority": "High"
}
},
"external_service": null <3>
}
--------------------------------------------------

<1> The case identifier is also its saved object ID (`savedObjectId`), which is
used when pushing cases to external systems.
<2> The default connector used to push cases to external services.
<3> The `external_service` object stores information about the incident after it
is pushed to an external incident management system.
Loading

0 comments on commit 74098ed

Please sign in to comment.