freedomofpress.elk
Rol de Ansible para ELK
Instala el stack ELK (Elasticsearch, Logstash y Kibana) para la agregación y monitoreo de logs. Está destinado a la integración con Riemann para funcionalidad de alertas.
Requisitos
- Rol freedomofpress.generate-ssl-cert
- 2GB de RAM para el servidor de logs
- Clientes de logs para enviar logs
Variables del rol
elk_kibana_user: "kibana"
elk_kibana_logfile: "/var/log/kibana.log"
# Permite desactivar la funcionalidad de instantáneas. No está bien
# probado, así que dejar false como defecto por ahora. Si se establece en true en una primera
# ejecución, se debería añadir `meta: flush_handlers` antes de ejecutar para asegurar que
# la variable `path.repo:` sea reconocida por el servicio de elasticsearch en ejecución.
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
# Sería bueno utilizar iso8601 en lugar de epoch, pero la API de ElasticSearch
# genera un error de invalid_snapshot_name con el formato iso8601.
elk_elasticsearch_snapshot_name: "snapshot-{{ ansible_date_time.epoch }}"
# Límites a establecer en /etc/security/limits.conf. Asegúrate de copiar toda la
# lista si sobreescribes cualquier elemento individual.
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 de Riemann para alertas, filtro de de-dot para compatibilidad con ElasticSearch v2.
# Ver: https://www.elastic.co/blog/introducing-the-de_dot-filter
elk_logstash_plugins:
- logstash-output-riemann
- logstash-filter-de_dot
# Interfaz utilizada para restricciones de firewall y búsquedas IPv4
elk_network_interface: eth0
elk_cluster_name: elk-logging
# SSL desactivado por defecto. Establece estas variables a las rutas completas de los
# certificados SSL que deseas usar y Nginx forzará las conexiones HTTPS.
# Debes colocar los certificados SSL allí en un play separado.
elk_nginx_ssl_certificate: ""
elk_nginx_ssl_certificate_key: ""
elk_nginx_server_name: localhost
# ¡No seguro para uso en producción! Sobrescribe para asegurar inicios de sesión.
elk_kibana_username: kibana
elk_kibana_password: kibana
# Sobrescribe para cambiar la página de inicio, por ejemplo, un dashboard personalizado:
# "dashboard/Nombre-De-Tu-Dashboard". Debes reemplazar los espacios en
# los nombres de los dashboards con guiones, ya que Kibana lo espera.
elk_kibana_default_app: discover
# Habilita la configuración automática de la lista blanca de IP para "logclients".
# Utiliza ufw. Desactiva si estás usando otro rol para la configuración del firewall.
elk_configure_firewall: true
# Permite que otros playbooks utilicen la configuración personalizada del servidor web
# Establece esto en false para omitir el despliegue de nginx de este rol
elk_configure_nginx: true
# Permite que otros playbooks sobreescriban patrones y lista de filtros fileglob
elk_logstash_patterns:
- logstash-patterns/*
elk_logstash_filters:
- logstash-configs/*
# Declara fileglob de bases de datos GeoIP a copiar. Desactivado por defecto.
elk_logstash_geoipdbs: []
Uso
Utiliza el rol en un playbook así:
- hosts: logserver
roles:
- role: elk
elk_kibana_username: admin
elk_kibana_password: WowWhatAStrongPassword4
Agregar visualizaciones
El rol aún no crea visualizaciones de Kibana automáticamente. Sin embargo, puedes
importar visualizaciones guardadas que vienen con el rol en files/kibana-dashboards.json
.
Ve a Configuración -> Objetos -> Importar en la interfaz de Kibana y busca el archivo JSON.
Ejecutar las pruebas
Este rol utiliza Molecule y ServerSpec para las pruebas. Para usarlo:
pip install molecule
gem install serverspec
molecule test
También puedes ejecutar comandos selectivos:
molecule idempotence
molecule verify
Consulta la documentación de Molecule para más información.
Lecturas adicionales
Instalación
- Documentación oficial de ElasticSearch
- Configuración ELK de UCLA
- Guía de DigitalOcean para configurar ELK
Desarrollo de filtros personalizados
Consulta el directorio examples/writing-filters en este repositorio para un entorno de desarrollo preconfigurado. Copia ese directorio a un servidor con logstash instalado, o usa una VM de pruebas con Vagrant.
Mantenimiento
Licencia
MIT
Stands up ELK stack for log aggregation.
ansible-galaxy install freedomofpress.elk