Irgendwie habe ich nie das XPack von Elastic Search verstanden. Unter welchen Umständen kann man das nun kostenlos verwenden, etc.
Da waren die Security Plugins von OpenDistro einfach nützlich und klar. Nun ist OpenDistro inzwischen OpenSearch und Elastic versucht im Überlebenskampf gegen Amazon seine Geschäftsgrundlage mit proprietären Lizenzen zu sichern. Als Nebeneffekt werden künstlich die APIs gegen die die Beats Module laufen auf Elastic-Konformität geprüft.
Die Dashboards, Visualizations, Searches sollten allerdings weitestgehend unabhängig von Elastic Search und Kibana sein (zumindest innerhalb der Version 7). Deshalb habe ich mit ein paar Tricks die aktuellen JSON Dateien von Winlogbeat extrahiert und in OpenDashboards hochgeldaten.
Mein Setup ist:
- WinlogBeat 7.15
- Fluentd 1.14
- Opensearch 1.2.4
- OpenDashboards 1.2.0
Dashboard, Searches und Visualizations liegen bei Winlogbeat im ordner kibana/7/ als JSON Dateien. OpenSearch kann vernünftig nur NDJSON Dateien importieren, wobei es sich um Zusammengefügte JSON Dateien pro Zeile handelt.
Mit dem JSON Allzwecktool jq kann man die vorhandenen JSON Dateien recht einfach umwandeln:
jq -c '.attributes.kibanaSavedObjectMeta.searchSourceJSON = "\( .attributes.kibanaSavedObjectMeta.searchSourceJSON )"' \ kibana/7/search/*.json > search.ndjson
jq -c '.attributes.kibanaSavedObjectMeta.searchSourceJSON = "\( .attributes.kibanaSavedObjectMeta.searchSourceJSON )" | .attributes.visState = "\( .attributes.visState )" | .attributes.uiStateJSON = "\( .attributes.uiStateJSON )"' \ kibana/7/visualization/*.json | sed 's/7\.14/7.10/g' > visualization.ndjson
Die Dashboard Dateien waren etwas störrischer, dafür brauchte ich eine Schleife:
rm -f dashboard.ndjson for I in kibana/7/dashboard/*.json ; do if [ $(grep -c '\\\\\\' "$I") -gt 0 ] ; then jq -c '.attributes.optionsJSON = (.attributes.optionsJSON | fromjson) | .attributes.kibanaSavedObjectMeta.searchSourceJSON = ( .attributes.kibanaSavedObjectMeta.searchSourceJSON | fromjson ) | .attributes.panelsJSON = ( .attributes.panelsJSON | fromjson )' \ "$I" | sed 's/7\.14\.0/7.9.3/g' >> dashboard.ndjson else jq -c '.' "$I" | sed -E -e 's/7\.14\.0/7.9.3/g' -e 's/"name":"[^:]*:/"name":"/g' >> dashboard.ndjson fi done
Zwei entscheidende Komponenten können direkt aus Winlogbeat.exe exportiert werden:
Das Index-Pattern für OpenDashboards:
./winlogbeat.exe export index-pattern | jq -c '.' > index-pattern.ndjson
Unabdingbar ist das index-template für OpenSearch (FluentD erstellt bei mir Indexes mit dem Namen winlogbeat-YYYYMMDD). Einige Typen gibt es nicht bzw. heißen sie anders, deshalb ist am Template ein wenig Zusatzaufwanderforderlich.
./winlogbeat.exe export template | sed -e 's/"winlogbeat-.*"/"winlogbeat-*"/' \ -e 's/flattened/keyword/g' -e 's/constant_keyword/keyword/g' | \ jq '.template = { "settings": .settings, "mappings": .mappings } | .priority = .order | del( .mappings ) | del( .settings ) | del( .order )' \ > index-template.json
Anschließend können die gewonnenen Dateien in OpenSearch bzw. OpenDashboards importiert werden. Z.B. direkt per cURL:
curl -u admin:admin -X POST http://localhost:9200/_index_template/winlogbeat \ -H 'content-type: application/json' -d @index-template.json curl -u admin:admin -X POST http://localhost:5601/api/saved_objects/_import?overwrite=true \ -H "kbn-xsrf: true" --form file=@index-pattern.ndjson curl -u admin:admin -X POST http://localhost:5601/api/saved_objects/_import?overwrite=true \ -H "kbn-xsrf: true" --form file=@search.ndjson curl -u admin:admin -X POST http://localhost:5601/api/saved_objects/_import?overwrite=true \ -H "kbn-xsrf: true" --form file=@visualization.ndjson curl -u admin:admin -X POST http://localhost:5601/api/saved_objects/_import?overwrite=true \ -H "kbn-xsrf: true" --form file=@dashboard.ndjson
Nachtrag:
Da Fluentd für alle Quellen täglich einen neuen Index erstellt (ähnlich wie Logstash), habe ich eine Index-Policy erstellt, die alle Indexes löscht, die älter als 30 Tage sind:
{ "policy": { "policy_id": "Cleanup", "description": "Cold after 1d, delete after 30d", "last_updated_time": 1620255437480, "schema_version": 1, "error_notification": null, "default_state": "hot", "states": [ { "name": "hot", "actions": [ { "replica_count": { "number_of_replicas": 1 } } ], "transitions": [ { "state_name": "cold", "conditions": { "min_index_age": "1d" } } ] }, { "name": "cold", "actions": [ { "read_only": {} } ], "transitions": [ { "state_name": "delete", "conditions": { "min_index_age": "30d" } } ] }, { "name": "delete", "actions": [ { "delete": {} } ], "transitions": [] } ], "ism_template": [ { "index_patterns": [ "*" ], "priority": 100, "last_updated_time": 1620255078516 } ] } }
Das Verständnis komplexer Themen wie Elastic Search und OpenDistro kann manchmal eine Herausforderung sein. In solchen Fällen kann eine Statistik beratung helfen, insbesondere bei der Analyse von Daten und der Strukturierung von akademischen Arbeiten. Eine Statistik Beratung bietet nicht nur Unterstützung bei komplexen Berechnungen, sondern hilft auch dabei, die Daten klar und verständlich zu präsentieren, um die richtigen Schlüsse zu ziehen.
AntwortenLöschen