freedomofpress.elk
Rôle Ansible ELK
Installe la pile ELK (Elasticsearch, Logstash et Kibana) pour l'agrégation et la surveillance des journaux. Destiné à être intégré avec Riemann pour les fonctionnalités d'alerte.
Exigences
- Rôle freedomofpress.generate-ssl-cert
- 2 Go de RAM pour le serveur de journaux
- Clients de journaux pour expédier les journaux
Variables du rôle
elk_kibana_user: "kibana"
elk_kibana_logfile: "/var/log/kibana.log"
# Permet de désactiver la fonctionnalité de snapshot. Elle n'est pas bien
# testée, donc le laisser à false par défaut. Si défini sur true lors d'un premier
# exécution, il faut probablement ajouter `meta: flush_handlers` avant de procéder
# pour s'assurer que la variable `path.repo:` est reconnue par le service elasticsearch en cours d'exécution.
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: yes
_hack: null
# Ce serait bien d'utiliser iso8601 au lieu d'epoch, mais l'API ElasticSearch
# renvoie une erreur invalid_snapshot_name avec le format iso8601.
elk_elasticsearch_snapshot_name: "snapshot-{{ ansible_date_time.epoch }}"
# Limites à définir dans /etc/security/limits.conf. Assurez-vous de copier l'intégralité
# de la liste si vous écrasez l'un des éléments individuels.
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
# Plugin Riemann pour les alertes, filtre de dé-point pour la compatibilité avec ElasticSearch v2.
# Voir : https://www.elastic.co/blog/introducing-the-de_dot-filter
elk_logstash_plugins:
- logstash-output-riemann
- logstash-filter-de_dot
# Interface utilisée pour les restrictions de pare-feu et les recherches IPv4
elk_network_interface: eth0
elk_cluster_name: elk-logging
# SSL est désactivé par défaut. Définissez ces variables sur les chemins complets vers les certificats SSL
# que vous souhaitez utiliser, et Nginx forcera les connexions HTTPS.
# Vous devez placer les certificats SSL là-bas dans une tâche séparée.
elk_nginx_ssl_certificate: ""
elk_nginx_ssl_certificate_key: ""
elk_nginx_server_name: localhost
# Pas sûr pour une utilisation en production ! Écrasez pour sécuriser les connexions.
elk_kibana_username: kibana
elk_kibana_password: kibana
# Écrasez pour changer la page d'accueil, par exemple un tableau de bord personnalisé :
# "dashboard/Votre-Nom-de-Dashboard". Vous devez remplacer les espaces dans
# les noms de tableau de bord par des traits d'union, car Kibana s'y attend.
elk_kibana_default_app: discover
# Activer la configuration automatique de la liste blanche IP pour les "logclients".
# Utilise ufw. Désactivez si vous utilisez un autre rôle pour la configuration du pare-feu.
elk_configure_firewall: true
# Permet aux playbooks en aval d'utiliser la configuration du serveur web personnalisée
# Réglez cela sur false pour sauter le déploiement nginx de ce rôle.
elk_configure_nginx: true
# Permet aux playbooks en aval d'écraser les patterns et la liste de fichiers glob pour les filtres
elk_logstash_patterns:
- logstash-patterns/*
elk_logstash_filters:
- logstash-configs/*
# Déclarez le fichier glob des bases de données GeoIP à copier. Désactivé par défaut.
elk_logstash_geoipdbs: []
Utilisation
Utilisez le rôle dans un playbook comme ceci :
- hosts: logserver
roles:
- role: elk
elk_kibana_username: admin
elk_kibana_password: WowWhatAStrongPassword4
Ajout de visualisations
Le rôle ne crée pas encore automatiquement des visualisations Kibana. Vous pouvez cependant
importer des visualisations sauvegardées qui sont fournies avec le rôle dans files/kibana-dashboards.json
.
Allez dans Paramètres -> Objets -> Importer dans l'interface de Kibana et parcourez le fichier JSON.
Exécution des tests
Ce rôle utilise Molecule et ServerSpec pour les tests. Pour l'utiliser :
pip install molecule
gem install serverspec
molecule test
Vous pouvez également exécuter des commandes spécifiques :
molecule idempotence
molecule verify
Consultez la documentation de Molecule pour plus d'informations.
Lecture complémentaire
Configuration
- Documentation officielle ElasticSearch
- Configuration ELK de l'UCLA
- Guide DigitalOcean sur l'installation d'ELK
Développement de filtres personnalisés
Consultez le répertoire examples/writing-filters dans ce dépôt pour un environnement de développement préconfiguré. Copiez ce répertoire sur un serveur avec Logstash installé, ou utilisez une VM de test Vagrant.
Maintenance
Licence
MIT
Stands up ELK stack for log aggregation.
ansible-galaxy install freedomofpress.elk