Clúster Elasticsearch. Logstash y Grafana. Análisis de logs. 4ta Parte.

Como les decía en el tercer artículo vamos ahora a configurar nuestro logstash para que filtre los logs de zimbra.
Logstash
Nos descargaremos los patrones y filtros que ya estan definidos para él y le haremos alguna que otra modificación. Instalamos git para clonar el repositorio de archivos

#apt-get install git

y seguidamente lo clonamos

#git clone https://github.com/ITLinuxCL/zimbra_logstash

Veremos que se crea una carpeta llamada zimbra_logstash y dentro estaran ya los filtros y patrones que vamos a utilizar en nuestro procesamiento de nuestros logs de zimbra.
Ahora modificaremos nuevamente el fichero output de logstash para su salida a elasticsearch pero en este caso para el zimbra, donde crea el indice.

#nano /etc/logstash/conf.d/output-elasticsearch.conf

Agregamos debajo de la salida de squid lo siguiente:

output {
if [host] == "squid" {
elasticsearch {
hosts => ["es-data-01.mpcfg.co.cu:9200","es-data-02.mpcfg.co.cu:9200","es-data-03.mpcfg.co.cu:9200"]
manage_template => false
index => "squid-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
else if [host] == "mail" {
elasticsearch {
hosts => ["es-data-01.mpcfg.co.cu:9200","es-data-02.mpcfg.co.cu:9200","es-data-03.mpcfg.co.cu:9200"]
manage_template => false
index => "correo-%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}

}

Se agrega lo que esta en negrilla. Como vemos nuestro host se llama mail y esto debe coincidir con el nombre del host zimbra vuestro para que les funcione correctamente.
Vamos ahora a copiar los filtros necesarios de zimbra y los patrones de los cuales se van a auxiliar con el plugin grok para a partir de los mismos para hacer el parseo de los logs de zimbra.
En la carpeta donde clonamos con el git el repositorio de input, filtros, patrones y outputs.

#cd /root/zimbra_logstash/conf.d
#cp 10-filter-postfix.conf 15-filter-sasl.conf 16-filter-amavis.conf 17-filter-nginx.conf 18-filter-zimbra.conf 19-filter-mutate.conf /etc/logstash/conf.d

Copiamos la carpeta donde vienen definidos los patrones para la configuración de logstash.

#cp -R /root/zimbra_logstash/patterns /etc/logstash

Ahora modificaremos el fichero 10-filter-postfix.conf agregando estas lineas para usar la geolocalización de origen y destino de los mensajes de correo. Sugerencia para no equivocarse copiar lo siguente que esta en negrilla antes del ultimo corchete.

if [component] == "postsuper" {
grok {
patterns_dir => ["/etc/logstash/patterns/"]
match => [ "message", "%{POSTFIXPOSTSUPER}" ]
add_tag => [ "relay" ]
remove_tag => [ "unknown" ]
}
}

if [src_relayip] {
geoip {
source => "src_relayip"
target => "geoip"
database => "/etc/logstash/geoip/GeoLite2-City.mmdb"
fields => [ "country_code2", "country_name" ]
fields => [ "latitude", "longitude" ]
add_field => [ "[geoip][location]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][location]", "%{[geoip][latitude]}" ]
add_tag => "geoip"
}
mutate {
convert => [ "[geoip][location]", "float"]
}
}
if [dst_relayip] {
geoip {
source => "dst_relayip"
target => "geoip"
database => "/etc/logstash/geoip/GeoLite2-City.mmdb"
fields => [ "country_code2", "country_name" ]
fields => [ "latitude", "longitude" ]
add_field => [ "[geoip][location]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][location]", "%{[geoip][latitude]}" ]
add_tag => "geoip"
}
mutate {
convert => [ "[geoip][location]", "float"]
}
}

}

Ya casi tenemos todo listo pero nos falta aún pasarle la plantilla al elasticsearch, para el acomodo de algunos tipos de datos del índice como el de geoip para poder hacer bien los mapas de geolocalización. Recurrimos nuevamente la herramienta web del cluster de la primera parte cerebro. En el menu more seleccionamos index templates:

A la derecha crearemos el template con nombre correo-filebeat con el siguiente contenido:

{
"order": 0,
"template": "correo-filebeat-*",
"settings": {
"index": {
"number_of_replicas": "2",
"refresh_interval": "5s"
}
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"template1": {
"mapping": {
"ignore_above": 1024,
"index": "not_analyzed",
"type": "{dynamic_type}",
"doc_values": true
},
"match": "*"
}
}
],
"_all": {
"norms": false,
"enabled": true
},
"properties": {
"tls_info": {
"index": "false",
"type": "text"
},
"@timestamp": {
"type": "date"
},
"geoip": {
"dynamic": true,
"type": "object",
"properties": {
"ip": {
"type": "ip",
"doc_values": true
},
"latitude": {
"type": "float",
"doc_values": true
},
"country_code2": {
"index": "false",
"type": "text"
},
"country_name": {
"index": "false",
"type": "text"
},
"location": {
"type": "geo_point",
"doc_values": true
},
"longitude": {
"type": "float",
"doc_values": true
}
}
},
"offset": {
"type": "long",
"doc_values": "true"
},
"port": {
"index": "false",
"type": "integer"
},
"message": {
"index": "true",
"type": "text"
}
}
}
},
"aliases": {}
}


