Difference between revisions of "Pandora: Documentation es: Monitorizacion logs"
(→Instalación y configuración de ElasticSearch) |
Edu.corral (talk | contribs) (→Pandora FMS SyslogServer) |
||
(35 intermediate revisions by 7 users not shown) | |||
Line 5: | Line 5: | ||
==Introducción== | ==Introducción== | ||
− | Pandora FMS | + | Hasta ahora Pandora FMS no tenía una solución a este problema, pero con la versión 5.0 '''Pandora FMS Enterprise''' ofrece una solución para poder gestionar cientos de megabytes de datos diarios. Esta solución permite reutilizar los mismos agentes de la monitorización para la recolección específica de datos de logs, utilizando una sintaxis muy similar a la actual para la monitorización de logs. |
− | + | La monitorización de logs en Pandora FMS se plantea de dos formas diferentes: | |
− | + | #'''Basada en módulos''': representa logs en Pandora FMS como monitores asíncronos, pudiendo asociar alertas a las entradas detectadas que cumplan una serie de condiciones preconfiguradas por el usuario. La representación modular de los logs nos permite: | |
− | + | ##Crear módulos que cuenten las ocurrencias de una expresión regular en un log. | |
− | + | ##Obtener las líneas y el contexto de los mensajes de log | |
− | + | #'''Basada en visualización combinada''': permite al usuario visualizar en una única consola toda la información de logs de múltiples orígenes que se desee capturar, organizando la información secuencialmente utilizando la marca de tiempo en que se procesaron los logs. | |
− | |||
− | |||
+ | A partir de la versión 7.0NG 712, Pandora FMS incorpora '''LogStash + ElasticSearch''' para almacenar la información de logs, lo que implica una mejora sustancial del rendimiento. | ||
+ | <br><br> | ||
== Cómo funciona == | == Cómo funciona == | ||
Line 23: | Line 23: | ||
</center><br><br> | </center><br><br> | ||
− | * Los logs analizados por los agentes ('''eventlog''' o ficheros de texto), son reenviados hacia el servidor de Pandora, en forma "literal" (RAW) dentro del XML de reporte del agente: | + | * Los logs analizados por los agentes ('''eventlog''' o ficheros de texto), son reenviados hacia el servidor de Pandora FMS, en forma "literal" (RAW) dentro del XML de reporte del agente: |
− | * El servidor de | + | * El servidor de Pandora FMS (DataServer) recibe el XML del agente, que contiene información tanto de monitorización como de logs. |
− | * Cuando el DataServer procesa los datos del XML | + | * Cuando el DataServer procesa los datos del XML identifica la información de los logs, guardando en la base de datos principal las referencias del agente que ha reportado y el origen del log, enviando automáticamente la información a LogStash para su almacenado. |
* LogStash almacena la información en ElasticSearch. | * LogStash almacena la información en ElasticSearch. | ||
Line 39: | Line 39: | ||
=== Configuración del servidor === | === Configuración del servidor === | ||
− | El nuevo sistema de almacenamiento de logs basado en ElasticSearch + LogStash, requiere configurar los diferentes componentes. | + | El nuevo sistema de almacenamiento de logs, basado en ElasticSearch + LogStash, requiere configurar los diferentes componentes. |
Line 46: | Line 46: | ||
Es posible distribuir cada componente (Pandora FMS Server, ElasticSearch, LogStash) en servidores independientes. | Es posible distribuir cada componente (Pandora FMS Server, ElasticSearch, LogStash) en servidores independientes. | ||
− | Si decide alojar ElasticSearch y LogStash en el mismo servidor recomendamos: | + | Si decide alojar ElasticSearch y LogStash en el mismo servidor, recomendamos: |
* Centos 7 | * Centos 7 | ||
Line 53: | Line 53: | ||
* Al menos 20 GB de espacio en disco para el sistema | * Al menos 20 GB de espacio en disco para el sistema | ||
* Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM | * Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM | ||
− | * Conectividad con el puerto 10516/TCP desde el servidor de Pandora a LogStash y el 9200/TCP desde la consola de Pandora a ElasticSearch | + | * Conectividad con el puerto 10516/TCP desde el servidor de Pandora FMS a LogStash y el 9200/TCP desde la consola de Pandora FMS a ElasticSearch |
− | Si se dispone de máquina que aloje base de datos de histórico se | + | Si se dispone de máquina que aloje base de datos de histórico, se podría usar la misma para la instalación de ElasticSearch y LogStash. En ese caso, los requisitos mínimos de la máquina se deberán ajustar al número de datos que vayamos a procesar en ambos casos, siendo los mínimos: |
* Centos 7 | * Centos 7 | ||
Line 63: | Line 63: | ||
* Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM | * Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM | ||
+ | <br><br> | ||
==== Instalación y configuración de ElasticSearch ==== | ==== Instalación y configuración de ElasticSearch ==== | ||
− | Antes de empezar con la instalación de estos componentes es necesaria la instalación de | + | Antes de empezar con la instalación de estos componentes es necesaria la instalación de Java en la máquina: |
yum install java | yum install java | ||
− | Una vez instalado | + | Una vez instalado Java, instalar ElasticSearch desde el RPM descargable de la página web del proyecto ElasticSearch: https://www.elastic.co/downloads/elasticsearch |
+ | |||
+ | Una vez descargado el paquete, lo instalamos ejecutando: | ||
+ | |||
+ | rpm -i elasticsearch-X.X.X-x86_64.rpm | ||
Configurar el servicio: | Configurar el servicio: | ||
− | Configuraremos las opciones de red y opcionalmente las ubicaciones de datos (y logs del propio ElasticSearch) en el fichero de configuración ubicado en ''/etc/elasticsearch/elasticsearch.yml'' | + | Configuraremos las opciones de red y, opcionalmente, las ubicaciones de datos (y logs del propio ElasticSearch) en el fichero de configuración ubicado en ''/etc/elasticsearch/elasticsearch.yml'' |
# ---------------------------------- Network ----------------------------------- | # ---------------------------------- Network ----------------------------------- | ||
Line 81: | Line 86: | ||
# ----------------------------------- Paths ------------------------------------ | # ----------------------------------- Paths ------------------------------------ | ||
# Path to directory where to store the data (separate multiple locations by comma): | # Path to directory where to store the data (separate multiple locations by comma): | ||
− | + | path.data: /var/lib/elastic | |
# Path to log files: | # Path to log files: | ||
− | + | path.logs: /var/log/elastic | |
+ | En el apartado network.host deberemos introducir la IP del servidor. | ||
− | Habrá que | + | Habrá que determinar las opciones de recursos asignados a ElasticSearch, ajustando los parámetros disponibles en el fichero de configuración ubicado en ''/etc/elasticsearch/jvm.options'' |
# Xms represents the initial size of total heap space | # Xms represents the initial size of total heap space | ||
Line 99: | Line 105: | ||
− | <b>Nota</b> Si el servicio no consigue iniciarse, revise los logs ubicados en /var/log/elasticsearch/ | + | <b>Nota:</b> Si el servicio no consigue iniciarse, revise los logs ubicados en /var/log/elasticsearch/ |
− | <b>Nota 2</b> Si está intentando instalar en Centos 6 contra nuestra recomendación, | + | <b>Nota 2:</b> Si está intentando instalar en Centos 6 contra nuestra recomendación, existe un problema con las últimas versiones de ElasticSearch (5.X), ya que requieren una funcionalidad extra a nivel de kernel que CentOS 6 no ofrece. Puede agregar al fichero de configuración yml las siguientes líneas para deshabilitar el uso de bootstrap y evitar el error. |
bootstrap.system_call_filter: false | bootstrap.system_call_filter: false | ||
transport.host: localhost | transport.host: localhost | ||
+ | |||
+ | <br><br> | ||
==== Instalación y configuración de LogStash ==== | ==== Instalación y configuración de LogStash ==== | ||
Line 110: | Line 118: | ||
Instalar LogStash desde el RPM descargable de la página web del proyecto ElasticSearch: https://www.elastic.co/downloads/logstash | Instalar LogStash desde el RPM descargable de la página web del proyecto ElasticSearch: https://www.elastic.co/downloads/logstash | ||
− | + | Una vez descargado el paquete, lo instalamos ejecutando: | |
− | Dentro de la configuración de | + | rpm -i logstash-X.X.X.rpm |
− | * Input: indica cómo le llega la información a | + | |
− | * Filter: | + | Configurar el servicio: |
− | * Output: | + | |
+ | Dentro de la configuración de Logstash existen tres bloques de configuración: | ||
+ | * Input: indica cómo le llega la información a Logstash, formato, puerto y un identificador que se utilizará para almacenar la información internamente en Elastic. | ||
+ | * Filter: es posible agregar un post-procesado aquí, pero para nuestro caso no será necesario, por lo que lo dejaremos vacío. | ||
+ | * Output: aquí viene la configuración de la IP y puerto donde estará escuchando ElasticSearch; es el sitio donde se guardará la información procesada por Logstash. | ||
Fichero de configuración: | Fichero de configuración: | ||
Line 140: | Line 152: | ||
filter { } | filter { } | ||
output { | output { | ||
− | elasticsearch { hosts => [" | + | elasticsearch { hosts => ["0.0.0.0:9200"] } |
} | } | ||
+ | En los apartados de "host" debemos introducir la IP del servidor en lugar de “0.0.0.0”. | ||
+ | |||
+ | En el archivo "logstash-sample.conf" deberemos cambiar también "localhost", donde debe introducirse la IP del servidor. | ||
Iniciar el servicio: | Iniciar el servicio: | ||
Line 155: | Line 170: | ||
==== Parámetros de configuración en Pandora FMS Server ==== | ==== Parámetros de configuración en Pandora FMS Server ==== | ||
− | Será necesario agregar la siguiente configuración para que Pandora FMS DataServer procese la información de logs. | + | Será necesario agregar la siguiente configuración al archivo de configuración de Pandora FMS Server (/etc/pandora/pandora_server.conf) para que Pandora FMS DataServer procese la información de logs. |
− | '''Importante''': Todo log que llegue a | + | '''Importante''': Todo log que llegue a Pandora FMS sin tener activa esta configuración será '''descartado'''. |
logstash_host eli.artica.lan | logstash_host eli.artica.lan | ||
logstash_port 10516 | logstash_port 10516 | ||
+ | |||
+ | |||
+ | ==== Pandora FMS SyslogServer ==== | ||
+ | |||
+ | A partir de la actualización 717 de Pandora FMS 7.0NG aparece un nuevo componente: SyslogServer. | ||
+ | |||
+ | Este componente permite a Pandora FMS analizar el syslog de la máquina donde está ubicado, analizando su contenido y almacenando las referencias en nuestro servidor de ElasticSearch. | ||
+ | |||
+ | La ventaja principal del SyslogServer consiste en complementar la unificación de logs. Apoyándose en las características de exportado de SYSLOG de los entornos Linux y Unix, SyslogServer permite la consulta de logs independientemente del origen, buscando en un único punto común (visor de logs de la consola de Pandora FMS). | ||
+ | |||
+ | Para activar esta funcionalidad simplemente tendremos que habilitarlo en la configuración, agregando a pandora_server.conf el siguiente contenido: | ||
+ | |||
+ | |||
+ | # Enable (1) or disable (0) the Pandora FMS Syslog Server (PANDORA FMS ENTERPRISE ONLY). | ||
+ | syslogserver 1 | ||
+ | # Full path to syslog's output file (PANDORA FMS ENTERPRISE ONLY). | ||
+ | syslog_file /var/log/messages | ||
+ | # Number of threads for the Syslog Server (PANDORA FMS ENTERPRISE ONLY). | ||
+ | syslog_threads 2 | ||
+ | # Maximum number of lines queued by the Syslog Server's producer on each run (PANDORA FMS ENTERPRISE ONLY). | ||
+ | syslog_max 65535 | ||
+ | |||
+ | |||
+ | Necesitará un servidor LogStash/ElasticSearch habilitado y configurado; por favor, revise los puntos precedentes para saber cómo configurarlo. | ||
+ | |||
+ | '''syslogserver''' Booleano, habilita (1) o deshabilita (0) el motor de análisis de SYSLOG local. | ||
+ | |||
+ | '''syslog_file''' Ubicación del fichero donde se están entregando las entradas de los SYSLOG. | ||
+ | |||
+ | ''' syslog_threads''' Número de hilos máximo que se utilizarán en el sistema productor/consumidor del SyslogServer. | ||
+ | |||
+ | '''syslog_max''' Es la ventana de procesado máxima para SyslogServer; será el número máximo de entradas del SYSLOG que se procesarán en cada iteración. | ||
+ | |||
+ | {{Warning|Es necesario que modifique la configuración de su dispositivo para que los logs se envíen al servidor de Pandora FMS.}} | ||
==== Recomendaciones ==== | ==== Recomendaciones ==== | ||
Line 167: | Line 216: | ||
===== Rotación de logs para ElasticSearch y Logstash ===== | ===== Rotación de logs para ElasticSearch y Logstash ===== | ||
− | '''Importante''': | + | '''Importante''': como recomendación, crear una nueva entrada para el demonio de rotado de logs en /etc/logrotate.d, para evitar que los logs de ElasticSearch o LogStash crezcan sin medida: |
cat > /etc/logrotate.d/elastic <<EOF | cat > /etc/logrotate.d/elastic <<EOF | ||
Line 187: | Line 236: | ||
Puede consultar en todo momento el listado de índices y el tamaño que ocupan lanzando una petición cURL contra su servidor ElasticSearch: | Puede consultar en todo momento el listado de índices y el tamaño que ocupan lanzando una petición cURL contra su servidor ElasticSearch: | ||
− | curl -q http://elastic:9200/_cat/indices? | + | curl -q <nowiki>http://elastic:9200/_cat/indices?</nowiki> |
+ | Donde "elastic" se refiere a la IP del servidor. | ||
Para eliminar cualquiera de estos índices puede ejecutar la orden DELETE: | Para eliminar cualquiera de estos índices puede ejecutar la orden DELETE: | ||
− | curl -q -XDELETE http://elastic:9200/logstash-2017.09.06 | + | curl -q -XDELETE <nowiki>http://elastic:9200/logstash-2017.09.06</nowiki> |
+ | |||
+ | Donde "elastic" se refiere a la IP del servidor, y "logstash-2017.09.06" es el fichero de salida del comando anterior. | ||
Esta operación liberará el espacio utilizado por el índice eliminado. | Esta operación liberará el espacio utilizado por el índice eliminado. | ||
− | |||
− | |||
=== Configuración de la consola === | === Configuración de la consola === | ||
Line 202: | Line 252: | ||
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs1.JPG|850px]] |
<br></center> | <br></center> | ||
− | Luego | + | Luego podemos configurar el comportamiento del visor de logs en la pestaña 'Log Collector': |
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs2.JPG|850px]] |
<br></center> | <br></center> | ||
Line 217: | Line 267: | ||
* Puerto a través del que se está prestando el servicio ElasticSearch | * Puerto a través del que se está prestando el servicio ElasticSearch | ||
− | * Número de logs mostrados | + | * Número de logs mostrados: Para agilizar la respuesta de la consola se ha añadido la carga dinámica de registros. Para usarla, el usuario debe hacer scroll hasta el final de la página, lo que obliga a cargar el siguiente grupo de registros disponible. El tamaño de estos grupos se puede configurar en este campo como el número de registros por grupo. |
− | * Días para purgado: Para evitar que el tamaño del sistema, se puede definir un número máximo de días que se almacenará la información de logs | + | * Días para purgado: Para evitar que el tamaño del sistema se sobrecargue, se puede definir un número máximo de días que se almacenará la información de logs; a partir de esa fecha se borrarán automáticamente en el proceso de limpieza de Pandora FMS. |
== Migración al sistema LogStash + ElasticSearch == | == Migración al sistema LogStash + ElasticSearch == | ||
Line 234: | Line 284: | ||
== Visualización y búsqueda == | == Visualización y búsqueda == | ||
− | En una herramienta de colección de logs | + | En una herramienta de colección de logs nos interesan principalmente dos cosas: buscar información -filtrando por fecha, fuentes de datos y/o palabras clave- y ver esa información dibujada en ocurrencias por unidad de tiempo. En este ejemplo, estamos buscando todos los mensajes de log de todos los orígenes en la última hora: |
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs3.JPG|850px]] |
<i>Vista de ocurrencias a lo largo del tiempo</i> | <i>Vista de ocurrencias a lo largo del tiempo</i> | ||
<br></center> | <br></center> | ||
Line 244: | Line 294: | ||
<br> | <br> | ||
Existe una serie de opciones para filtrar la información que muestra el visor: | Existe una serie de opciones para filtrar la información que muestra el visor: | ||
+ | * Filtro de tipo de búsqueda: Podemos buscar por coincidencia exacta, todas las palabras o cualquier palabra. | ||
* Filtro por contenido del mensaje: Busca en el contenido del mensaje el texto indicado. | * Filtro por contenido del mensaje: Busca en el contenido del mensaje el texto indicado. | ||
− | * Filtro por origen de log (source id) | + | * Filtro por origen de log (source id). |
* Filtro por agente: limita los resultados de búsqueda a los generados por el agente seleccionado. | * Filtro por agente: limita los resultados de búsqueda a los generados por el agente seleccionado. | ||
− | * Filtro por grupo: limita la selección de agentes en el filtro por agente | + | * Filtro por grupo: limita la selección de agentes en el filtro por agente. |
− | * Filtro por fecha | + | * Filtro por fecha. |
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs4.JPG|850px]] |
<br></center> | <br></center> | ||
− | El campo más importante -y útil- para nosotros | + | El campo más importante -y útil- para nosotros será la cadena de búsqueda (search en la captura). Esto puede ser una simple cadena de texto, como en el caso anterior, o una expresión comodín, como por ejemplo una dirección IP: |
192.168* | 192.168* | ||
− | <b>Nota</b>: Las búsquedas deben realizarse utilizando palabras completas o subcadenas iniciales de las palabras a buscar: | + | <b>Nota</b>: Las búsquedas deben realizarse utilizando palabras completas o subcadenas iniciales de las palabras a buscar. Algunos ejemplos: |
− | |||
192.168.80.14 | 192.168.80.14 | ||
Line 267: | Line 317: | ||
− | + | Debemos seleccionar uno de los 3 tipos de búsqueda: | |
+ | *Coincidencia exacta: búsqueda de cadena literal. | ||
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs5.JPG|850px]] |
+ | <br></center> | ||
+ | |||
+ | * Todas las palabras: búsqueda de todas las palabras indicadas, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios. | ||
+ | |||
+ | <br><center> | ||
+ | [[image:Logs6.JPG|850px]] | ||
+ | <br></center> | ||
+ | |||
+ | * Cualquier palabra: búsqueda de cualquier palabra indicada, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios. | ||
+ | |||
+ | <br><center> | ||
+ | [[image:Logs7.JPG|850px]] | ||
<br></center> | <br></center> | ||
Line 277: | Line 340: | ||
<br><center> | <br><center> | ||
− | [[image: | + | [[image:Logs8.JPG|850px]] |
<br></center> | <br></center> | ||
+ | |||
+ | |||
+ | === Visualización y búsqueda avanzadas === | ||
+ | |||
+ | A partir de Pandora FSM 7.0NG OUM727 están disponibles las opciones avanzadas para visualización de datos de log. | ||
+ | |||
+ | Con esta característica podremos graficar las entradas de log, clasificando la información en base a '''modelos de captura de datos'''. | ||
+ | |||
+ | Estos modelos de captura de datos son básicamente expresiones regulares e identificadores, que nos permitirán analizar los orígenes de datos y mostrarlos como un gráfico. | ||
+ | |||
+ | |||
+ | Para acceder a las opciones avanzadas pulse en ''Advanced options''. Se mostrará un formulario donde podrá elegir el tipo de vista de resultados: | ||
+ | |||
+ | - Mostrar entradas de log (texto plano). | ||
+ | - Mostrar gráfica de log. | ||
+ | |||
+ | <center> | ||
+ | [[Image: graph_log.png|800px]] | ||
+ | </center> | ||
+ | |||
+ | Bajo la opción ''mostrar gráfica de log'' podemos seleccionar el modelo de captura. | ||
+ | |||
+ | El modelo por defecto, ''Apache log model'', ofrece la posibilidad de parsear logs de Apache en formato estándar (access_log), pudiendo extraer gráficas comparativas de tiempo de respuesta, agrupando por página visitada y código de respuesta: | ||
+ | |||
+ | <center> | ||
+ | [[Image: graph_log2.png|800px]] | ||
+ | </center> | ||
+ | |||
+ | Al pulsar en el botón de editar, editaremos el modelo de captura seleccionado. Con el botón de crear agregaremos un nuevo modelo de captura. | ||
+ | |||
+ | |||
+ | <center> | ||
+ | [[Image: graph_log3.png]] | ||
+ | </center> | ||
+ | |||
+ | |||
+ | |||
+ | En el formulario que aparece, podremos elegir: | ||
+ | |||
+ | ;Título: un nombre para el modelo de captura. | ||
+ | ;Una expresión regular de captura de datos: cada campo a extraer se identifica con la subexpresión entre los paréntesis ''(expresión a capturar)''. | ||
+ | ;Los campos: en el orden en que los hemos capturado con la expresión regular. Los resultados se agruparán por la concatenación de los campos clave, que son aquellos cuyo nombre no esté entre guiones bajos: | ||
+ | |||
+ | clave, _valor_ | ||
+ | |||
+ | |||
+ | clave1,clave2,_valor_ | ||
+ | |||
+ | |||
+ | clave1,_valor_,clave2 | ||
+ | |||
+ | |||
+ | ''Observación:'' Si no especificamos un campo valor, será automáticamente el conteo de apariciones que coinciden con la expresión regular. | ||
+ | |||
+ | ''Observación 2:'' Si especificamos una columna ''valor'' podremos elegir entre representar el valor acumulado (comportamiento por defecto) o marcar el checkbox para representar el promedio. | ||
+ | |||
+ | ''Ejemplo'' | ||
+ | |||
+ | Si quisiéramos extraer entradas de un log con el siguiente formato: | ||
+ | |||
+ | Sep 19 12:05:01 nova systemd: Starting Session 6132 of user root. | ||
+ | Sep 19 12:05:01 nova systemd: Starting Session 6131 of user root. | ||
+ | |||
+ | |||
+ | Para contar el número de veces que se ha iniciado sesión, agrupando por usuario, usaremos: | ||
+ | |||
+ | |||
+ | Expresión regular | ||
+ | |||
+ | Starting Session \d+ of user (.*?)\. | ||
+ | |||
+ | |||
+ | Campos: | ||
+ | |||
+ | username | ||
+ | |||
+ | |||
+ | Este modelo de captura nos devolverá el número de inicios de sesión por usuario del intervalo de tiempo que seleccionemos. | ||
+ | |||
+ | |||
+ | <center> | ||
+ | [[Image: graph_log4.png]] | ||
+ | </center> | ||
== Configuración de los agentes == | == Configuración de los agentes == | ||
− | La recolección de logs se hace mediante los agentes, tanto en el agente Windows como en los agentes Unix (Linux, MacOsX, Solaris, HPUX, AIX, BSD, etc). En el caso de los agentes Windows, | + | La recolección de logs se hace mediante los agentes, tanto en el agente Windows como en los agentes Unix (Linux, MacOsX, Solaris, HPUX, AIX, BSD, etc). En el caso de los agentes Windows, también se puede obtener información del visor de eventos de Windows, utilizando los mismos filtros que en el módulo de monitorización del visor de eventos. |
− | Veamos dos ejemplos para capturar información de logs, en | + | Veamos dos ejemplos para capturar información de logs, en Windows y en Unix: |
=== En Windows === | === En Windows === | ||
Line 303: | Line 449: | ||
module_end | module_end | ||
− | En ambos casos, la | + | En ambos casos, la única diferencia de un módulo de monitorización a la definición de una fuente de log, es: |
module_type log | module_type log | ||
− | Esta nueva sintaxis | + | Esta nueva sintaxis solo la entiende el agente de la versión 5.0, por lo que debe actualizar los agentes si quiere utilizar esta nueva funcionalidad Enterprise. |
=== Sistemas Unix === | === Sistemas Unix === | ||
Line 315: | Line 461: | ||
module_plugin grep_log_module /var/log/messages Syslog \.\* | module_plugin grep_log_module /var/log/messages Syslog \.\* | ||
− | Similar al plugin de parseo de logs (grep_log) el plugin grep_log_module | + | Similar al plugin de parseo de logs (grep_log), el plugin grep_log_module envía la información procesada del log al colector de logs con el nombre de "Syslog" como origen del log. Utiliza la expresion regular \.\* (en este caso "todo") como patrón a la hora de elegir qué líneas enviamos y cuáles no. |
Revision as of 13:51, 30 September 2019
Volver a Indice de Documentacion Pandora FMS
Contents
- 1 Recolección de logs
- 1.1 Introducción
- 1.2 Cómo funciona
- 1.3 Configuración
- 1.3.1 Configuración del servidor
- 1.3.2 Configuración de la consola
- 1.4 Migración al sistema LogStash + ElasticSearch
- 1.5 Visualización y búsqueda
- 1.6 Configuración de los agentes
1 Recolección de logs
1.1 Introducción
Hasta ahora Pandora FMS no tenía una solución a este problema, pero con la versión 5.0 Pandora FMS Enterprise ofrece una solución para poder gestionar cientos de megabytes de datos diarios. Esta solución permite reutilizar los mismos agentes de la monitorización para la recolección específica de datos de logs, utilizando una sintaxis muy similar a la actual para la monitorización de logs.
La monitorización de logs en Pandora FMS se plantea de dos formas diferentes:
- Basada en módulos: representa logs en Pandora FMS como monitores asíncronos, pudiendo asociar alertas a las entradas detectadas que cumplan una serie de condiciones preconfiguradas por el usuario. La representación modular de los logs nos permite:
- Crear módulos que cuenten las ocurrencias de una expresión regular en un log.
- Obtener las líneas y el contexto de los mensajes de log
- Basada en visualización combinada: permite al usuario visualizar en una única consola toda la información de logs de múltiples orígenes que se desee capturar, organizando la información secuencialmente utilizando la marca de tiempo en que se procesaron los logs.
A partir de la versión 7.0NG 712, Pandora FMS incorpora LogStash + ElasticSearch para almacenar la información de logs, lo que implica una mejora sustancial del rendimiento.
1.2 Cómo funciona
El proceso es simple:
- Los logs analizados por los agentes (eventlog o ficheros de texto), son reenviados hacia el servidor de Pandora FMS, en forma "literal" (RAW) dentro del XML de reporte del agente:
- El servidor de Pandora FMS (DataServer) recibe el XML del agente, que contiene información tanto de monitorización como de logs.
- Cuando el DataServer procesa los datos del XML identifica la información de los logs, guardando en la base de datos principal las referencias del agente que ha reportado y el origen del log, enviando automáticamente la información a LogStash para su almacenado.
- LogStash almacena la información en ElasticSearch.
- Finalmente, podemos consultar la información de logs a través del visor en la consola de Pandora FMS. Esta realizará las consultas contra el servidor ElasticSearch configurado.
1.3 Configuración
1.3.1 Configuración del servidor
El nuevo sistema de almacenamiento de logs, basado en ElasticSearch + LogStash, requiere configurar los diferentes componentes.
1.3.1.1 Requisitos para el servidor
Es posible distribuir cada componente (Pandora FMS Server, ElasticSearch, LogStash) en servidores independientes.
Si decide alojar ElasticSearch y LogStash en el mismo servidor, recomendamos:
- Centos 7
- Al menos 4GB de RAM
- Al menos 2 CPU cores
- Al menos 20 GB de espacio en disco para el sistema
- Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM
- Conectividad con el puerto 10516/TCP desde el servidor de Pandora FMS a LogStash y el 9200/TCP desde la consola de Pandora FMS a ElasticSearch
Si se dispone de máquina que aloje base de datos de histórico, se podría usar la misma para la instalación de ElasticSearch y LogStash. En ese caso, los requisitos mínimos de la máquina se deberán ajustar al número de datos que vayamos a procesar en ambos casos, siendo los mínimos:
- Centos 7
- Al menos 4GB de RAM
- Al menos 4 CPU cores
- Al menos 20 GB de espacio en disco para el sistema
- Al menos 50 GB de espacio en disco para el punto de montaje /var, montado como LVM
1.3.1.2 Instalación y configuración de ElasticSearch
Antes de empezar con la instalación de estos componentes es necesaria la instalación de Java en la máquina:
yum install java
Una vez instalado Java, instalar ElasticSearch desde el RPM descargable de la página web del proyecto ElasticSearch: https://www.elastic.co/downloads/elasticsearch
Una vez descargado el paquete, lo instalamos ejecutando:
rpm -i elasticsearch-X.X.X-x86_64.rpm
Configurar el servicio:
Configuraremos las opciones de red y, opcionalmente, las ubicaciones de datos (y logs del propio ElasticSearch) en el fichero de configuración ubicado en /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Network ----------------------------------- # Set the bind address to a specific IP (IPv4 or IPv6): network.host: 0.0.0.0 # Set a custom port for HTTP: http.port: 9200 # ----------------------------------- Paths ------------------------------------ # Path to directory where to store the data (separate multiple locations by comma): path.data: /var/lib/elastic # Path to log files: path.logs: /var/log/elastic
En el apartado network.host deberemos introducir la IP del servidor.
Habrá que determinar las opciones de recursos asignados a ElasticSearch, ajustando los parámetros disponibles en el fichero de configuración ubicado en /etc/elasticsearch/jvm.options
# Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms512m -Xmx512m
Iniciar el servicio:
systemctl start elasticsearch
Nota: Si el servicio no consigue iniciarse, revise los logs ubicados en /var/log/elasticsearch/
Nota 2: Si está intentando instalar en Centos 6 contra nuestra recomendación, existe un problema con las últimas versiones de ElasticSearch (5.X), ya que requieren una funcionalidad extra a nivel de kernel que CentOS 6 no ofrece. Puede agregar al fichero de configuración yml las siguientes líneas para deshabilitar el uso de bootstrap y evitar el error.
bootstrap.system_call_filter: false transport.host: localhost
1.3.1.3 Instalación y configuración de LogStash
Instalar LogStash desde el RPM descargable de la página web del proyecto ElasticSearch: https://www.elastic.co/downloads/logstash
Una vez descargado el paquete, lo instalamos ejecutando:
rpm -i logstash-X.X.X.rpm
Configurar el servicio:
Dentro de la configuración de Logstash existen tres bloques de configuración:
- Input: indica cómo le llega la información a Logstash, formato, puerto y un identificador que se utilizará para almacenar la información internamente en Elastic.
- Filter: es posible agregar un post-procesado aquí, pero para nuestro caso no será necesario, por lo que lo dejaremos vacío.
- Output: aquí viene la configuración de la IP y puerto donde estará escuchando ElasticSearch; es el sitio donde se guardará la información procesada por Logstash.
Fichero de configuración:
/etc/logstash/conf.d/logstash.conf
Ejemplo de fichero de configuración:
# This input block will listen on port 10514 for logs to come in. # host should be an IP on the Logstash server. # codec => "json" indicates that we expect the lines we're receiving to be in JSON format # type => "rsyslog" is an optional identifier to help identify messaging streams in the pipeline. input { tcp { host => "0.0.0.0" port => 10516 codec => "json" type => "pandora_remote_log_entry" } } # This is an empty filter block. You can later add other filters here to further process # your log lines filter { } output { elasticsearch { hosts => ["0.0.0.0:9200"] } }
En los apartados de "host" debemos introducir la IP del servidor en lugar de “0.0.0.0”.
En el archivo "logstash-sample.conf" deberemos cambiar también "localhost", donde debe introducirse la IP del servidor.
Iniciar el servicio:
systemctl start logstash
Nota Si está intentando instalar LogStash en Centos 6 en contra de nuestra recomendación, puede iniciarlo con el siguiente comando:
initctl start logstash
1.3.1.4 Parámetros de configuración en Pandora FMS Server
Será necesario agregar la siguiente configuración al archivo de configuración de Pandora FMS Server (/etc/pandora/pandora_server.conf) para que Pandora FMS DataServer procese la información de logs.
Importante: Todo log que llegue a Pandora FMS sin tener activa esta configuración será descartado.
logstash_host eli.artica.lan logstash_port 10516
1.3.1.5 Pandora FMS SyslogServer
A partir de la actualización 717 de Pandora FMS 7.0NG aparece un nuevo componente: SyslogServer.
Este componente permite a Pandora FMS analizar el syslog de la máquina donde está ubicado, analizando su contenido y almacenando las referencias en nuestro servidor de ElasticSearch.
La ventaja principal del SyslogServer consiste en complementar la unificación de logs. Apoyándose en las características de exportado de SYSLOG de los entornos Linux y Unix, SyslogServer permite la consulta de logs independientemente del origen, buscando en un único punto común (visor de logs de la consola de Pandora FMS).
Para activar esta funcionalidad simplemente tendremos que habilitarlo en la configuración, agregando a pandora_server.conf el siguiente contenido:
# Enable (1) or disable (0) the Pandora FMS Syslog Server (PANDORA FMS ENTERPRISE ONLY). syslogserver 1 # Full path to syslog's output file (PANDORA FMS ENTERPRISE ONLY). syslog_file /var/log/messages # Number of threads for the Syslog Server (PANDORA FMS ENTERPRISE ONLY). syslog_threads 2 # Maximum number of lines queued by the Syslog Server's producer on each run (PANDORA FMS ENTERPRISE ONLY). syslog_max 65535
Necesitará un servidor LogStash/ElasticSearch habilitado y configurado; por favor, revise los puntos precedentes para saber cómo configurarlo.
syslogserver Booleano, habilita (1) o deshabilita (0) el motor de análisis de SYSLOG local.
syslog_file Ubicación del fichero donde se están entregando las entradas de los SYSLOG.
syslog_threads Número de hilos máximo que se utilizarán en el sistema productor/consumidor del SyslogServer.
syslog_max Es la ventana de procesado máxima para SyslogServer; será el número máximo de entradas del SYSLOG que se procesarán en cada iteración.
Es necesario que modifique la configuración de su dispositivo para que los logs se envíen al servidor de Pandora FMS. |
|
1.3.1.6 Recomendaciones
1.3.1.6.1 Rotación de logs para ElasticSearch y Logstash
Importante: como recomendación, crear una nueva entrada para el demonio de rotado de logs en /etc/logrotate.d, para evitar que los logs de ElasticSearch o LogStash crezcan sin medida:
cat > /etc/logrotate.d/elastic <<EOF /var/log/elastic/elaticsearch.log /var/log/logstash/logstash-plain.log { weekly missingok size 300000 rotate 3 maxage 90 compress notifempty copytruncate } EOF
1.3.1.6.2 Purgado de índices
Puede consultar en todo momento el listado de índices y el tamaño que ocupan lanzando una petición cURL contra su servidor ElasticSearch:
curl -q http://elastic:9200/_cat/indices?
Donde "elastic" se refiere a la IP del servidor.
Para eliminar cualquiera de estos índices puede ejecutar la orden DELETE:
curl -q -XDELETE http://elastic:9200/logstash-2017.09.06
Donde "elastic" se refiere a la IP del servidor, y "logstash-2017.09.06" es el fichero de salida del comando anterior.
Esta operación liberará el espacio utilizado por el índice eliminado.
1.3.2 Configuración de la consola
Para activar el sistema de visualización de logs deberá activar la siguiente configuración:
Luego podemos configurar el comportamiento del visor de logs en la pestaña 'Log Collector':
En esta pantalla podremos configurar:
- Dirección IP o FQDN del servidor que aloja el servicio ElasticSearch
- Puerto a través del que se está prestando el servicio ElasticSearch
- Número de logs mostrados: Para agilizar la respuesta de la consola se ha añadido la carga dinámica de registros. Para usarla, el usuario debe hacer scroll hasta el final de la página, lo que obliga a cargar el siguiente grupo de registros disponible. El tamaño de estos grupos se puede configurar en este campo como el número de registros por grupo.
- Días para purgado: Para evitar que el tamaño del sistema se sobrecargue, se puede definir un número máximo de días que se almacenará la información de logs; a partir de esa fecha se borrarán automáticamente en el proceso de limpieza de Pandora FMS.
1.4 Migración al sistema LogStash + ElasticSearch
Una vez configurado el nuevo sistema de almacenamiento de logs, puede migrar todos los datos almacenados previamente en Pandora FMS, en forma distribuída en directorios al nuevo sistema.
Para migrar al nuevo sistema, deberá ejecutar el siguiente script que puede encontrar en /usr/share/pandora_server/util/
# Migrate Log Data < 7.0NG 712 to >= 7.0NG 712 /usr/share/pandora_server/util/pandora_migrate_logs.pl /etc/pandora/pandora_server.conf
1.5 Visualización y búsqueda
En una herramienta de colección de logs nos interesan principalmente dos cosas: buscar información -filtrando por fecha, fuentes de datos y/o palabras clave- y ver esa información dibujada en ocurrencias por unidad de tiempo. En este ejemplo, estamos buscando todos los mensajes de log de todos los orígenes en la última hora:
Vista de ocurrencias a lo largo del tiempo
Existe una serie de opciones para filtrar la información que muestra el visor:
- Filtro de tipo de búsqueda: Podemos buscar por coincidencia exacta, todas las palabras o cualquier palabra.
- Filtro por contenido del mensaje: Busca en el contenido del mensaje el texto indicado.
- Filtro por origen de log (source id).
- Filtro por agente: limita los resultados de búsqueda a los generados por el agente seleccionado.
- Filtro por grupo: limita la selección de agentes en el filtro por agente.
- Filtro por fecha.
El campo más importante -y útil- para nosotros será la cadena de búsqueda (search en la captura). Esto puede ser una simple cadena de texto, como en el caso anterior, o una expresión comodín, como por ejemplo una dirección IP:
192.168*
Nota: Las búsquedas deben realizarse utilizando palabras completas o subcadenas iniciales de las palabras a buscar. Algunos ejemplos:
192.168.80.14 192.168* Alerta en sistema Alerta en sis
Debemos seleccionar uno de los 3 tipos de búsqueda:
- Coincidencia exacta: búsqueda de cadena literal.
- Todas las palabras: búsqueda de todas las palabras indicadas, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios.
- Cualquier palabra: búsqueda de cualquier palabra indicada, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios.
Si marcamos la opción de ver el contexto del contenido filtrado, obtendremos una vista general de la situación:
1.5.1 Visualización y búsqueda avanzadas
A partir de Pandora FSM 7.0NG OUM727 están disponibles las opciones avanzadas para visualización de datos de log.
Con esta característica podremos graficar las entradas de log, clasificando la información en base a modelos de captura de datos.
Estos modelos de captura de datos son básicamente expresiones regulares e identificadores, que nos permitirán analizar los orígenes de datos y mostrarlos como un gráfico.
Para acceder a las opciones avanzadas pulse en Advanced options. Se mostrará un formulario donde podrá elegir el tipo de vista de resultados:
- Mostrar entradas de log (texto plano). - Mostrar gráfica de log.
Bajo la opción mostrar gráfica de log podemos seleccionar el modelo de captura.
El modelo por defecto, Apache log model, ofrece la posibilidad de parsear logs de Apache en formato estándar (access_log), pudiendo extraer gráficas comparativas de tiempo de respuesta, agrupando por página visitada y código de respuesta:
Al pulsar en el botón de editar, editaremos el modelo de captura seleccionado. Con el botón de crear agregaremos un nuevo modelo de captura.
En el formulario que aparece, podremos elegir:
- Título
- un nombre para el modelo de captura.
- Una expresión regular de captura de datos
- cada campo a extraer se identifica con la subexpresión entre los paréntesis (expresión a capturar).
- Los campos
- en el orden en que los hemos capturado con la expresión regular. Los resultados se agruparán por la concatenación de los campos clave, que son aquellos cuyo nombre no esté entre guiones bajos:
clave, _valor_
clave1,clave2,_valor_
clave1,_valor_,clave2
Observación: Si no especificamos un campo valor, será automáticamente el conteo de apariciones que coinciden con la expresión regular.
Observación 2: Si especificamos una columna valor podremos elegir entre representar el valor acumulado (comportamiento por defecto) o marcar el checkbox para representar el promedio.
Ejemplo
Si quisiéramos extraer entradas de un log con el siguiente formato:
Sep 19 12:05:01 nova systemd: Starting Session 6132 of user root. Sep 19 12:05:01 nova systemd: Starting Session 6131 of user root.
Para contar el número de veces que se ha iniciado sesión, agrupando por usuario, usaremos:
Expresión regular
Starting Session \d+ of user (.*?)\.
Campos:
username
Este modelo de captura nos devolverá el número de inicios de sesión por usuario del intervalo de tiempo que seleccionemos.
1.6 Configuración de los agentes
La recolección de logs se hace mediante los agentes, tanto en el agente Windows como en los agentes Unix (Linux, MacOsX, Solaris, HPUX, AIX, BSD, etc). En el caso de los agentes Windows, también se puede obtener información del visor de eventos de Windows, utilizando los mismos filtros que en el módulo de monitorización del visor de eventos.
Veamos dos ejemplos para capturar información de logs, en Windows y en Unix:
1.6.1 En Windows
module_begin module_name Eventlog_System module_type log module_logevent module_source System module_end
module_begin module_name PandoraAgent_log module_type log module_regexp C:\archivos de programa\pandora_agent\pandora_agent.log module_description This module will return all lines from the specified logfile module_pattern .* module_end
En ambos casos, la única diferencia de un módulo de monitorización a la definición de una fuente de log, es:
module_type log
Esta nueva sintaxis solo la entiende el agente de la versión 5.0, por lo que debe actualizar los agentes si quiere utilizar esta nueva funcionalidad Enterprise.
1.6.2 Sistemas Unix
En Unix se utiliza un nuevo plugin, que viene con el agente de la versión 5.0. Su sintaxis es bien sencilla:
module_plugin grep_log_module /var/log/messages Syslog \.\*
Similar al plugin de parseo de logs (grep_log), el plugin grep_log_module envía la información procesada del log al colector de logs con el nombre de "Syslog" como origen del log. Utiliza la expresion regular \.\* (en este caso "todo") como patrón a la hora de elegir qué líneas enviamos y cuáles no.