freedomofpress.elk
ELK Ansible-Rolle
Installiert den ELK-Stack (Elasticsearch, Logstash und Kibana) für die Protokollaggregation und Überwachung. Ist für die Integration mit Riemann zur Alarmierungsfunktion gedacht.
Anforderungen
- Rolle freedomofpress.generate-ssl-cert
- 2 GB RAM für den Log-Server
- Log-Clients, um Protokolle zu versenden
Rollenvariablen
elk_kibana_user: "kibana"
elk_kibana_logfile: "/var/log/kibana.log"
# Gibt die Möglichkeit, die Snapshot-Funktionalität zu deaktivieren. Sie ist nicht gut getestet,
# daher bleibt false als Standardwert. Wenn auf true gesetzt, sollte wahrscheinlich
# `meta: flush_handlers` vor dem Ausführen hinzugefügt werden, um sicherzustellen,
# dass die Variable `path.repo:` vom aktiven Elasticsearch-Dienst erkannt wird.
elk_elasticsearch_snapshot: false
elk_elasticsearch_snapshot_directory: /var/lib/elasticsearch/backups
elk_elasticsearch_snapshot_repository: es_backup
elk_elasticsearch_snapshot_initialization:
type: fs
settings:
location: "{{ elk_elasticsearch_snapshot_directory }}"
compress: ja
_hack: null
# Es wäre schön, ISO8601 anstelle von Epoch zu verwenden, aber die ElasticSearch API
# wirft einen Fehler ungültiger Snapshot-Namen mit dem ISO8601-Format.
elk_elasticsearch_snapshot_name: "snapshot-{{ ansible_date_time.epoch }}"
# Grenzen, die in /etc/security/limits.conf gesetzt werden. Stelle sicher, dass die gesamte
# Liste kopiert wird, wenn einzelne Elemente überschrieben werden.
elk_elasticsearch_pam_limits:
- domain: elasticsearch
limit_item: memlock
limit_type: hard
value: unlimited
- domain: elasticsearch
limit_item: memlock
limit_type: soft
value: unlimited
- domain: elasticsearch
limit_item: nofile
limit_type: soft
value: 65535
- domain: elasticsearch
limit_item: nofile
limit_type: hard
value: 65535
# Riemann-Plugin für Alarmierungen, de-dot Filter zur Kompatibilität mit ElasticSearch v2.
# Siehe: https://www.elastic.co/blog/introducing-the-de_dot-filter
elk_logstash_plugins:
- logstash-output-riemann
- logstash-filter-de_dot
# Schnittstelle die für Firewall-Einschränkungen und IPv4-Suchen verwendet wird
elk_network_interface: eth0
elk_cluster_name: elk-logging
# SSL ist standardmäßig deaktiviert. Setze diese Variablen auf die vollständigen Pfade zu den SSL
# Zertifikaten, die du verwenden möchtest, und Nginx wird HTTPS-Verbindungen erzwingen.
# Du musst die SSL-Zertifikate dort in einem separaten Play ablegen.
elk_nginx_ssl_certificate: ""
elk_nginx_ssl_certificate_key: ""
elk_nginx_server_name: localhost
# Nicht sicher für die Produktion! Überschreibe um Anmeldungen abzusichern.
elk_kibana_username: kibana
elk_kibana_password: kibana
# Überschreibe, um die Startseite zu ändern, z.B. ein benutzerdefiniertes Dashboard:
# "dashboard/Dein-Dashboard-Name". Du musst Leerzeichen in
# Dashboard-Namen durch Bindestriche ersetzen, da Kibana das erwartet.
elk_kibana_default_app: discover
# Aktiviere die automatische Konfiguration der IP-Whitelist für "Log-Clients".
# Verwendet ufw. Deaktiviere, wenn du eine andere Rolle für die Firewall-Konfiguration verwendest.
elk_configure_firewall: true
# Erlaube nachgelagerten Playbooks, benutzerdefinierte Webserver-Konfigurationen zu nutzen
# Setze dies auf false, um den Rollout von Nginx dieser Rolle zu überspringen
elk_configure_nginx: true
# Erlaube nachgelagerten Playbooks, Muster und Filter-Dateilisten zu überschreiben
elk_logstash_patterns:
- logstash-patterns/*
elk_logstash_filters:
- logstash-configs/*
# Deklariere die Datei mit GeoIP-Datenbanken, die kopiert werden sollen. Standardmäßig deaktiviert.
elk_logstash_geoipdbs: []
Verwendung
Verwende die Rolle in einem Playbook wie folgt:
- hosts: logserver
roles:
- role: elk
elk_kibana_username: admin
elk_kibana_password: WowWhatAStrongPassword4
Hinzufügen von Visualisierungen
Die Rolle erstellt noch keine Kibana-Visualisierungen automatisch. Du kannst jedoch
gespeicherte Visualisierungen, die mit der Rolle in files/kibana-dashboards.json
geliefert werden, importieren.
Gehe zu Einstellungen -> Objekte -> Importieren in der Kibana-Benutzeroberfläche und suche nach der JSON-Datei.
Tests ausführen
Diese Rolle verwendet Molecule und ServerSpec für das Testen. Um sie zu verwenden:
pip install molecule
gem install serverspec
molecule test
Du kannst auch selektive Befehle ausführen:
molecule idempotence
molecule verify
Siehe die Molecule-Dokumentation für weitere Informationen.
Weiterführende Informationen
Einrichtung
- Offizielle ElasticSearch-Dokumente
- UCLA ELK-Konfiguration
- DigitalOcean-Anleitung zur Einrichtung von ELK
Entwicklung benutzerdefinierter Filter
Siehe das Verzeichnis examples/writing-filters in diesem Repository für eine vorkonfigurierte Entwicklungsumgebung. Kopiere das Verzeichnis auf einen Server mit installiertem Logstash oder verwende eine Vagrant-Test-VM.
Wartung
Lizenz
MIT
Stands up ELK stack for log aggregation.
ansible-galaxy install freedomofpress.elk