Enviando los logs de mod_security a Elasticsearch con Filebeat

por | abril 11, 2019

En mi caso no utilizo una capa de Logstash para preprocesado de datos antes de indexarlos en Elastic por lo que el envío de logs es más sencillo. Si el output de Filebeat es Logstash probablemente sea necesario implementar algún filtro con grok para estructurar la información.

El principal problema de Filebeat para parsear los logs de mod_security es que éstos tienen formato multilínea. Para complicar algo más las cosas los logs se estructuran en diversas secciones (A-Audit Log Header, B-Request Headers, etc…) que nos dan diversa información sobre una transacción registrada. Esto no significa nada para Filebeat así que tendremos que formatear los logs de otra manera significativa.

Sigue leyendo

Administración de Docker Swarm con Portainer

por | marzo 30, 2019

Portainer nos proporciona una GUI web desde la que administrar un clúster de Docker Swarm: operatividad de contenedores (parada, reinicio, etc…), gestión de stacks, servicios, plantillas de imágenes, volúmenes para persistencia de datos…

En mi entorno parto de 4 nodos, 2 de ellos master y otros dos workers. Los 4 están configurados para poder servir peticiones de mis contenedores:

[root@docker-master1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
olw40ii82gslxgfjtmy5h2ncr *   docker-master1      Ready               Active              Leader              18.09.1
lvvjz6c4bfe4ez16kzkyuc31o     docker-master2      Ready               Active              Reachable           18.09.1
q8em4kafthkm1phkuuab48eau     docker-worker1      Ready               Active                                  18.09.1
hb4ylcxtchc6kevimak7wxr9e     docker-worker2      Ready               Active                                  18.09.1

Sigue leyendo

Gestión de roles y permisos en Grafana

por | marzo 9, 2019

Grafana hace muy sencilla la gestión de roles para los distintos grupos que necesiten acceder a los dashboards de métricas. Estos grupos pueden ser desde departamentos dentro de una empresa, organizaciones o distintos clientes a los que ofrecemos servicios de monitorización con Grafana.

No todos deben tener acceso a las distintas métricas que monitorizamos ni mucho menos a la administración o edición de dashboards. Para ello existen 3 tipos de roles: administrador, editor y visualizador (viewer). El primero es quien gestiona la plataforma al completo, el segundo puede modificar dashboards/alarmas y el tercero sólo visualizar dashboards.

Sigue leyendo

Probando Kubespray

por | marzo 5, 2019

Después de probar Minikube toca echar un vistazo a un clúster de Kubernetes con más de un nodo y que se asemeje más a un entorno real de producción. Tenemos un playbook de Ansible llamado Kubespray que nos facilita la puesta en marcha nuestro entorno.

Para instalar el clúster tengo 4 nodos CentOS 7 virtualizados con KVM:

Sigue leyendo

Métricas internas y tests de carga en InfluxDB

por | marzo 2, 2019

InfluxDB permite obtener métricas internas sobre su funcionamiento tales como estado de memoria heap, número de requests (y errores) a endpoints HTTP, series de datos almacenadas, duración media de querys, etc… Además si contamos con Grafana será muy sencillo representar estos datos.

En primer lugar tenemos que habilitar dichas métricas. En el fichero de configuración /etc/influxdb/influxdb.conf:

###
### Controls the system self-monitoring, statistics and diagnostics.
###
### The internal database for monitoring data is created automatically if    
### if it does not already exist. The target retention within this database
### is called 'monitor' and is also created with a retention period of 7 days
### and a replication factor of 1, if it does not exist. In all cases the
### this retention policy is configured as the default for the database.

[monitor]
  # Whether to record statistics internally.
   store-enabled = true

  # The destination database for recorded statistics
   store-database = "_internal"

  # The interval at which to record statistics
   store-interval = "10s"

Sigue leyendo