-
Notifications
You must be signed in to change notification settings - Fork 497
[Platform Observability] Create initial PO package for ingesting kibana ECS formatted logs #3622
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 9 commits
ba764cb
f91647a
2da545b
a8e4920
b171f93
d6cacfd
a3bd0c0
6e781a3
0b03ec6
33f32eb
8e47160
3e74c73
14dc44f
21524e8
8cb34da
55c80e8
5dcc1fe
27a23aa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
dependencies: | ||
ecs: | ||
reference: [email protected] | ||
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Platform Observability | ||
|
||
## Compatibility | ||
|
||
This package works with Kibana 8.0.0 and later. | ||
|
||
## Kibana logs | ||
|
||
The Kibana integration collects logs from [Kibana](https://www.elastic.co/guide/en/kibana/current/introduction.html) instance. | ||
|
||
### Logs | ||
|
||
#### Audit | ||
|
||
Configure `Path` pointing to the location where audit logs will be created, based on the [Kibana Audit logging settings](https://www.elastic.co/guide/en/kibana/current/security-settings-kb.html#audit-logging-settings) in `kibana.yml` | ||
matschaffer marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
{{fields "kibana_audit"}} | ||
|
||
#### Log | ||
|
||
Configure `Path` pointing to the location where the logs will be created, based on the [Kibana logging settings](https://www.elastic.co/guide/en/kibana/current/logging-configuration.html#logging-appenders) in `kibana.yml` | ||
|
||
{{fields "kibana_log"}} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# newer versions go on top | ||
- version: "0.0.1" | ||
changes: | ||
- description: Initial draft of the package | ||
type: enhancement | ||
link: https://github.com/elastic/integrations/pull/1 | ||
matschaffer marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"event":{"action":"http_request","category":["web"],"outcome":"unknown"},"http":{"request":{"method":"get"}},"url":{"domain":"localhost","path":"/internal/security/session","port":5601,"scheme":"http"},"user":{"name":"elastic","roles":["superuser"]},"kibana":{"space_id":"default","session_id":"ccZ0sbxrmmJwo+/y2Mn1tmGIrKOuZYaF8voUh0SkA/k="},"trace":{"id":"1c8c5808-d2d6-41fc-8cb7-998aa8996be9"},"ecs":{"version":"8.0.0"},"@timestamp":"2022-06-29T12:05:03.742+00:00","message":"User is requesting [/internal/security/session] endpoint","log":{"level":"INFO","logger":"plugins.security.audit.ecs"},"process":{"pid":7},"transaction":{"id":"f8863d86567119e6"}} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
{ | ||
"expected": [ | ||
{ | ||
"@timestamp": "2022-06-29T12:05:03.742+00:00", | ||
"data_stream": { | ||
"dataset": "kibana-audit-log", | ||
"namespace": "platform-observability", | ||
"type": "logs" | ||
}, | ||
"ecs": { | ||
"version": "8.0.0" | ||
}, | ||
"event": { | ||
"action": "http_request", | ||
"category": [ | ||
"web" | ||
], | ||
"dataset": "kibana-audit-log", | ||
"outcome": "unknown" | ||
}, | ||
"http": { | ||
"request": { | ||
"method": "get" | ||
} | ||
}, | ||
"kibana": { | ||
"session_id": "ccZ0sbxrmmJwo+/y2Mn1tmGIrKOuZYaF8voUh0SkA/k=", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @jkakavas this feels like it could be risky to log (from a audit kibana log sample). Do you know if we should chase it down, or with whom? Or maybe if you know it's safe already? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why would it be risky in your opinion? By looking at the docs, it seems that it's an id associated with the current login. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ah, thanks that helps. At least this is nothing new so if it's an issue we don't have to fix it in this PR. I just get a little nervous whenever I see a base64 string in a log stream. Too many occasions when they turned out to be access-providing tokens (like JWT). Hopefully this is just an encoded UUID. 😅 |
||
"space_id": "default" | ||
}, | ||
"log": { | ||
"level": "INFO", | ||
"logger": "plugins.security.audit.ecs" | ||
}, | ||
"message": "User is requesting [/internal/security/session] endpoint", | ||
"process": { | ||
"pid": 7 | ||
}, | ||
"trace": { | ||
"id": "1c8c5808-d2d6-41fc-8cb7-998aa8996be9" | ||
}, | ||
"transaction": { | ||
"id": "f8863d86567119e6" | ||
}, | ||
"url": { | ||
"domain": "localhost", | ||
"path": "/internal/security/session", | ||
"port": 5601, | ||
"scheme": "http" | ||
}, | ||
"user": { | ||
"name": "elastic", | ||
"roles": [ | ||
"superuser" | ||
] | ||
} | ||
} | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
paths: | ||
{{#each paths}} | ||
- {{this}} | ||
{{/each}} | ||
{{#if processors}} | ||
processors: | ||
{{processors}} | ||
{{/if}} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
--- | ||
description: Pipeline for parsing Kibana Audit ECS formatted logs | ||
processors: | ||
- remove: | ||
field: data_stream.dataset | ||
ignore_missing: true | ||
- remove: | ||
field: event.dataset | ||
ignore_missing: true | ||
- set: | ||
description: Uses event.dataset as a default for data_stream.dataset if the latter is not set. | ||
matschaffer marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
field: data_stream.dataset | ||
copy_from: event.dataset | ||
if: ctx.event?.dataset instanceof String && ctx.event.dataset.length() > 1 | ||
override: false | ||
- script: | ||
source: | | ||
ctx.data_stream.dataset = /[\/*?"<>|, #:-]/.matcher(ctx.data_stream.dataset).replaceAll('_') | ||
if: ctx.data_stream?.dataset != null | ||
- script: | ||
source: | | ||
ctx.data_stream.namespace = /[\/*?"<>|, #:]/.matcher(ctx.data_stream.namespace).replaceAll('_') | ||
if: ctx.data_stream?.namespace != null | ||
- set: | ||
field: data_stream.type | ||
value: logs | ||
- set: | ||
field: data_stream.dataset | ||
value: kibana-audit-log | ||
override: false | ||
- set: | ||
field: data_stream.namespace | ||
value: platform-observability | ||
override: false | ||
- set: | ||
field: event.dataset | ||
copy_from: data_stream.dataset | ||
- rename: | ||
field: message | ||
target_field: _ecs_json_message | ||
if: |- | ||
def message = ctx.message; | ||
return message != null | ||
&& message.startsWith('{') | ||
&& message.endsWith('}') | ||
&& message.contains('"@timestamp"') | ||
ignore_missing: true | ||
- json: | ||
field: _ecs_json_message | ||
add_to_root: true | ||
add_to_root_conflict_strategy: merge | ||
allow_duplicate_keys: true | ||
if: ctx.containsKey('_ecs_json_message') | ||
on_failure: | ||
- rename: | ||
field: _ecs_json_message | ||
target_field: message | ||
ignore_missing: true | ||
- set: | ||
field: error.message | ||
value: Error while parsing JSON | ||
override: false | ||
- remove: | ||
field: _ecs_json_message | ||
ignore_missing: true | ||
on_failure: | ||
- set: | ||
field: error.message | ||
value: "{{ _ingest.on_failure_message }}" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
- name: data_stream.type | ||
type: constant_keyword | ||
description: Data stream type. | ||
- name: data_stream.dataset | ||
type: constant_keyword | ||
description: Data stream dataset. | ||
- name: data_stream.namespace | ||
type: constant_keyword | ||
description: Data stream namespace. | ||
- name: "@timestamp" | ||
type: date | ||
description: Event timestamp. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
- name: kibana.session_id | ||
description: The ID of the user session associated with this event. Each login attempt results in a unique session id | ||
type: keyword | ||
- name: kibana.space_id | ||
description: The id of the space associated with this event. | ||
type: keyword |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# only used for tests | ||
- name: ecs.version | ||
external: ecs | ||
- name: http.request.method | ||
external: ecs | ||
- name: log.level | ||
external: ecs | ||
- name: log.logger | ||
external: ecs | ||
- name: message | ||
external: ecs | ||
- name: process.pid | ||
external: ecs | ||
- name: trace.id | ||
external: ecs | ||
- name: transaction.id | ||
external: ecs | ||
- name: url.domain | ||
external: ecs | ||
- name: url.path | ||
external: ecs | ||
- name: url.port | ||
external: ecs | ||
- name: url.query | ||
external: ecs | ||
- name: url.scheme | ||
external: ecs | ||
- name: user.name | ||
external: ecs | ||
- name: user.roles | ||
external: ecs |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
type: logs | ||
title: Platform Observability Kibana audit logs | ||
release: experimental | ||
matschaffer marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
streams: | ||
- input: logfile | ||
vars: | ||
- name: paths | ||
type: text | ||
title: Paths | ||
multi: true | ||
required: true | ||
show_user: true | ||
default: | ||
- /var/log/kibana/*_audit.json | ||
template_path: log.yml.hbs | ||
title: Kibana audit logs | ||
description: Collect Kibana audit logs |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{"ecs":{"version":"8.0.0"},"@timestamp":"2022-06-29T11:24:17.898+00:00","message":"Trying to authenticate user request to /login.","log":{"level":"DEBUG","logger":"plugins.security.http"},"process":{"pid":7},"trace":{"id":"e6e1c25936546ec690b11a3b78b2a8db"},"transaction":{"id":"3be6994d7f6d5465"}} | ||
{"http":{"request":{"id":"unknownId","method":"GET"},"response":{"body":{"bytes":118},"status_code":200}},"url":{"path":"/_nodes","query":"filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip"},"ecs":{"version":"8.0.0"},"@timestamp":"2022-07-14T10:35:25.366+00:00","message":"200 - 118.0B\nGET /_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip","log":{"level":"DEBUG","logger":"elasticsearch.query.data"},"process":{"pid":7},"trace":{"id":"0cd8dd5a3483159a43c07e9205432775"},"transaction":{"id":"6301eca88fba8d99"}} | ||
{"_tag":"Right","right":"update_aliases_succeeded","ecs":{"version":"8.0.0"},"@timestamp":"2022-07-04T09:17:38.611+00:00","message":"[.kibana] MARK_VERSION_INDEX_READY RESPONSE","log":{"level":"DEBUG","logger":"savedobjects-service"},"process":{"pid":7},"trace":{"id":"a167d1124764379d4121b357e20baee2"},"transaction":{"id":"14717ae6e3b30d5a"}} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
{ | ||
"expected": [ | ||
{ | ||
"@timestamp": "2022-06-29T11:24:17.898+00:00", | ||
"data_stream": { | ||
"dataset": "kibana-logs", | ||
"namespace": "platform-observability", | ||
"type": "logs" | ||
}, | ||
"ecs": { | ||
"version": "8.0.0" | ||
}, | ||
"event": { | ||
"dataset": "kibana-logs" | ||
}, | ||
"log": { | ||
"level": "DEBUG", | ||
"logger": "plugins.security.http" | ||
}, | ||
"message": "Trying to authenticate user request to /login.", | ||
"process": { | ||
"pid": 7 | ||
}, | ||
"trace": { | ||
"id": "e6e1c25936546ec690b11a3b78b2a8db" | ||
}, | ||
"transaction": { | ||
"id": "3be6994d7f6d5465" | ||
} | ||
}, | ||
{ | ||
"@timestamp": "2022-07-14T10:35:25.366+00:00", | ||
"data_stream": { | ||
"dataset": "kibana-logs", | ||
"namespace": "platform-observability", | ||
"type": "logs" | ||
}, | ||
"ecs": { | ||
"version": "8.0.0" | ||
}, | ||
"event": { | ||
"dataset": "kibana-logs" | ||
}, | ||
"http": { | ||
"request": { | ||
"id": "unknownId", | ||
"method": "GET" | ||
}, | ||
"response": { | ||
"body": { | ||
"bytes": 118 | ||
}, | ||
"status_code": 200 | ||
} | ||
}, | ||
"log": { | ||
"level": "DEBUG", | ||
"logger": "elasticsearch.query.data" | ||
}, | ||
"message": "200 - 118.0B\nGET /_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip", | ||
"process": { | ||
"pid": 7 | ||
}, | ||
"trace": { | ||
"id": "0cd8dd5a3483159a43c07e9205432775" | ||
}, | ||
"transaction": { | ||
"id": "6301eca88fba8d99" | ||
}, | ||
"url": { | ||
"path": "/_nodes", | ||
"query": "filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip" | ||
} | ||
}, | ||
{ | ||
"@timestamp": "2022-07-04T09:17:38.611+00:00", | ||
"data_stream": { | ||
"dataset": "kibana-logs", | ||
"namespace": "platform-observability", | ||
"type": "logs" | ||
}, | ||
"ecs": { | ||
"version": "8.0.0" | ||
}, | ||
"event": { | ||
"dataset": "kibana-logs" | ||
}, | ||
"log": { | ||
"level": "DEBUG", | ||
"logger": "savedobjects-service" | ||
}, | ||
"message": "[.kibana] MARK_VERSION_INDEX_READY RESPONSE", | ||
"process": { | ||
"pid": 7 | ||
}, | ||
"trace": { | ||
"id": "a167d1124764379d4121b357e20baee2" | ||
}, | ||
"transaction": { | ||
"id": "14717ae6e3b30d5a" | ||
} | ||
} | ||
] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
paths: | ||
{{#each paths}} | ||
- {{this}} | ||
{{/each}} | ||
{{#if processors}} | ||
processors: | ||
{{processors}} | ||
{{/if}} |
Uh oh!
There was an error while loading. Please reload this page.