Reiniciamos el servicio logstash para que adquiera la nueva configuración

#service logstash restart

Verificamos inició bien.

#tail -100f /var/log/logstash/logstash-plain.log

[2017-06-07T21:00:02,920][INFO ][logstash.agent ] Successfully started
Logstash API endpoint {:port=>9600}

Zimbra

En el servidor zimbra instalaremos filebeat que es el servicio que le entregará los logs al logstash.
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. Como generamos para logstash un certificado debemos copiarselo también al servidor zimbra lo pondremos en la misma carpeta de filebeat en /etc/filebeat/ el fichero logstash.crt. Esto garantiza que la comunicación sea segura entre filebeat de zimbra y logstash como hemos mencionado anteriormente.

#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/zmmailboxd.out
– input_type: log
document_type: nginx
paths:
– /opt/zimbra/log/nginx.access.log

#———————- Logstash output —————————
output.logstash:
# The Logstash hosts
hosts: [“logstash.dominio.com:5443“]

# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
bulk_max_size: 2048
ssl.certificate_authorities: [“/etc/filebeat/logstash.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”

Riniciamos el servicio de filebeat

#service filebeat restart

Verificamos el estado del servicio

#service filebeat status

filebeat.service – filebeat
Loaded: loaded (/lib/systemd/system/filebeat.service; disabled; vendor
preset: enabled)
Active: active (running) since dom 2017-06-25 21:13:41 CDT; 2s ago
Docs: https://www.elastic.co/guide/en/beats/filebeat/current/index.html
Main PID: 9670 (filebeat)
CGroup: /system.slice/filebeat.service
└─9670 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
-path.home /usr/share/filebeat -path.config /etc/filebeat

En este momento debe estar el filebeat de zimbra enviando ya los logs al logstash y este a su vez filtrándolos. Ya en nuestra web cerebro aparecerá el primer índice con el nombre correo-filebeat-YYYY-MM-dd y los shards primarios con sus respectivas replicas en el cluster.

Preparando Grafana para los dashboard de correo entrante y saliente

Establecemos el datasource de la misma forma que lo hicimos con el squid. Nuestro Data source debe llamarse correo-elastic para que el dashboard que les traigo no tengan que modificarlo.

Ahora solo nos queda importar en el grafana los dashboards que en este caso son dos y ya saben por el artículo anterior como hacerlo. Estos son los dashboards:

  1. Correo Saliente:correosaliente
  2. Correo Entrante.correoentrante

Captura de correo saliente:

Correo Entrante:

(Visited 466 times, 1 visits today)

2 Comentarios

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*