no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | linux:logging:elasticsearch [2024/02/26 14:37] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Elasticsearch ====== | ||
+ | Logs / Ereignisse lassen sich auf verschiedene Weise anzeigen. | ||
+ | Man kann sie sich einfach auf der Konsole ausgeben lassen, oder man speichert sie in | ||
+ | Log-Dateien ab, oder man legt sie in eine Datenbank ab. | ||
+ | Wenn man viele Logs / Ereignisse speichern muss und diese dann schnell abrufen möchte, bietet sich hier eine Datenbank an. | ||
+ | Jedoch nicht jede Datenbank eignet sich für diese Zwecke, da evtl. einfach zu viele Einträge, Tabellen o.ä. aufkommen werden. | ||
+ | |||
+ | Elasticsearch ist eine Datenbank die mit diesen Anforderungen klar kommt. | ||
+ | |||
+ | Hier ein Vergleich zu einer mySQL Datenbank. | ||
+ | |||
+ | * MySQL => Datenbanken => Tabellen => Spalten/ | ||
+ | * Elasticsearch => Indexe | ||
+ | |||
+ | ===== Installation ===== | ||
+ | Vorbereitend installiert man noch Die JAVA-JDK Pakete. | ||
+ | <code bash> | ||
+ | |||
+ | Danach kann Elasticsearch wie folgt installiert werden. | ||
+ | <code bash> | ||
+ | <code bash> | ||
+ | |||
+ | Damit der Elasticsearch Daemon beim Booten automatisch von " | ||
+ | <code bash> | ||
+ | systemctl enable elasticsearch.service</ | ||
+ | |||
+ | Starten kann man Elasticsearch mit: | ||
+ | <code bash> | ||
+ | |||
+ | ===== starten und prüfen ===== | ||
+ | Vor dem ersten Start müssen noch folgende Einstellungen in der '' | ||
+ | * path.data and path.logs | ||
+ | * ''/ | ||
+ | * cluster.name | ||
+ | * ''/ | ||
+ | * node.name | ||
+ | * ''/ | ||
+ | * Swap | ||
+ | * wenn es geht sollte auf dem Server nur Elasticsearch laufen, somit kann man dann auch Swapping ausschalten: | ||
+ | * eine andere Möglichkeit ist '' | ||
+ | * Netzwerk | ||
+ | * siehe [[# | ||
+ | * Cluster Konfigurieren | ||
+ | * um einen Cluster zu definieren, einfach folgendes in der ''/ | ||
+ | * weiterhin muss, wenn es sich um einen Masternode handelt, die min. Anzahl an Nodes definiert werden, falls es einen Split-Brain gibt: '' | ||
+ | * JVM Heapsize | ||
+ | * in der ''/ | ||
+ | * Beide Parameter sollten in gleicher höhe gesetzt werden und nicht mehr als 50% des RAM überschreiten | ||
+ | * Limit geöffnete Dateien (siehe auch [[# | ||
+ | * Elasticsearch bedient viele gleichzeitig geöffnete Dateien, daher muss dem User unter dem Elasticsearch läuft erlaubt werden viele Dateien gleichzeitig geöffnet zu haben | ||
+ | * ''/ | ||
+ | elasticsearch | ||
+ | elasticsearch | ||
+ | * Virtueller Speicher | ||
+ | * Elasticsearch nutzt in 64bit Umgebungen " | ||
+ | * ''/ | ||
+ | * Anzahl an Threads | ||
+ | * Elasticsearch erstellt sich automatisch neue Threads wenn es diese benötigt. Damit dies auch beliebig viel passieren kann, muss dem Benutzer unter dem Elasticsearch läuft, die Anzahl erhöht werden. | ||
+ | * ''/ | ||
+ | |||
+ | Nachdem nun alles konfiguriert und gesetzt ist, startet man den Server neu um alles zu aktivieren. Danach kann Elasticsearch produktiv genutzt werden. | ||
+ | |||
+ | ==== Daten- und Logverzeichnis ==== | ||
+ | Standardmäßig legt Elasticsearch seine Datenbank unter folgendem Pfad ab: ''/ | ||
+ | Wenn nun der Pfad umgelegt werden muß (Platzgründe, | ||
+ | <code bash>vi / | ||
+ | Hier sollte man folgende Variablen pflegen: | ||
+ | <code bash># Elasticsearch log directory | ||
+ | path.logs: < | ||
+ | |||
+ | # Elasticsearch data directory | ||
+ | path.data: < | ||
+ | |||
+ | Die Daten- und Logverzeichnisse müssen für den Benutzer, unter dem Elasticsearch läuft, beschreibbar sein. | ||
+ | Man kann entsprechende Schreibrechte vergeben, oder den Elasticsearch Benutzer als Besitzer angeben: | ||
+ | <code bash> | ||
+ | <code bash> | ||
+ | |||
+ | Nach der Installation kann nun die Datenbank wie folgt gestartet werden: | ||
+ | <code bash> | ||
+ | |||
+ | Nun sollten mit folgendem Befehl die Ports " | ||
+ | <code bash> | ||
+ | |||
+ | Mit dem folgenden Befehl prüft man nun auf dem Server selbst, ob der Elasticsearch-Server anfragen annimmt und auch antwortet. | ||
+ | <code bash> | ||
+ | Die Anwort sollte ungefähr dies ausgeben. | ||
+ | <code bash>{ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | }</ | ||
+ | |||
+ | Hier noch Befehle zum Status des Clusters und des gestarteten Nodes: | ||
+ | **Global Health** \\ <code bash> | ||
+ | **Clusterinfo** \\ <code bash> | ||
+ | **Nodeinfo** \\ <code bash> | ||
+ | |||
+ | ==== Debugging ==== | ||
+ | * **log4j2.properties**: | ||
+ | * **systemd**: | ||
+ | Die Log-Datei findet man dann unter ''/< | ||
+ | * **live**: Im laufenden Betrieb kann der Log-Level mittels '' | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | |||
+ | Neues Dokument per Console erstellen | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | '</ | ||
+ | ===== Netzwerkeinstellungen ===== | ||
+ | Standardmäßig ist der Elasticsearch-Server nur vom Localhost erreichbar (Networkbind auf Localhost). | ||
+ | Damit dieser vom Netzwerk erreichbar wird, müssen folgende Parameter in die '' | ||
+ | < | ||
+ | Oder so: | ||
+ | < | ||
+ | network.publish_host: | ||
+ | |||
+ | Folgende Angaben können zu den Parametern '' | ||
+ | ^ Logical Host Setting Value ^ Description ^ | ||
+ | | _local_ | Will be resolved to loopback addresses | | ||
+ | | _local: | ||
+ | | _local: | ||
+ | | _non_loopback_ | Addresses of the first non loopback interface | | ||
+ | | _non_loopback: | ||
+ | | _non_loopback: | ||
+ | | _[networkInterface]_ | Resolves to the addresses of the provided network interface. For example _en0_. | | ||
+ | | _[networkInterface]: | ||
+ | | _[networkInterface]: | ||
+ | |||
+ | Diese Einstellungen sollten in den jew. Modulen, z.B. im HTTP-Modul (siehe [[# | ||
+ | ===== Cluster ===== | ||
+ | Wenn man Elasticsearch auf mehreren Servern, im gleichen Netzwerk, installiert, | ||
+ | Das geschieht deshalb, weil beide den selben Clusternamen haben und das " | ||
+ | |||
+ | ==== Cluster-Einstellungen ==== | ||
+ | * " | ||
+ | |||
+ | Mit curl können auf der Command-Line Einstellungen gesetzt werden. | ||
+ | < | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | noch ein Beispiel | ||
+ | < | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | } | ||
+ | '</ | ||
+ | oder das Ganze in einer Zeile | ||
+ | < | ||
+ | |||
+ | Um Einstellungen zu ändern einfach diese überschreiben. | ||
+ | Wenn Einstellunge geöscht werden sollen, müssen sie genullt werden. | ||
+ | < | ||
+ | |||
+ | ==== Cluster mit 1 Data-Node ==== | ||
+ | Möchte man nur einen Node betreiben, dann sollten folgende Parameter in der '' | ||
+ | <code bash> | ||
+ | gateway.expected_data_nodes: | ||
+ | gateway.recover_after_time: | ||
+ | gateway.recover_after_nodes: | ||
+ | gateway.recover_after_master_nodes: | ||
+ | gateway.recover_after_data_nodes: | ||
+ | |||
+ | Zusätzlich sollten noch diese dynamischen Einstellungen vorgenommen werden: | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | '</ | ||
+ | |||
+ | Da diese keine Einstellungen für Cluster sind, wird hier nur '' | ||
+ | |||
+ | ==== Cluster mit mehr als 1 Node ==== | ||
+ | Diese Einstellungen sind lange nicht alles was dazu einzurichten ist. Dies soll nur einen kleinen Einblick in die Konfiguration bieten. | ||
+ | Weitere Infos findet man unter [[https:// | ||
+ | |||
+ | Die hier genannten Einstellungen sind nur Vorschläge/ | ||
+ | Ich gehe hier von 2 Elasticsearch Nodes der Version 5.6 aus. | ||
+ | Beide Nodes sind Master und Data Nodes. | ||
+ | |||
+ | ^ Dynamisch \\ Updatebar ^ Node 1 ^ Node2 ^ Beschreibung ^ | ||
+ | ^ Nodetype ^ ^ ^ Gibt den Typ des Nodes an (Master/ | ||
+ | | | '' | ||
+ | | | '' | ||
+ | ^ Shard Allocation Settings ^ ^ ^ Einstellungen zum Zuweisen und zum Verschieben von Shards innerhalt eines Clusters ^ | ||
+ | | x | '' | ||
+ | | x | ''# | ||
+ | | x | ''# | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | ^ Shard Rebalancing Settings ^ ^ ^ Einstellungen zum Verteilen der Shards per Node innerhalb eines Clusters ^ | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | ^ Shard Balancing Heuristics ^ ^ ^ Einstellungen zur Heuristik des Verteilens von Shards innerhalb eines Clusters ^ | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | ^ Disk-based Shard Allocation ^ ^ ^ Einstellungen zum hinzuziehen des lokalen Festplattenspeicherplatzes eines Nodes, ob Shards verteilt oder verteilte Shards angenommen werden sollen | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | ^ Miscellaneous cluster settings ^ ^ ^ Verschiedene Einstellungen für den gesamten Cluster ^ | ||
+ | | x | '' | ||
+ | | x | '' | ||
+ | ^ Discovery ^ ^ ^ Einstellungen zum suchen von Nodes innerhalb eines Clusters ^ | ||
+ | | | '' | ||
+ | ^ Zen Discovery ^ ^ ^ Einstellungen von Zen-Discovery ^ | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | ^ Local Gateway ^ ^ ^ Speichert den Zustand des Clusters und der Shard daten während eines kompletten Cluster-Neustarts ^ | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | | | '' | ||
+ | |||
+ | Somit ergibt sich folgender Curl Befehl. | ||
+ | **Node1 und Node2** | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | |||
+ | Diese Einstellungen müssen bei beiden Nodes in der '' | ||
+ | < | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | ==== Node im Wartungsmodus (Maintenance) ==== | ||
+ | **Wartungsmodus ein** | ||
+ | Möchte man einen Node zu Wartungszwecken abschalten/ | ||
+ | Dazu schaltet man die Shard-Allocation ab, indem man es auf nur primäre Shards begrenzt (siehe auch [[# | ||
+ | <code bash> | ||
+ | |||
+ | Um die Wiederherstellung der Shards zu beschleunigen, | ||
+ | <code bash> | ||
+ | |||
+ | Machine Learning Jobs hält man wie folgt an. | ||
+ | <code bash> | ||
+ | |||
+ | **Wartungsmodus aus** | ||
+ | Wenn alle Nodes wieder gestartet und erreichbar sind, prüft man mit folgendem Befehl ob alle im Cluster verfügbar sind | ||
+ | <code bash> | ||
+ | |||
+ | Danach schaut man in welchem Status sich der Cluster befindet. | ||
+ | <code bash> | ||
+ | |||
+ | Nach einem frischen Start eines Nodes, wird dieser sich zum Cluster verbinden und zunächst seine eigenen Shards wiederherstellen. Der Cluster befindet sich dann im Status rot. | ||
+ | Danach erhält der Cluster den Status gelb, da alle lokalen Shards verfügbar sind, aber nicht alle Shards an allen Nodes repliziert sind. | ||
+ | |||
+ | Erst jetzt kann man das Replizieren der Shards wieder einschalten. | ||
+ | <code bash> | ||
+ | |||
+ | Wenn das Replizieren der Shards läuft, kann man in Elasticsearch wieder suchen, Indizes erstellen und Machine Learning Jobs starten. | ||
+ | Damit der Cluster nicht bei der Replizierung auch noch mit allen anderen Aufgaben zu tun hat, macht es Sinn abzuwarten, bis der Cluster Status wieder grün ist. | ||
+ | |||
+ | Zuletzt schaltet man Machine Learning Jobs wieder ein. | ||
+ | <code bash> | ||
+ | ===== Plugins ===== | ||
+ | Mit folgendem Befehl kann man sehen welche Plugins für Elasticsearch installiert sind. | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash>/ | ||
+ | |||
+ | Man findet Plugins bei [[https:// | ||
+ | Installiert werden sie mit folgendem Befehl: | ||
+ | <code bash>/ | ||
+ | |||
+ | ==== Plugin-Update ==== | ||
+ | Um ein Plugin zu erneuern, muss es zuerst deinstalliert um danach installiert zu werden. | ||
+ | Die Deinstallation erfolgt mit den Befehlen von oben, allerdings mit dem Schalter '' | ||
+ | |||
+ | ===== Module ===== | ||
+ | |||
+ | ==== HTTP ==== | ||
+ | Dient dem Zugriff von verschiedenen Tools, wie z.B. Kibana, elasticHQ, logstash, | ||
+ | Einstellungen in der '' | ||
+ | < | ||
+ | # | ||
+ | # | ||
+ | Mit dem Parameter '' | ||
+ | Siehe dazu die [[http:// | ||
+ | |||
+ | ==== Templates ==== | ||
+ | Mit Templates lassen sich Einstellungen für Indices auf neu erstellte Indices ausrollen | ||
+ | * welche Indices gibt es <code bash> | ||
+ | ==== Lifecycle Management ==== | ||
+ | Quelle: [[https:// | ||
+ | Mit Lifecycle Policies automatisiert man verschiedene Management Aufgaben für Indices bzw. Snapshots. | ||
+ | Lifecycle Management für Indices werden **I**ndex**L**ifecycle**M**anagement und für Snapshots **S**napshot**L**ifecycle**M**anagement genannt. | ||
+ | Mit ilm kann man z.B. steuern, dass ein neuer Index erstellt wird, wenn ein bestehender eine bestimmte Größe erreicht hat. | ||
+ | Oder man löscht einen Index autom. nach x Tagen. | ||
+ | |||
+ | Es gibt 4 Policy-Stufen, | ||
+ | ^ Name ^ Beschreibung ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | Die 4 Stufen können folgende Actionen verarbeiten. | ||
+ | ^ Stufe ^ Action ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | ** ilm ** | ||
+ | * welche Policies gibt es: <code bash> | ||
+ | * Status des ilm ausgeben <code bash> | ||
+ | * starten/ | ||
+ | * Policy erstellen (z.B. zum Löschen nach 30 Tagen): <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | * Policy in Template bereitstellen und somit auf neue Indices namens " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | ..., | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | * Welche Policies sind auf Indices bereitgestellt: | ||
+ | * Policy zu bestehenden Indices hinzufügen <code bash> | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | '</ | ||
+ | * zum Updaten einer bestehenden Policy, muss diese einfach mit den neuen Werten überschrieben werden. \\ Die Policy-Version wird dann um den Wert " | ||
+ | |||
+ | ** slm ** | ||
+ | * mit slm kann man Indices autom. sichern oder wiederherstellen: | ||
+ | |||
+ | ===== Befehle ===== | ||
+ | Hier einige Befehle die an ES übergeben werden können. | ||
+ | Damit die Ausgabe der Befehle auch lesbar ist, sollte man möglichst folgendes am Ende der http-Adresse eingeben ''? | ||
+ | ==== Node Infos ==== | ||
+ | Für alle Nodes im Cluster | ||
+ | <code bash> | ||
+ | Nur für den lokalen Node | ||
+ | <code bash> | ||
+ | |||
+ | ==== Index erstellen ==== | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | '</ | ||
+ | |||
+ | ==== Alle Indexe auflisten ==== | ||
+ | <code bash> | ||
+ | |||
+ | ==== Index öffnen/ | ||
+ | * öffnen \\ <code bash> | ||
+ | * schließen \\ <code bash> | ||
+ | * zum Anzeigen der geschlossenen Indexe \\ <code bash> | ||
+ | |||
+ | ==== Einstellungen der Indices abfragen ==== | ||
+ | <code bash> | ||
+ | ==== Refresh erzwingen ==== | ||
+ | <code bash> | ||
+ | ==== Version Abfragen ==== | ||
+ | <code bash> | ||
+ | ==== Status abfragen ==== | ||
+ | <code bash> | ||
+ | Hier ein noch ausführlicherer Befehl | ||
+ | <code bash> | ||
+ | ==== Balancing ==== | ||
+ | Zum Ein- und Ausschalten von Shard-Balancing (z.B. für Wartungen an einem Node) folgender Befehl | ||
+ | <code bash> | ||
+ | |||
+ | ^ all | (default) Allows shard allocation for all kinds of shards. | | ||
+ | ^ primaries | Allows shard allocation only for primary shards. | | ||
+ | ^ new_primaries | Allows shard allocation only for primary shards for new indices. | | ||
+ | ^ none | No shard allocations of any kind are allowed for any indices. | | ||
+ | ==== Abfrage per Webbrowser ==== | ||
+ | [[http:// | ||
+ | oder | ||
+ | [[http:// | ||
+ | oder über die o.g. **Plugins**. | ||
+ | |||
+ | ==== Settings ==== | ||
+ | Zum ausgeben von aktuellen Einstellungen des Elasticsearch-Clusters benutzt man folgenden Befehl. | ||
+ | <code bash> | ||
+ | oder hier die Cluster-Einstellungen mit Default-Einstellungen | ||
+ | <code bash> | ||
+ | Um Einstellungen abzusetzen wählt man folgende Befehlssyntax. | ||
+ | * transient: | ||
+ | * persistent: dauerhafte Änderung der Einstellung in Elasticsearch | ||
+ | |||
+ | <code bash> | ||
+ | "< | ||
+ | "< | ||
+ | } | ||
+ | }'</ | ||
+ | |||
+ | === Nodes ignorieren === | ||
+ | Hier ein Beispiel um einen Node aus dem Cluster zu ignorieren | ||
+ | <code bash> | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }'</ | ||
+ | |||
+ | === Anzahl Nodes === | ||
+ | Um die Anzahl an Master-Nodes zu ändern folgender Befehl | ||
+ | **persistent** | ||
+ | <code bash> | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }'</ | ||
+ | |||
+ | **transient** | ||
+ | <code bash> | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }'</ | ||
+ | |||
+ | === Discovery === | ||
+ | Um das ZEN Discovery auszuschalten, | ||
+ | <code bash> | ||
+ | |||
+ | ==== Refresh Index ==== | ||
+ | <code bash> | ||
+ | |||
+ | ==== Close Index ==== | ||
+ | <code bash> | ||
+ | |||
+ | ==== Delete Index ==== | ||
+ | <code bash> | ||
+ | |||
+ | ===== Backup ===== | ||
+ | |||
+ | ==== bis ES 1.5 ==== | ||
+ | Quelle: [[https:// | ||
+ | Bei ES Version 1.x gibt es mittlerweile das Modul " | ||
+ | |||
+ | Dieses Modul erlaubt es einfache und schnelle Datensicherungen des Clusters oder einzelner Elemente auf ein Repository zu erstellen. | ||
+ | Ein Repository kann ein Mountpoint oder andere Systeme wie Amazon S3, HDFS oder MS Azure sein. | ||
+ | Im Weiteren wird hier nur auf einen Mountpoint eingegangen. | ||
+ | |||
+ | === Repository erstellen === | ||
+ | zunächst erstellt man sich ein neues Repository zum sichern der Daten. | ||
+ | Als Parameter werden übergeben: | ||
+ | * Backupname: my_backup | ||
+ | * Typ: fs (filesystem) | ||
+ | * Location: / | ||
+ | * max_snapshot_bytes_per_sec: | ||
+ | * max_restore_bytes_per_sec: | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | Wenn man Änderungen am Repository machen möchte muss ein " | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | Zum Anzeigen des angelegten Repositories führt man folgenden Befehl aus: | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bashX> | ||
+ | |||
+ | Zum Prüfen folgender Befehl: | ||
+ | <code bash> | ||
+ | |||
+ | Zum löschen eines Repositories verwendet man: | ||
+ | <code bash> | ||
+ | |||
+ | === Snapshot === | ||
+ | Beim ersten Snapshot wird eine Kopie aller Daten des Clusters erstellt. Danach werden nur die anfallenden Daten gesichert. | ||
+ | |||
+ | Man kann nun einen Snapshot namens " | ||
+ | <code bash> | ||
+ | Der Parameter " | ||
+ | |||
+ | Mit dem o.g. Befehl erstellt man einen vollständigen Snapshot von allen Indices des Cluster. | ||
+ | Möcht man nur bestimmte Indices sichern, kann man dies wie folgt anweisen: | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }</ | ||
+ | Hierbei (ignore_unavailable) werden auch nicht mehr vorhandene Indices ignoriert. Wenn dieser Parameter auf " | ||
+ | Weiterhin weisen wir an, dass im Snapshot der globale Status des Clusters mit gesichert wird. So werden Einstellungen des Cluster auch gesichert. | ||
+ | Wenn es Indices gibt welche keine " | ||
+ | <code bash>" | ||
+ | |||
+ | Informationen über erstellte Snapshot holt man sich mit folgenden Befehlen: | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash> | ||
+ | |||
+ | Den Status erhält man mit: | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash> | ||
+ | oder | ||
+ | <code bash> | ||
+ | |||
+ | Zum löschen eines Snapshots verwendet man: | ||
+ | <code bash> | ||
+ | Wenn man einen großen Snapshot aus versehen angestoßen hat, kann man diesen mit dem DELETE-Befehl abbrechen. Die bis dahin erstellten Daten werden bereinigt. | ||
+ | |||
+ | === Backup Script === | ||
+ | <code bash># | ||
+ | |||
+ | # Script to Backup Elasticsearch | ||
+ | # scripted by stizi.de | ||
+ | |||
+ | #Colors | ||
+ | red=`tput setaf 1` | ||
+ | green=`tput setaf 2` | ||
+ | reset=`tput sgr0` | ||
+ | |||
+ | ES_URL=' | ||
+ | REPO_LOCATION='/ | ||
+ | SNAPNAME=`date +%Y%m%d` | ||
+ | # Backups older than LIMIT (hiere in Days) | ||
+ | LIMIT=30 | ||
+ | |||
+ | # | ||
+ | |||
+ | ES_VERSION=`curl -s -XGET " | ||
+ | SNAPSHOTS=`curl -s -XGET " | ||
+ | REPOSITORIES=`curl -s -XGET " | ||
+ | |||
+ | ##Checking Environment for Snapshotting | ||
+ | # checking Repo Location | ||
+ | check_repo_location() | ||
+ | { | ||
+ | echo -n " | ||
+ | if [ ! -d " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | exit 1; | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | # cecking mountpoint | ||
+ | check_mountpoint() | ||
+ | { | ||
+ | echo -n " | ||
+ | grep ${REPO_LOCATION} /etc/fstab > /dev/null | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | echo " | ||
+ | exit 1; | ||
+ | fi | ||
+ | |||
+ | grep ${REPO_LOCATION} /etc/mtab > /dev/null | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | echo " | ||
+ | mount ${REPO_LOCATION} | ||
+ | if [ $? -ne 0 ]; then | ||
+ | echo " | ||
+ | exit 1; | ||
+ | fi | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | #checking Repo in ES | ||
+ | check_repo_es() | ||
+ | { | ||
+ | echo -n " | ||
+ | curl -s -XGET " | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | echo " | ||
+ | curl -s -XPUT " | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo "new Repository: ${green}${ES_VERSION}${reset}. Verified by..." | ||
+ | curl -s -XPOST " | ||
+ | else | ||
+ | echo " | ||
+ | exit 1; | ||
+ | fi | ||
+ | fi | ||
+ | } | ||
+ | |||
+ | ## | ||
+ | |||
+ | case " | ||
+ | backup) | ||
+ | check_repo_location | ||
+ | check_mountpoint | ||
+ | check_repo_es | ||
+ | curl -s -XPUT " | ||
+ | returncode=$? | ||
+ | ;; | ||
+ | |||
+ | clean) | ||
+ | SNAPDEL=`echo ${SNAPSHOTS} | jq " | ||
+ | DATE_DEL_FROM=`date +%s000 -d " | ||
+ | echo " | ||
+ | for SNAPNAME in ${SNAPDEL} | ||
+ | do | ||
+ | SNAP_START=`echo ${SNAPSHOTS}| jq " | ||
+ | if [ ${SNAP_START} -lt ${DATE_DEL_FROM} ]; then | ||
+ | echo -n " | ||
+ | curl -s -XDELETE " | ||
+ | returncode=$? | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | echo "" | ||
+ | fi | ||
+ | done | ||
+ | echo " | ||
+ | ;; | ||
+ | |||
+ | | ||
+ | for REPONUM in ${REPOSITORIES} | ||
+ | do | ||
+ | echo " | ||
+ | curl -s -XGET " | ||
+ | done | ||
+ | ;; | ||
+ | |||
+ | *) | ||
+ | echo "" | ||
+ | echo " | ||
+ | echo "" | ||
+ | returncode=1 | ||
+ | |||
+ | esac | ||
+ | exit $returncode</ | ||
+ | |||
+ | === Restore === | ||
+ | Um einen Snapshot wiederherzustellen führt man folgenden Befehl aus: | ||
+ | <code bash> | ||
+ | Hierbei wird der gesamte Stand des Snapshots wiederhergestellt. | ||
+ | Wenn nur einzelne Teile des Snapshots wiederhergestellt werden sollen, kann man dies wie folgt anweisen: | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }</ | ||
+ | |||
+ | Auch beim Restore kann man wieder nur partielle Shards wiederherstellen mit: | ||
+ | <code bash>" | ||
+ | |||
+ | Beim Restore können auch Einstellungen der Indices angepasst werden. | ||
+ | Beispiel: Index wiederherstellen ohne Replicas: | ||
+ | <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | }</ | ||
+ | |||
+ | Man kann einen Snapshot auch auf einem anderen Cluster wiederherstellen. | ||
+ | Vorher sollte man aber darauf achten, dass die Speicherkapazität des neuen Clusters der des Snapshots entspricht. Weiterhin sollte die Version des neuen Clusters mindestens gleich wenn nicht größer sein als die des Clustern welcher den Snapshot erstellt hat. | ||
+ | |||
+ | === Monitoring Snapshot oder Restore === | ||
+ | Wenn ein großer Snapshot oder Restore erstellt wird, kann man sich den aktuellen Status anzeigen lassen. Wichtig ist nur dass man die Befehle für Snapshot oder Restore mit dem Parameter " | ||
+ | Der Befehl zum Monitoren lautet: | ||
+ | <code bash> | ||
+ | Ausführlichere Informationen erhält man mit folgendem Befehl: | ||
+ | <code bash> | ||
+ | ==== bis ES 0.90.x ==== | ||
+ | Die Datensicherung erfolgt bei einem [[http:// | ||
+ | - Erstes (und einziges) Full-Backup per '' | ||
+ | - nun stoppt man das " | ||
+ | - nach dem Stoppen refresht man nun einen letzten Stand | ||
+ | - jetzt kann wieder mit '' | ||
+ | - nach der DaSi startet mann wieder dass " | ||
+ | ==== Script ==== | ||
+ | <code bash># | ||
+ | |||
+ | # Datensicherungsziel OHNE abschliessenden Slash | ||
+ | DEST="< | ||
+ | SRC="< | ||
+ | |||
+ | #### Ab hier Finger weg, wenn keine Ahnung #### | ||
+ | |||
+ | # binary Pfade | ||
+ | CMDHOSTNAME=`which hostname` | ||
+ | CMDMOUNT=`which mount` | ||
+ | CMDUMOUNT=`which umount` | ||
+ | CMDCURL=`which curl` | ||
+ | CMDRSYNC=`which rsync` | ||
+ | |||
+ | # Timestamp fuer logging | ||
+ | LOGTS=" | ||
+ | RSYNCLOG=" | ||
+ | ESLOG=" | ||
+ | |||
+ | # Rsync Stuff | ||
+ | RSYNCOPTS=" | ||
+ | |||
+ | # | ||
+ | # Mount Check | ||
+ | # | ||
+ | ERROR=0 | ||
+ | if grep -qs " | ||
+ | echo " | ||
+ | |||
+ | if touch " | ||
+ | rm " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | | ||
+ | fi | ||
+ | |||
+ | else | ||
+ | echo " | ||
+ | ERROR=1 | ||
+ | fi | ||
+ | |||
+ | if [ ${ERROR} != 0 ]; then | ||
+ | echo " | ||
+ | ${CMDUMOUNT} ${DEST} 2>/ | ||
+ | ${CMDMOUNT} ${DEST} | ||
+ | |||
+ | if touch " | ||
+ | rm " | ||
+ | echo " | ||
+ | else | ||
+ | echo " | ||
+ | |||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | fi | ||
+ | |||
+ | |||
+ | # | ||
+ | # disable Refreshing | ||
+ | # | ||
+ | echo " | ||
+ | |||
+ | ${CMDCURL} -XPUT ' | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }' > ${ESLOG} | ||
+ | |||
+ | echo "" | ||
+ | |||
+ | echo " | ||
+ | |||
+ | # | ||
+ | # Refresh one last time | ||
+ | # | ||
+ | echo " | ||
+ | |||
+ | ${CMDCURL} -XPOST ' | ||
+ | |||
+ | echo "" | ||
+ | |||
+ | echo " | ||
+ | |||
+ | # | ||
+ | # Backup Database | ||
+ | # | ||
+ | echo " | ||
+ | |||
+ | ${CMDRSYNC} ${RSYNCOPTS} ${SRC} ${DEST} 1>> ${RSYNCLOG} 2>&1 | ||
+ | |||
+ | echo " | ||
+ | |||
+ | # | ||
+ | # enable Refreshing | ||
+ | # | ||
+ | echo " | ||
+ | |||
+ | ${CMDCURL} -XPUT ' | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }' > ${ESLOG} | ||
+ | |||
+ | echo "" | ||
+ | |||
+ | echo " | ||
+ | |||
+ | # | ||
+ | # Print Index Settings | ||
+ | # | ||
+ | curl -XGET ' | ||
+ | |||
+ | ===== Updates ===== | ||
+ | Updates können ganz leicht über '' | ||
+ | Man kann auch eine Paketquelle angeben. | ||
+ | |||
+ | Zuerst fügt man den GPG-Key hinzu: | ||
+ | | ||
+ | <code bash> | ||
+ | Nun noch einen Eintrag in die Paketquelllisten (Für alle 0.90.x Versionen trägt man " | ||
+ | <code bash>deb http:// | ||
+ | |||
+ | ===== Upgradeverfahren ===== | ||
+ | * Elasticsearch <code bash> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | ' | ||
+ | |||
+ | curl -k -u < | ||
+ | |||
+ | systemctl stop elasticsearch.service | ||
+ | |||
+ | dpkg -i ...deb | ||
+ | |||
+ | systemctl start elasticsearch.service | ||
+ | |||
+ | curl -k -u < | ||
+ | |||
+ | curl -k -u < | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | ' | ||
+ | |||
+ | curl -k -u < | ||
+ | ===== Troubleshooting ===== | ||
+ | |||
+ | ==== to many files open ==== | ||
+ | vi / | ||
+ | Hier folgenden Parameter prüfen (Standardwert ist: 65535) | ||
+ | < | ||
+ | |||
+ | Quelle: [[http:// | ||
+ | |||
+ | Weiterhin kann noch der " | ||
+ | <code bash>vi / | ||
+ | |||
+ | Hier folgendes unten eintragen | ||
+ | < | ||
+ | elasticsearch hard nofile 65000</ | ||
+ | |||
+ | Hiernach noch die folgende Datei anpassen: | ||
+ | <code bash>vi / | ||
+ | |||
+ | Inhalt unten einfügen | ||
+ | < | ||
+ | session required | ||
+ | |||
+ | Nach einem Reboot kann man die neuen Wert mit diesem Befehl testen | ||
+ | <code bash> | ||
+ | oder nur für die "open files" | ||
+ | <code bash> | ||
+ | |||
+ | Wichtig man hat hier nur die Werte für den Benutzer " | ||
+ | Um den aktuellen Wert sofort zu setzen, benutzt man den o. g. Befehl mit dem Parameter für den neuen Wert | ||
+ | |||
+ | Beispiel: | ||
+ | <code bash> | ||
+ | |||
+ | Quelle: [[http:// | ||
+ | |||
+ | ==== Unassigned Shards ==== | ||
+ | Wenn Shards, den Nodes nicht zugewiesen sind, kann man mit diesem Befehl sich den Status und den Grund dieser Shards angzeigen lassen | ||
+ | <code bash> | ||
+ | Eine andere Möglichkeit sich das gesamt vom Cluster aus zu zeigen ist: | ||
+ | <code bash> | ||
+ | |||
+ | Mit folgenden Befehlen kann dies berichtigt werden. | ||
+ | |||
+ | Ausführlicher Befehl zum Zuordnen von bestimmten Shards aus bestimmten Indexen zu bestimmten Nodes. | ||
+ | <code bash>for i in 0 1 2 3 4; do curl XPOST -s -k -u < | ||
+ | |||
+ | Rerouting von Shards mit der Einstellung '' | ||
+ | ^ Wert ^ Beschreibung ^ | ||
+ | | all (default) | alle Shards | | ||
+ | | primaries | shard allocation nur für primary shards | | ||
+ | | new_primaries | shard allocation nur für neu erstellte primary shards | | ||
+ | | none | keine shard allocation | | ||
+ | |||
+ | * auf einen bestimmten Index <code bash> | ||
+ | * oder auf einen Node <code bash> | ||
+ | |||
+ | === Script === | ||
+ | Um alle Shards von allen Indexen zuzuweisen, kann dieses Script genutzt werden. | ||
+ | Hier muss mann nur noch in der Variable " | ||
+ | |||
+ | <code bash># | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | curl -XGET -k -u < | ||
+ | read -p " | ||
+ | # | ||
+ | |||
+ | #read -p " | ||
+ | INDEX=`curl -XGET -k -u < | ||
+ | |||
+ | for line in $INDEX; do | ||
+ | for ((i=0; | ||
+ | curl -XPOST -k -u < | ||
+ | done | ||
+ | done</ | ||
+ | |||
+ | ==== Replikate ==== | ||
+ | Normalerweise sollten Shards mehrere Replikate haben. Damit man im Ausfall eines Nodes noch Daten auf anderen Nodes vorhalten kann. | ||
+ | Mit diesen Befehlen kann man das Verhalten steuern. | ||
+ | Replikate für einen bestimmten Index ändern (hier auf 1 Replikat): | ||
+ | <code bash> | ||
+ | Replikate für alle Indexe ändern (hier auf 0 Replikate): | ||
+ | <code bash> | ||
+ | |||
+ | ==== Zugriff ab Version 1.4 ==== | ||
+ | Ab der Elasticsearch Version 1.4 müssen für den Zugriff von verschiedenen externen Programmen (z.B. Kibana, elasticHQ, logstash) noch diese Parameter in der | ||
+ | ''/ | ||
+ | <code bash>####### | ||
+ | http.cors.enabled: | ||
+ | # | ||
+ | # | ||
+ | Mit dem Parameter '' | ||
+ | Siehe dazu die [[http:// |