Pandora: Documentation es: Monitorizacion logs
Volver al Índice de Documentación 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.3.3 ElasticSearch Interface
- 1.4 Migración al sistema LogStash + ElasticSearch
- 1.5 Visualización y búsqueda
- 1.6 Configuración de los agentes
- 1.7 Log Source en la Vista de Agentes
1 Recolección de logs
1.1 Introducción
La monitorización de logs en Pandora FMS está establecida 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 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 de manera secuencial, utilizando la marca de tiempo en que se procesaron los logs.
A partir de la versión 7.0 NG 712, Pandora FMS incorpora ElasticSearch para almacenar la información de logs, lo que implica una mejora sustancial del rendimiento.
1.2 Cómo funciona
- Los logs analizados por los Agentes Software (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 Data Server Pandora FMS recibe el XML del agente, que contiene información tanto de monitorización como de logs.
- Cuando el Data Server 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 y luego enviando automáticamente la información a ElasticSearch.
- Pandora FMS almacena los datos en índices de ElasticSearch generando diariamente un índice único por cada instancia de Pandora FMS.
- El servidor de Pandora FMS dispone de una tarea de mantenimiento que elimina los índices en el intervalo definido por el administrador del sistema (por defecto, 90 días).
1.3 Configuración
1.3.1 Configuración del servidor
El nuevo sistema de almacenamiento de logs, basado en ElasticSearch, requiere configurar los diferentes componentes.
A partir de la versión 745 de Pandora FMS ya no es necesario el uso de LogStash, ya que el servidor de Pandora FMS se comunica directamente con el servidor de ElasticSearch, por lo que las configuraciones relativas a LogStash no deberán aplicarse. |
|
1.3.1.1 Requisitos para el servidor
Es posible distribuir a Pandora FMS Server y ElasticSearch en servidores independientes.
Si decide alojar ElasticSearch y LogStash en el mismo servidor, recomendamos:
- CentOS 7 o superior.
- Al menos 4 gigabytes de RAM, aunque se recomiendan 6 GB de RAM por cada instancia de ElasticSearch.
- Al menos 2 CPU cores.
- 20 GB de espacio en disco para el sistema.
- 50 GB de espacio en disco para los datos de ElasticSearch (el número puede variar dependiendo de la cantidad de datos que se desee almacenar).
- Conectividad desde el Servidor y Consola de Pandora FMS a la API de ElasticSearch (por defecto puerto 9200/TCP ).
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 una máquina CentOS:
yum install java
Una vez instalado Java, instalar ElasticSearch siguiendo la documentación oficial; para entornos Debian cuenta con sus propias instrucciones.
Configurar el servicio:
Se deben configurar 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 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
Será necesario descomentar y definir también las siguientes líneas:
cluster.name: elkpandora node.name: ${HOSTNAME} bootstrap.memory_lock: true network.host: ["127.0.0.1", “IP"]
- cluster.name
- Será el nombre que recibirá el racimo o cluster.
- node.name
- Para nombrar el nodo utilizando la variable de sistema
${HOSTNAME}
, este tomará automáticamente el nombre del anfitrión. - bootstrap.memory_lock
- Siempre deberá ser verdadero "true".
- network.host
- La dirección IP del servidor.
- En caso de trabajar con un solo nodo, será necesario añadir también la siguiente línea:
discovery.type: single-node
- En caso de trabajar con un cluster necesitaremos completar el parámetro
discovery.seed_hosts
.
- En caso de trabajar con un cluster necesitaremos completar el parámetro
discover.seed_hosts : ["ip:port", "ip", "ip"]
O bien:
discovery.seed_hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com
Determine las opciones de recursos asignados a ElasticSearch, ajustando los parámetros disponibles en el fichero de configuración ubicado en /etc/elasticsearch/jvm.options
. Se recomienda utilizar al menos 2 GB de espacio en XMS.
# Xms represDeents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms2g -Xmx2g
La asignación de recursos se asignará en función del uso que se quiera dar a ElasticSearch, recomendamos seguir la documentación oficial.
Es necesario cambiar también en el fichero de configuración de ElasticSearch el parámetro memlock unlimited
, ubicado en el fichero /usr/lib/systemd/system/elasticsearch.service
para añadir el siguiente parámetro:
MAX_LOCKED_MEMORY=unlimited
Una vez finalizado será necesario ejecutar:
systemctl daemon-reload && systemctl restart elasticsearch
El comando para iniciar el servicio es:
systemctl start elasticsearch
Para comprobar la instalación de ElasticSearch ejecutae el siguiente comando en una ventana terminal:
curl -q http://{IP}:9200/
Recibirá una respuesta similar a la siguiente:
{ "name" : "3743885b95f9", "cluster_name" : "docker-cluster", "cluster_uuid" : "7oJV9hXqRwOIZVPBRbWIYw", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Se recomienda visitar el enlace a las best practices de ElasticSearch para entornos de producción:
https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod
1.3.1.3 Instalación y configuración de LogStash
Descargue, desde la página web del proyecto ElasticSearch, el paquete de instalación en formato RPM, LogStash versión 5.6.2. Una vez descargado el paquete, instalar con derechos apropiados con el comando:
rpm -i logstash-X.X.X.rpm
A continuación establezca el servicio, 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í, para Pandora FMS no es necesario, por lo que se debe dejar vacío.
- Output
- Configuración de 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" debe introducir la IP del servidor en lugar de “0.0.0.0”. Así mismo, en el archivo logstash-sample.conf
debe cambiar también "localhost" por correspondiente dirección IP del servidor.
Para iniciar el servicio:
systemctl start logstash
Se desaconseja el uso de CentOS 6 para esta tarea. En todo caso, si desea hacerlo, puede intentar iniciar servicio con |
|
1.3.1.4 Parámetros de configuración en Pandora FMS Server
A partir de la versión 745 de Pandora FMS es innecesario modificar el fichero de configuración del servidor, ya que toda la parametrización se realizará desde la consola al habilitar la recolección de logs. |
|
Es necesario agregar la siguiente configuración al archivo de configuración de Pandora FMS Server /etc/pandora/pandora_server.conf
para que el Pandora FMS Data Server procese la información de los logs.
logstash_host eli.artica.lan logstash_port 10516
.
1.3.1.5 Pandora FMS Syslog Server
Este componente permite a Pandora FMS analizar el syslog de la máquina donde está ubicado, analizando su contenido y almacenando las referencias en el servidor ElasticSearch correspondiente.
La ventaja principal del Syslog Server consiste en complementar la unificación de logs. Con apoyo de las características de exportado de Syslog Server de los entornos Linux® y Unix®, Syslog Server permite la consulta de logs independientemente del origen, buscando en un único punto común (visor de logs de la consola de Pandora FMS).
La instalación de Syslog Server se debe realizar tanto en cliente como en servidor, y para ejecutarla es necesario lanzar el siguiente comando:
yum install rsyslog
Una vez instalado syslog en los equipos a trabajar, hay que acceder al fichero de configuración /etc/rsyslog.conf
para habilitar el input de TCP y UDP.
(...) # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 (...)
Tras realizar este ajuste será necesario detener y volver a arrancar el servicio rsyslog. Una vez el servicio esté disponible, comprobar que el puerto 514
está accesible con:
netstat -ltnp
Para más información de la configuración de rsyslog, visite la web oficial.
En el cliente configurar para que pueda enviar los logs al Syslog Server. Para ello acceda una vez más al fichero de configuración de rsyslog /etc/rsyslog.conf
en el cliente. Localice y habilite la línea que permite configurar el host remoto.
*.* @@remote-host:514
El envío de logs genera un agente contenedor con el nombre del cliente por lo que se recomienda crear los agentes con “alias as name” haciendo que coincida con el hostname del cliente, así se evitará duplicidad en los agentes. |
|
Para activar esta funcionalidad en Pandora FMS Server, habilite en el archivo 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
- syslogserver
- Booleano, habilita (1) o deshabilita (0) el motor de análisis de SYSLOG local.
- syslog_file
- Ubicación del fichero donde se entregan las entradas de los SYSLOG.
- syslog_threads
- Número de hilos máximo que se utilizarán en el sistema productor/consumidor del Syslog Server.
- syslog_max
- Es la ventana de procesado máxima para Syslog Server; será el número máximo de entradas del SYSLOG que se procesarán en cada iteración.
Necesitará un servidor LogStash/ElasticSearch habilitado y configurado; por favor, revise los puntos precedentes para saber cómo ello. |
|
Recuerde que 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: para evitar que los logs de ElasticSearch o LogStash crezcan sin medida, debe crear una nueva entrada para el demonio o daemon de rotado de logs en /etc/logrotate.d
:
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 el servidor ElasticSearch:
curl -q http://<elastic>:9200/_cat/indices?
Donde elastic
se refiere a la dirección IP del servidor.
Para eliminar cualquiera de estos índices puede ejecutar la orden DELETE
:
curl -q -XDELETE http://<elastic>:9200/{index-name}
Donde {index-name}
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 debe activar la siguiente configuración:
Luego puede configurar el comportamiento del visor de logs en Configuration > Log Collector:
- Dirección IP o FQDN y puerto del servidor que aloja el servicio ElasticSearch
- Number of logs viewed: Para agilizar la respuesta de la consola se ha añadido la carga dinámica de registros. El usuario debe avanzar hasta el final de la página, lo que obliga a cargar el siguiente grupo de registros disponible, agrupados en el número definido aquí.
- Days to purge old information: 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.3.3 ElasticSearch Interface
En la configuración por defecto Pandora FMS genera un índice por día, el cual ElasticSearch se encarga de fragmentar y repartir para futuras búsquedas.
Para que estas búsquedas sean óptimas, por defecto ElasticSearch genera un índice por cada una de ellas, por lo que debemos configurar en nuestro entorno tantas search como nodos de ElasticSearch estén instalados.
Estos search y réplicas se configuran cuando se crea un índice, que Pandora FMS genera automáticamente, por lo que para modificar esta configuración debemos hacer uso de las platillas o templates.
1.3.3.1 Templates de Elasticsearch
Las plantillas o templates son configuraciones que solo se aplican en el momento de la creación del índice. Cambiar un template no tendrá ningún impacto en los índices ya existentes. |
|
Para crear un template básico, solo debe definir los siguientes campos:
{ "index_patterns": ["pandorafms*"], "settings": { "number_of_shards": 1, "auto_expand_replicas" : "0-1", "number_of_replicas" : "0" }, "mappings" : { "properties" : { "agent_id" : { "type" : "long", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "group_id" : { "type" : "long", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "group_name" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "logcontent" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "source_id" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "suid" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "type" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "utimestamp" : { "type" : "long" } } } } }
Si necesita definir un template multinodo debe tener en cuenta la siguiente información:
Cuando realice la configuración del template(formato JSON), necesita configurar tantos search como nodos tenga, sin embargo para configurar correctamente las réplicas debes restar 1 al número de nodos del entorno.
Por ejemplo, en un entorno de Pandora FMS con ElasticSearch con 3 nodos configurados, cuando modifique los campos number_of_search
y number_of_replicas
debe quedar de la siguiente manera:
{ "index_patterns": ["pandorafms*"], "settings": { "number_of_shards": 3, "auto_expand_replicas" : "0-1", "number_of_replicas" : "2" },
Puede realizar estas operaciones a través de la interfaz de ElasticSearch en Pandora FMS utilizando los comandos nativos de ElasticSearch.
- PUT _template/<nombredeltemplate>: permite introducir los datos de nuestro template.
- GET _template/><nombredeltemplate>: permite visualizar el template.
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 distribuida en directorios al nuevo sistema.
Para ello deberá ejecutar el siguiente script que se encuentra 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 recolección de logs interesan principalmente dos características: el poder buscar información -filtrando por fecha, fuentes de datos y/o palabras clave, etc.- y poder visualizar 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; fije su atención en Search, Start date y End date:
El campo más importante -y útil- será la cadena a buscar a introducir en el cuadro de texto Search en combinación con los tres tipos de búsqueda disponibles ( Search mode ).
- Exact match
- Búsqueda de cadena literal, el log contiene una coincidencia exacta.
- All words
- Búsqueda que contenga todas las palabras indicadas, independientemente del orden en una misma línea de log (tenga en cuenta, en lo sucesivo, que cada palabra está separada por espacios).
- Any word
- Búsqueda que contenga alguna de las palabras indicadas, independientemente del orden.
Si marcamos la opción de ver el contexto del contenido filtrado, obtendremos una vista general de la situación con información de otras líneas de logs relacionadas con nuestra búsqueda:
1.5.1 Visualización y búsqueda avanzadas
Con esta característica se puede 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 permiten 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 procesar o 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:
Bien puede pulsar el botón de editar , o el botón de crear
para realizar un nuevo modelo de captura.
- Capture regexp
- Una expresión regular de captura de datos, cada campo a extraer se identifica con la subexpresión entre paréntesis (expresión a capturar).
- Fields
- 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 la casilla de verificación para representar el promedio.
Ejemplo
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 han iniciado sesión, agrupando por usuario:
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 para Microsoft 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 del sistema operativo, 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 <%PROGRAMFILES%>\pandora_agent\pandora_agent.log module_description This module will return all lines from the specified logfile module_pattern .* module_end
Donde <%PROGRAMFILES%>
es la ubicación variable que indica dónde están instalados las aplicaciones de sistema operativo. 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
Nota: Esta nueva sintaxis es válida para el agente con versión 5.0 o superior, recuerde mantener actualizada su versión Enterprise.
Para definir módulos de log en Windows será necesario hacerlo directamente en el fichero de configuración del agente. Si se crean directamente desde la consola, los módulos se quedarán en estado no inicializado. |
|
1.6.2 Sistemas Unix
Con el agente versión 5.0 o superior, puede usar la siguiente sintaxis.
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. Utiliza la expresión regular \.\*
(en este caso "todo") como patrón a la hora de elegir qué líneas enviamos y cuáles no.
1.7 Log Source en la Vista de Agentes
A partir de la versión 749 de Pandora FMS, se ha añadido en la Vista del agente un cuadro llamado Log sources status, en el cual aparecerá la fecha de la última actualización de los logs por parte de ese agente. Al pulsar en el icono de la lupa de Review, redirige a la vista del Log Viewer filtrada por ese log.