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.
Eine Logstash-Pipeline besteht aus drei Hauptkomponenten: 1. Inputs: Datenquellen 2. Filters: Datentransformation 3. Outputs: Datenziele
Input-Plugins definieren, wie Daten in Logstash eingelesen werden. Häufig verwendete Plugins sind:
input {
file {
path => "/var/log/apache2/*.log"
start_position => "beginning"
sincedb_path => "/var/lib/logstash/sincedb"
type => "apache-access"
codec => json
}
}input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/logstash/ssl/logstash.crt"
ssl_key => "/etc/logstash/ssl/logstash.key"
}
}input {
kafka {
bootstrap_servers => "kafka1:9092,kafka2:9092"
topics => ["logs", "metrics"]
group_id => "logstash_consumers"
codec => json
auto_offset_reset => "latest"
}
}Filter-Plugins ermöglichen die Transformation und Anreicherung von Daten:
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
target => "@timestamp"
}
}filter {
mutate {
add_field => { "environment" => "production" }
remove_field => [ "message" ]
rename => { "old_field" => "new_field" }
gsub => [
"field_name", "pattern_to_replace", "replacement"
]
}
}filter {
ruby {
code => '
event.set("calculated_field",
event.get("field1").to_i * event.get("field2").to_i
)
'
}
}Output-Plugins definieren, wohin die verarbeiteten Daten gesendet werden:
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"
}
}output {
kafka {
bootstrap_servers => "kafka1:9092,kafka2:9092"
topic_id => "processed_logs"
codec => json
acks => "all"
retries => 5
}
}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}"
}
}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-Xms2g
-Xmx2g
-XX:+UseG1GC
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=75
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ößexpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["https://opensearch:9200"]
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "${MONITORING_PASSWORD}"output {
elasticsearch {
hosts => ["https://opensearch:9200"]
dead_letter_queue.enable: true
dead_letter_queue.max_bytes: 1gb
}
}output {
elasticsearch {
hosts => ["https://opensearch:9200"]
retry_initial_interval => 2
retry_max_interval => 64
retry_on_conflict => 5
}
}monitoring.enabled: true
monitoring.collection.interval: 10s
monitoring.elasticsearch.hosts: ["https://opensearch:9200"]path.logs: /var/log/logstash
log.level: info
log.rotation.enabled: true
log.rotation.max_size: 100mb
log.rotation.max_files: 7Diese 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