Somos amigos de ELK y Exchange. Parte 1





Estoy comenzando una serie de artículos en los que quiero compartir mi experiencia al conectar Exchange y ELK. Esta pila ayudará a procesar grandes volúmenes de registros y no se preguntará en qué tamaño las herramientas de registro habituales se negarán a ayudarnos. Conozcamos al nuevo luchador con registros.



Exchange tiene un sistema de registro bastante extenso. Los registros más populares son los registros de seguimiento, que rastrean el paso paso a paso de una carta en particular dentro de la organización postal; registros del servidor web, que rastrean cada nueva sesión de usuario en el sistema, y ​​registros de aplicaciones web específicas con diversos grados de granularidad de sesión. Exchange también puede almacenar registros sin procesar de los protocolos smtp, imap y pop3.



¿Qué herramientas podemos utilizar para trabajar con registros?



  • Cmdlet Get-MessageTrackingLog estándar: conveniente para manejar registros de seguimiento;
  • La utilidad logparser: utiliza un lenguaje de búsqueda pseudo-SQL para el registro y funciona con bastante rapidez;
  • Servidor SQL externo: para casos especialmente específicos (por ejemplo, análisis de datos durante largos períodos de tiempo).


Todo esto funciona bien cuando tenemos un par de servidores y el volumen de logs procesados ​​se mide en decenas o cientos de gigabytes. Pero, ¿qué pasa si hay decenas de servidores y el tamaño de los registros ha superado el terabyte? Es muy probable que este esquema comience a desmoronarse.



Y esto es lo que sucede: Get-MessageTrackingLog comienza a caer debido al tiempo de espera, el analizador de registros llega al techo de la arquitectura de 32 bits y la carga en el servidor SQL se rompe en el momento más inoportuno, sin digerir la excepción de varias líneas del servicio.



Aquí entra en escena un nuevo jugador: la pila ELK, que está especialmente diseñada para hacer malabares con grandes volúmenes de registros en un tiempo razonable y con un consumo de recursos tolerable.



En la primera parte explicaré en detalle cómo conectar filebeat, que es parte de la pila ELK- se encarga de leer y enviar archivos de texto simples en los que diferentes aplicaciones escriben sus registros. En los siguientes artículos, nos detendremos en los componentes Logstash y Kibana con más detalle.



Instalación



Por lo tanto, el archivo-archivo del agente filebeat se puede descargar desde este sitio .



Completaremos la instalación simplemente descomprimiendo el contenido del archivo zip. Por ejemplo, en c:\Program Files\filebeat. Luego, debe ejecutar el script de PowerShell install-service-filebeat.ps1que viene con el kit para instalar el servicio filebeat.



Ahora estamos listos para comenzar a personalizar el archivo de configuración.



Tolerancia a fallos



Filebeat garantiza la entrega de registros al sistema de recolección de registros. Esto se logra manteniendo un registro de entradas en archivos de registro. El registro almacena información sobre los registros que se leyeron de los archivos de registro y marca los registros específicos que se entregaron al destino.



Si no se puede entregar algún registro, filebeat intentará enviarlo nuevamente hasta que reciba una confirmación de entrega del sistema de recepción o el archivo de registro original se elimine durante la rotación.



Cuando se reinicia el servicio, filebeat leerá información sobre los últimos registros leídos y entregados del registro y leerá los registros en los archivos de registro según la información del registro.



Esto le permite minimizar el riesgo de perder información sobre los registros que deben enviarse a los servidores elastic \ logstash en el proceso de fallas imprevistas y la realización de operaciones de mantenimiento del servidor.



Puede leer más sobre esto en la documentación en los párrafos : ¿Cómo mantiene Filebeat el estado de los archivos y cómo asegura Filebeat la entrega al menos una vez?



Configurar



Toda la configuración se realiza en el archivo de configuración de formato yml, que se divide en varias secciones. Veamos algunos de ellos que participan en la recopilación de registros de servidores Exchange.



Unidad de procesamiento de registros



El bloque de procesamiento de registros comienza con el campo:



