Beide Seiten der vorigen Revision
Vorhergehende Überarbeitung
Nächste Überarbeitung
|
Vorhergehende Überarbeitung
|
elasticsearch [2025/03/27 11:39] jango [Query Builder Module] |
elasticsearch [2025/04/16 14:47] (aktuell) jango |
[[https://www.elastic.co/de/elasticsearch|Elasticsearch]] ist eine Open-Source-Such- und Analyselösung in [[coding:java|Java]], die hauptsächlich für das **Durchsuchen und Analysieren großer Mengen von Daten in Echtzeit** verwendet wird. Es wurde ursprünglich von der Firma Elastic entwickelt und ist ein wichtiger Bestandteil des sogenannten [[elk-stack|ELK-Stacks]] (Elasticsearch, [[Logstash]] und [[Kibana]]), der häufig zur Verarbeitung und Visualisierung von Logdaten eingesetzt wird. Elasticsearch **basiert auf Apache Lucene**, einer leistungsstarken, Open-Source-Textsuchbibliothek. | [[https://www.elastic.co/de/elasticsearch|Elasticsearch]] ist eine Open-Source-Such- und Analyselösung in [[coding:java|Java]], die hauptsächlich für das **Durchsuchen und Analysieren großer Mengen von Daten in Echtzeit** verwendet wird. Es wurde ursprünglich von der Firma Elastic entwickelt und ist ein wichtiger Bestandteil des sogenannten [[elk-stack|ELK-Stacks]] (Elasticsearch, [[Logstash]] und [[Kibana]]), der häufig zur Verarbeitung und Visualisierung von Logdaten eingesetzt wird. Elasticsearch **basiert auf Apache Lucene**, einer leistungsstarken, Open-Source-Textsuchbibliothek. |
| |
Siehe auch [[OpenSearch]] | Siehe auch [[OpenSearch]], [[Wazuh]] |
| |
| <code> |
| { |
| "query": { |
| "match_all": {} |
| }, |
| "sort": [{ "@timestamp": "asc" }] |
| } |
| </code> |
| |
| <code> |
| #Delete datastream |
| curl -X DELETE "https://172.21.0.134:9200/_data_stream/test-vie-srv-ex01" |
| |
| # find all agents |
| # windows |
| curl -X GET "https://172.21.0.134:9200/winlogbeat-8.17.4/_search?pretty" --insecure -u "xxxxxxx:xxxxxx" -d "{\"size\":0,\"aggs\":{\"unique_agents\":{\"terms\":{\"field\":\"agent.name\",\"size\":10000}}}}" -H "Content-Type:application/json" |
| # linux |
| curl -X GET "https://172.21.0.134:9200/winlogbeat-8.17.4/_search?pretty" --insecure -u "xxxxxxx:xxxxxx" -d '{"size":0,"aggs":{"unique_agents":{"terms":{"field":"agent.name","size":10000}}}}' -H "Content-Type:application/json" | jq -r '.aggregations.unique_agents.buckets[] | "\(.key)"' |
| </code> |
| |
[[https://www.elastic.co/de/what-is/open-x-pack|X-Pack]] ist eine Plugin-Suite und bietet eine Sammlung von kommerziellen Erweiterungen und Funktionen, um die Fähigkeiten von Elasticsearch zu erweitern. **X-Pack bietet verschiedene Module in den Bereichen Sicherheit, Überwachung, Reporting und [[machine_learning|maschinelles Lernen]]**. | [[https://www.elastic.co/de/what-is/open-x-pack|X-Pack]] ist eine Plugin-Suite und bietet eine Sammlung von kommerziellen Erweiterungen und Funktionen, um die Fähigkeiten von Elasticsearch zu erweitern. **X-Pack bietet verschiedene Module in den Bereichen Sicherheit, Überwachung, Reporting und [[machine_learning|maschinelles Lernen]]**. |
| |
| =====Service===== |
| |
| Als Service einrichten: Im Ordner elasticsearch/bin gibt es das Script elasticsearch-service.bat. |
| <code> |
| elasticsearch-service.bat install |
| elasticsearch-service.bat start |
| elasticsearch-service.bat stop |
| elasticsearch-service.bat remove |
| </code> |
| |
=====Shards===== | =====Shards===== |
=====Datatypes===== | =====Datatypes===== |
| |
* **Text**: Wird für Volltextsuche verwendet. Inhalte werden analysiert (z. B. in Tokens zerlegt) und in einem inversen Index gespeichert. Ideal für große, durchsuchbare Textblöcke (z. B. Artikel oder Beschreibungen). | * **Text**: Wird für Volltextsuche verwendet. Inhalte werden analysiert (z. B. in Tokens zerlegt) und in einem inversen Index gespeichert. Ideal für große, durchsuchbare Textblöcke (z. B. Artikel oder Beschreibungen). (KEIN wildcard) |
* **Keyword**: Eignet sich für nicht-analysierte Werte. Inhalte werden genau so gespeichert, wie sie eingegeben wurden. Geeignet für Filter, Sortierung und Aggregationen (z. B. Tags, Kategorien, IDs). | * **Keyword**: Eignet sich für nicht-analysierte Werte. Inhalte werden genau so gespeichert, wie sie eingegeben wurden. Geeignet für Filter, Sortierung und Aggregationen (z. B. Tags, Kategorien, IDs). (wildcard) |
* **Integer**, Long, Short, Byte: Unterschiedliche Ganzzahltypen mit verschiedenen Größenbereichen. | * **Integer**, Long, Short, Byte: Unterschiedliche Ganzzahltypen mit verschiedenen Größenbereichen. |
* **Float**, **Double**: Gleitkommazahlen für präzise numerische Berechnungen. | * **Float**, **Double**: Gleitkommazahlen für präzise numerische Berechnungen. |
must_conditions.append(nested_condition_1) | must_conditions.append(nested_condition_1) |
must_conditions.append(nested_condition_2) | must_conditions.append(nested_condition_2) |
| |
# Die Bedingungen zur Query hinzufügen (Operator AND) | |
query = builder.build_query(must_conditions, operator="AND", sort_field="timestamp", sort_order="desc") | |
| |
# Die erzeugte Query ausgeben | |
builder.display_query() | |
</code> | |
| |
<code python> | |
# Initialisierung des Query Builders | |
builder = ElasticsearchQueryBuilder() | |
| |
# Verschachtelte Bedingungen erstellen | |
must_conditions = [] | |
must_conditions.append(builder.add_condition("match", "data.win.eventdata.authenticationPackageName", "NTLM")) | |
must_conditions.append(builder.add_condition("wildcard", "data.win.eventdata.targetUserName", "*")) | |
| |
# Erste verschachtelte Bedingung mit zwei "should" Bedingungen | |
nested_condition_1 = { | |
"bool": { | |
"should": [ | |
builder.add_condition("term", "data.win.eventdata.lmPackageName", "NTLM V1"), | |
builder.add_condition("wildcard", "data.win.eventdata.targetDomainName", "example*") | |
], | |
"minimum_should_match": 1 # Minimum eine der "should" Bedingungen muss zutreffen | |
} | |
} | |
| |
# Weitere verschachtelte Bedingungen können hier hinzugefügt werden | |
| |
# Die verschachtelte Bedingung zur Liste der "must" Bedingungen hinzufügen | |
must_conditions.append(nested_condition_1) | |
| |
# Die Bedingungen zur Query hinzufügen (Operator AND) | # Die Bedingungen zur Query hinzufügen (Operator AND) |