En este artículo vamos a parsear los log generados por un servidor Zimbra. Ya tenemos funcionando nuestro servidor graylog y empezaremos a preparar el terreno para capturar dichos logs. Lo primero que haremos es hacer ajustes en la configuración de graylog.
Geo-Location Processor
Por defecto graylog no trae una base datos para la geo localizacion por lo que debemos descargarla de MaxMind City databases .
wget -t0 -c http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
Seguidamente extraemos el contenido del fichero
tar -xvf GeoLite2-City.tar.gz
y copiamos el fichero GeoLite2-City.mmdb a /etc/graylog/server . Notese que la carpeta que se crea al descompactar GeoLite2-City.tar.gz puede diferir de la del tutorial en la fecha.
cp GeoLite2-City_20180306/GeoLite2-City.mmdb /etc/graylog/server
Ahora en la web de graylog debemos activar el Geo-Location Processor y vamos a system/Configuration. Podemos apreciar que esta deshabilitado, presionamos el boton Update.
Lo activamos marcando en Enable Geo-Location porcessor lo demas lo dejamos por defecto. En la medida que vengan mensajes que contengan ips los procesera obteniendo datos adicionales como las coordenadas, código pais, nombre de ciudad.
Message Processors Configuration
Debemos tener un orden de procesamiento que el cual nos permita obtener lo que deseamos a la hora de parsear los mensajes de logs obtenidos desde los inputs. Para ver este orden nos vamos a system/Configuration y en Message Processors Configuration presionamos el boton Update. Así es como viene por defecto:
El orden de procesos sera:
- AWS Instance Name Lookup
- Message Filter Chain que procesa los inputs
- Pipeline Procesos si queremos tener a los campos estáticos creados por los extractores
- Geo-Location Processor para procesar las ips descubiertas agregando campos asociados a la misma como localizacion geográfica, codigo del pais y nombre la de ciudad.
Cambiando el orden de procesamiento quedaría así:
Salvamos esta configuración.
Indices
Graylog tiene su propio índice que genera por defecto que es graylog y en system/Indices podemos apreciarlo.
Creamos un nuevo índice para Zimbra (Create index set) con Index shard 4 y Index replicas 0, la rotación del indice del tipo Index time y la retención puede ser de borrado, clausura de un indice de acuerdo al numero máximo de indices o no hacer nada. En mi caso lo puse a rotar mensual y que elimine los indices pasados los 12 meses.
Este indice se crea de manera inmediata
y con cerebro podemos comprobarlo
Content Pack
Para facilitarles la configuracion de Graylog generamos un Content Pack para zimbra, en un git de logstash. El cual incluye Input de tipo beats, extractores, los patrones antes mencionados y por último el stream para que el input lo alamacene en indice que hemos creado para zimbra. Para descargar estos ficheros desde un PC con linux solo tendremos que instalar git para clonar el repositorio.
#apt-get install git
y seguidamente lo clonamos
#git clone https://github.com/opc40772/Zimbra-Graylog
Si estamos desde un pc con Windows solo accedemos aqui. Y luego le damos al boton de clonar o descargar.
En Linux tendremos la carpeta Zimbra-Graylog y en Windows un fichero zip llamado Zimbra-Graylog-master que debemos descompactar. En cualquiera de los 2 casos abriremos la carpeta Content Pack y dentro encontraremos el fichero content_pack_zimbra.json que es el que subiremos a Graylog.
Importamos ahora el fichero de la carpeta Content Pack y para ellos seleccionamos en System / Content Packs la opción Import content packs para subir el archivo. Selecionamos Examinar y subimos el json. Quiero alertar que si le damos varias veces al boton de Upload nos creara varias veces las configuraciones, asi que sean cuidadosos y esperen por el aviso verde que sale alertando que todo esta OK.
Como vemos lo agrega a la lista
Ahora seleccionamos el content pack Zimbra.
Con el Pack ya instalado todo es muy facil. Editamos el stream de zimbra en Stream para asociarle el indice que creamos inicialmente (Zimbra Indice). Marcamos que elimine las coincidencias para el stream por defecto All message para que solamente lo almacene en el índice de zimbra
Cerebro
Por defecto graylog por cada indice que se crea generá su propia plantilla y la aplica cada vez que el indice rota. Si queremos nuestras propias plantillas debemos crearlas en el mismo elasticsearch. Aquí agregaremos el campo real_timestamp que nos será util a la hora de usar grafana y también convertimos a tipo geoip los campos src_relayip_geolocation y dst_relayip_geolocation a tipo geo_point para poder usarlos en grafana en los paneles de World Map ya que graylog no lo hace.
"real_timestamp_graf": { "type": "date", },
Y
"src_relayip_geolocation": { "type": "string", "copy_to": "src_location" }, "src_location": { "type": "geo_point" }, "dst_relayip_geolocation": { "type": "string", "copy_to": "dst_location" }, "dst_location": { "type": "geo_point" }
En el Content Pack que bajamos ya esta la plantilla personalizada de la que hablamos y que vamos a importar a elasticsearch a través de Cerebro. Vamos a more /index templates
Creamos un template nuevo
En el nombre lo rellenamos con zimbra_custom y abrimos la carpeta Elasticsearch Zimbra Template (del Content Pack) que contiene el archivo con el template. Lo editamos y pegamos su contenido aquí.
Y seguidamente presionamos el botón create.
Ahora pararemos el servicio graylog para proceder a eliminar el índice mediante cerebro.
#systemctl stop graylog-server.service
En cerebro nos paramos encima del indice y desplegamos las opciones y seleccionamos delete index.
Arrancamos nuevamente el servicio de graylog y este creará el indice con dicha plantilla.
#systemctl start graylog-server.service
Ahora pasamos a configurar nuestro Zimbra paraque envie sus logs a nuestro Graylog configurado
Zimbra
En el servidor zimbra instalaremos filebeat que es el servicio que le entregará los logs al graylog a través del tipo beats del input anteriormente declarado. Ver la compatiblidad del producto ya que tenemos que tener en cuenta que graylog es compatible con elastic 5.6.x máximo. Pueden usar la version de 5.6.4 de filebeat que la ultima version 5.
Lo descargamos:
# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.1-amd64.deb
Ya descargado lo instalamos.
#dpkg -i filebeat-5.4.1-amd64.deb
Ahora estamos listos para configurar el filebeat en el equipo remoto o sea el servidor de correo zimbra. En el servidor de correo editamos el fichero filebeat.yml.
#nano /etc/filebeat/filebeat.yml
Solo modificaremos la sesiones de Filebeat prospectors y Logstash output.
#=========================== Filebeat prospectors ============================= filebeat.prospectors: # Each - is a prospector. Most options can be set at the prospector level, so # you can use different prospectors for various configurations. # Below are the prospector specific configurations. - input_type: log document_type: postfix paths: - /var/log/mail.log # - /var/log/zimbra.log - input_type: log document_type: zimbra_audit paths: - /opt/zimbra/log/audit.log - input_type: log document_type: zimbra_mailbox paths: - /opt/zimbra/log/mailbox.log - input_type: log document_type: nginx paths: - /opt/zimbra/log/nginx.access.log #- c:\programdata\elasticsearch\logs\*
#----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts #hosts: ["logstash.midominio.cu:5443"] hosts: ["ip-graylog:5045"] # Optional SSL. By default is off. # List of root certificates for HTTPS server verifications #bulk_max_size: 2048 #ssl.certificate_authorities: ["/etc/filebeat/graylog.crt"] template.name: "filebeat" template.path: "filebeat.template.json" template.overwrite: false # Certificate for SSL client authentication #ssl.certificate: "/etc/pki/client/cert.pem" # Client Certificate Key #ssl.key: "/etc/pki/client/cert.key" #================================ Logging ===================================== # Sets log level. The default log level is info. # Available log levels are: critical, error, warning, info, debug #logging.level: debug # At debug level, you can selectively enable logging only for some components. # To enable all selectors use ["*"]. Examples of other selectors are "beat", # "publish", "service". #logging.selectors: ["*"] logging.metrics.period: 1m
Después de modificado reiniciamos el servicio de filebeat
systemctl enable filebeat.service service filebeat restart
Ahora en graylog seleccionamos el stream de zimbra y ya veremos las como va parseando los mensajes de logs creando los campos
Ya desplegando un mensaje de log podemos ver el campo real_timestamp generado por el pipeline que creamos
Grafana
Los dashboards de graylog no ofrecen las posibilidades a mi modo de ver que las que tiene grafana por eso nuestro dashboard lo haremos en grafana
Creamos el datasource en grafana el cual nombraremos Zimbra-graylog
Comparto con ustedes un dashboard prediseñado en el sitio de oficial grafana el cual podra importar. Antes lea las instrucciones e importe de la siguente manera.
Seleccionamos Import dashboard
Subimos el fichero descargado Upload .json file y lo asociamos al datasource creado para el.
Ya podemos ver el dashboard en acción.
Espero les sea de utilidad.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36
Hola
intento seguir este tutorial al pie de la letra tengo instalado Graylog v3.1.3+cda805f
puedo cargar el fichero content pack sin problema cuando lo voy a instalar me da un error, por lo que he buscado en internet me dice que es un problema de la version, puede preparar este fichero del squid para la version 3 de graylog o que cambios necesito hacerle a este para poderlo utilizar.
Muchas gracias
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
no me muestra las gráficas en grafana al importar el dasboard para elasticsearch
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0
el link a la primera parte de este articulo deberia estar al principio o al final de este articulo
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36
Que tal amigos.
tengo un detalle cuando hablan de
«real_timestamp_graf»: {
«type»: «date»,
},
y
«src_relayip_geolocation»: {
«type»: «string»,
«copy_to»: «src_location»
},
«src_location»: {
«type»: «geo_point»
},
«dst_relayip_geolocation»: {
«type»: «string»,
«copy_to»: «dst_location»
},
«dst_location»: {
«type»: «geo_point»
}
esos dos tengo que introducirlos en alguna plantilla o crear yo la plantilla con ello ?
ya que veo que están ya en el zimbra_custom la única diferencia es que real_timestamp no tiene el _graf
lo pregunto por que tengo un error al momento de generar data_sources me da el siguiente error
No date field named real_timestamp found
muy agradecido por el grandioso contenido amigos