filebeat.inputs:


Usaremos una herramienta común de recopilación de registros:



- type: log


A continuación, indicamos el estado (habilitado) y las rutas a la carpeta con los registros. Por ejemplo, en el caso de los registros de IIS, la configuración puede ser la siguiente:



    enabled: true
    paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log


Otra configuración importante es cómo filebeat debería leer registros de varias líneas. De forma predeterminada, filebeat considera que una línea del archivo de registro es un registro. Esto funciona bien, siempre y cuando no comencemos a recibir excepciones relacionadas con el funcionamiento incorrecto del servicio en el registro. En este caso, las excepciones pueden abarcar varias líneas. Por lo tanto, filebeat debería tratar un registro de varias líneas como uno si la siguiente línea comienza con una fecha. El formato para registrar registros en Exchange es el siguiente: cada nuevo registro en el archivo de registro comienza con una fecha. En la configuración, esta condición se ve así:



multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after


Tiene sentido agregar etiquetas a la publicación que envía, por ejemplo:



  tags: ['IIS', 'ex-srv1']


Y no olvide excluir del procesamiento las líneas que comienzan con un símbolo de almohadilla:



  exclude_lines: ['^#']


Entonces, el bloque para leer registros se verá así:



filebeat.inputs:
- type: log
  enabled: true
  paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log
  multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']


Bloque de envío de registros



Filebeat envía entradas individuales en el archivo de registro como un objeto json, en el que una entrada específica del registro está contenida en un solo campo de mensaje. Si queremos trabajar de alguna manera con esta información, primero debemos analizar este campo en campos separados. Esto se puede hacer, por ejemplo, en logstash. Será el destinatario de los registros de filebeat. Así es como podría verse en el archivo de configuración de filebeat:



output.logstash:
  hosts: ["logstash1.domain.com:5044"]


Si hay varios servidores, entonces se puede habilitar el balanceo para ellos: entonces filebeat enviará registros no al primer servidor disponible de la lista, pero distribuirá los registros enviados entre varios servidores:



hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 


Filebeat, al procesar los registros en el json enviado, además de la entrada de registro, que está contenida en el campo del mensaje, agrega una cierta cantidad de metadatos, lo que afecta el tamaño del documento que se vuelve elástico. Estos metadatos se pueden eliminar de forma selectiva del envío. Esto se hace en el bloque del procesador usando el procesador drop_fields. Puede excluir, por ejemplo, los siguientes campos:



processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]


La elección de los campos excluidos debe abordarse con cuidado, porque algunos de ellos pueden usarse en el lado elástico para construir índices.



Entonces, el bloque para enviar registros se verá así:



output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]


Configuración de registro de Filebeat



Tiene sentido establecer las siguientes configuraciones de registro:



  • Información del nivel de registro;
  • Escribimos registros en archivos ubicados por defecto (el directorio de registros, en el directorio de instalación de filebeat);
  • El nombre del archivo de registro es filebeat;
  • Conserve los últimos 10 archivos de registro;
  • Inicie la rotación cuando el tamaño alcance 1 MB.


Finalmente, el bloque de configuración de registro se verá así:



logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576


Configuración final



Hemos recopilado la configuración y ahora se ve así:



filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:\inetpub\logs\LogFiles\W3SVC1\*.log
    - C:\inetpub\logs\LogFiles\W3SVC2\*.log
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']
 
output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
    fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
 
logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576


Es importante comprender que el formato del archivo de configuración es yml. Por eso, es importante colocar correctamente los espacios y los signos menos.



Filebeat puede verificar el archivo de configuración y, si la sintaxis contiene errores, indicará en qué línea y en qué parte de la línea la sintaxis es incorrecta. La verificación se realiza de la siguiente manera:



.\filebeat.exe test config


Además, filebeat puede comprobar la disponibilidad de red del receptor de registros. La comprobación se inicia así:



.\filebeat.exe test output


En las próximas partes, hablaré sobre la conectividad de Exchange y la amistad con los componentes Logstash y Kibana.



Enlaces útiles






All Articles