Benutzer-Werkzeuge

Webseiten-Werkzeuge


elasticsearch

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
elasticsearch [2025/03/27 11:36]
jango [QueryBuilder]
elasticsearch [2025/04/16 14:47] (aktuell)
jango
Zeile 1: Zeile 1:
 [[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=====
Zeile 26: Zeile 56:
 =====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.
Zeile 341: Zeile 371:
  
 <code python> <code python>
 +from elasticsearch_query_builder import ElasticsearchQueryBuilder
 +
 +# 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", "*"))
 +
 +# Eine verschachtelte "bool" Abfrage innerhalb der "must" Bedingungen
 +nested_condition = builder.add_nested_condition("term", "data.win.eventdata.lmPackageName", "NTLM V1")
 +must_conditions.append(nested_condition)
 +
 +# 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
 +nested_condition_1 = builder.add_nested_condition("term", "data.win.eventdata.lmPackageName", "NTLM V1")
 +
 +# Zweite verschachtelte Bedingung
 +nested_condition_2 = builder.add_nested_condition("term", "data.win.eventdata.targetDomainName", "example.com")
 +
 +# Die verschachtelten Bedingungen zur Liste der "must" Bedingungen hinzufügen
 +must_conditions.append(nested_condition_1)
 +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
 +    }
 +}
 +
 +# Zweite verschachtelte Bedingung mit zwei "should" Bedingungen
 +nested_condition_2 = {
 +    "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
 +    }
 +}
 +
 +# Die verschachtelten Bedingungen zur Liste der "must" und "should" Bedingungen hinzufügen
 +should_conditions = []
 +should_conditions.append(nested_condition_1)
 +should_conditions.append(nested_condition_2)
 +
 +# Die "must"-Bedingungen und "should"-Bedingungen kombinieren
 +query = builder.build_query(must_conditions, operator="AND", sort_field="timestamp", sort_order="desc")
 +
 +# Füge die "should"-Bedingungen in den "bool" Block ein
 +query["query"]["bool"]["should"] = should_conditions
 +
 +# Die erzeugte Query ausgeben
 +builder.display_query()
 </code> </code>
 =====Bash===== =====Bash=====
elasticsearch.1743071817.txt.gz · Zuletzt geändert: 2025/03/27 11:36 von jango