Elasticsearch-Einrichtung für Log-Analyse

Elasticsearch ist die führende Open-Source-Suchmaschine für die zentralisierte Log-Analyse. Zusammen mit Logstash und Kibana bildet es den ELK Stack, der es ermöglicht, große Mengen von Log-Daten zu sammeln, zu verarbeiten, zu durchsuchen und zu visualisieren. Diese Anleitung führt Sie durch die vollständige Einrichtung.

Elasticsearch installieren und konfigurieren

Fügen Sie das offizielle Elastic-Repository hinzu und installieren Sie Elasticsearch:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update
sudo apt install elasticsearch

Konfigurieren Sie die grundlegenden Einstellungen in /etc/elasticsearch/elasticsearch.yml:

cluster.name: log-analysis
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

Passen Sie die JVM-Heap-Größe in /etc/elasticsearch/jvm.options.d/heap.options an:

-Xms4g
-Xmx4g

Starten Sie Elasticsearch und überprüfen Sie den Status:

sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
curl -k https://localhost:9200

Logstash-Pipeline einrichten

Installieren Sie Logstash und erstellen Sie eine Pipeline für Syslog-Verarbeitung:

sudo apt install logstash

Erstellen Sie die Pipeline-Konfiguration unter /etc/logstash/conf.d/syslog.conf:

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:log_message}" }
  }
  date {
    match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
}

output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    index => "syslog-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "${ES_PASSWORD}"
    ssl_certificate_verification => true
  }
}

Grok-Patterns zerlegen die Syslog-Nachrichten in strukturierte Felder. Der Date-Filter parst die Zeitstempel korrekt, damit sie in Elasticsearch als Zeitfeld indiziert werden.

Index Lifecycle Management

Konfigurieren Sie ILM, um Indizes automatisch zu verwalten und Speicherplatz effizient zu nutzen:

curl -X PUT "https://localhost:9200/_ilm/policy/logs-policy" -H 'Content-Type: application/json' -u elastic -d '
{
  "policy": {
    "phases": {
      "hot": { "actions": { "rollover": { "max_size": "50GB", "max_age": "1d" } } },
      "warm": { "min_age": "7d", "actions": { "shrink": { "number_of_shards": 1 }, "forcemerge": { "max_num_segments": 1 } } },
      "delete": { "min_age": "30d", "actions": { "delete": {} } }
    }
  }
}'

Diese Policy rollt Indizes nach 50 GB oder einem Tag über, verschiebt sie nach 7 Tagen in die Warm-Phase mit reduzierter Shard-Anzahl und löscht sie nach 30 Tagen automatisch.

Kibana-Dashboards einrichten

Installieren Sie Kibana und stellen Sie die Verbindung zu Elasticsearch her:

sudo apt install kibana
sudo systemctl enable kibana
sudo systemctl start kibana

Konfigurieren Sie die Elasticsearch-Verbindung in /etc/kibana/kibana.yml:

server.host: "0.0.0.0"
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "${KIBANA_PASSWORD}"

Öffnen Sie Kibana unter http://server-ip:5601, erstellen Sie ein Data View für syslog-* und beginnen Sie mit der Erstellung von Dashboards zur Überwachung Ihrer Infrastruktur. Nutzen Sie Lens-Visualisierungen für schnelle Analysen und speichern Sie häufig verwendete Abfragen als gespeicherte Suchen.