63 Logstash

Logstash ist eine leistungsstarke Data-Pipeline-Engine, die Daten aus verschiedenen Quellen aufnehmen, transformieren und an verschiedene Ziele weiterleiten kann. Die Verarbeitung erfolgt in Echtzeit und ermöglicht komplexe Datentransformationen.

63.1 Architektur und Pipeline-Konzept

Eine Logstash-Pipeline besteht aus drei Hauptkomponenten: 1. Inputs: Datenquellen 2. Filters: Datentransformation 3. Outputs: Datenziele

63.1.1 Input Plugins

Input-Plugins definieren, wie Daten in Logstash eingelesen werden. Häufig verwendete Plugins sind:

63.1.1.1 File Input

input {
  file {
    path => "/var/log/apache2/*.log"
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb"
    type => "apache-access"
    codec => json
  }
}

63.1.1.2 Beats Input

input {
  beats {
    port => 5044
    ssl => true
    ssl_certificate => "/etc/logstash/ssl/logstash.crt"
    ssl_key => "/etc/logstash/ssl/logstash.key"
  }
}

63.1.1.3 Kafka Input

input {
  kafka {
    bootstrap_servers => "kafka1:9092,kafka2:9092"
    topics => ["logs", "metrics"]
    group_id => "logstash_consumers"
    codec => json
    auto_offset_reset => "latest"
  }
}

63.1.2 Filter Plugins

Filter-Plugins ermöglichen die Transformation und Anreicherung von Daten:

63.1.2.1 Grok Filter für Log-Parsing

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
}

63.1.2.2 Mutate Filter für Feldmanipulation

filter {
  mutate {
    add_field => { "environment" => "production" }
    remove_field => [ "message" ]
    rename => { "old_field" => "new_field" }
    gsub => [
      "field_name", "pattern_to_replace", "replacement"
    ]
  }
}

63.1.2.3 Ruby Filter für komplexe Transformationen

filter {
  ruby {
    code => '
      event.set("calculated_field",
        event.get("field1").to_i * event.get("field2").to_i
      )
    '
  }
}

63.1.3 Output Plugins

Output-Plugins definieren, wohin die verarbeiteten Daten gesendet werden:

63.1.3.1 Elasticsearch Output

output {
  elasticsearch {
    hosts => ["https://opensearch:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "${ES_PASSWORD}"
    ssl => true
    ssl_certificate_verification => true
    cacert => "/etc/logstash/ssl/ca.crt"
  }
}

63.1.3.2 Kafka Output

output {
  kafka {
    bootstrap_servers => "kafka1:9092,kafka2:9092"
    topic_id => "processed_logs"
    codec => json
    acks => "all"
    retries => 5
  }
}

63.2 Pipeline-Management

63.2.1 Konfigurationsdateien

Die Pipeline-Konfiguration wird in .conf-Dateien gespeichert:

# /etc/logstash/conf.d/apache.conf
input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  
  geoip {
    source => "clientip"
  }
  
  useragent {
    source => "agent"
    target => "user_agent"
  }
}

output {
  elasticsearch {
    hosts => ["https://opensearch:9200"]
    index => "apache-logs-%{+YYYY.MM}"
  }
}

63.2.2 Multiple Pipelines

Logstash unterstützt mehrere parallele Pipelines:

pipelines.yml:

- pipeline.id: apache
  path.config: "/etc/logstash/conf.d/apache.conf"
  pipeline.workers: 2
  
- pipeline.id: metrics
  path.config: "/etc/logstash/conf.d/metrics.conf"
  pipeline.workers: 1
  queue.type: persisted
  
- pipeline.id: events
  path.config: "/etc/logstash/conf.d/events.conf"
  pipeline.batch.size: 125

63.3 Performance-Optimierung

63.3.1 JVM-Einstellungen

-Xms2g
-Xmx2g
-XX:+UseG1GC
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=75

63.3.2 Pipeline-Einstellungen

pipeline.workers: 4              # Anzahl paralleler Worker
pipeline.batch.size: 125        # Events pro Batch
pipeline.batch.delay: 50        # Batch-Verzögerung in ms
queue.type: persisted          # Persistente Queue
queue.max_bytes: 1gb           # Queue-Größe

63.3.3 Monitoring-Konfiguration

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["https://opensearch:9200"]
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "${MONITORING_PASSWORD}"

63.4 Fehlerbehandlung und Resilience

63.4.1 Dead Letter Queues

output {
  elasticsearch {
    hosts => ["https://opensearch:9200"]
    dead_letter_queue.enable: true
    dead_letter_queue.max_bytes: 1gb
  }
}

63.4.2 Retry-Mechanismen

output {
  elasticsearch {
    hosts => ["https://opensearch:9200"]
    retry_initial_interval => 2
    retry_max_interval => 64
    retry_on_conflict => 5
  }
}

63.5 Best Practices

63.5.1 Input-Best-Practices

  1. File Input
  2. Beats Input

63.5.2 Filter-Best-Practices

  1. Grok Filter
  2. Performance

63.5.3 Output-Best-Practices

  1. Elasticsearch Output
  2. Allgemein

63.6 Monitoring und Wartung

63.6.1 Metriken

monitoring.enabled: true
monitoring.collection.interval: 10s
monitoring.elasticsearch.hosts: ["https://opensearch:9200"]

63.6.2 Log-Rotation

path.logs: /var/log/logstash
log.level: info
log.rotation.enabled: true
log.rotation.max_size: 100mb
log.rotation.max_files: 7

Diese umfassende Konfiguration von Logstash ermöglicht: - Effiziente Datenverarbeitung - Hohe Verfügbarkeit - Optimale Performance - Zuverlässige Fehlerbehandlung - Effektives Monitoring

Für einen erfolgreichen Betrieb ist es wichtig: 1. Die Pipeline-Konfiguration regelmäßig zu überprüfen 2. Performance-Metriken zu monitoren 3. Ressourcen entsprechend zu skalieren 4. Sicherheitsaspekte zu berücksichtigen 5. Backup-Strategien zu implementieren