# Advanced Log Monitoring

# Introducción

Este documento describe la monitorización genérica de logs basada en el plugin avanzado de monitorización de logs,  
diferente del plugin OpenSource.

# Requisitos

El plugin tiene los requisitos para funcionar correctamente:

- Tener acceso al archivo que contiene los requisitos de configuracion requeridos.
- Acceso al directorio temporal, ya que el plugin puede crear ficheros temporales. Por defecto: `/tmp` en <span class="hover:entity-accent entity-underline inline cursor-pointer align-baseline"><span class="whitespace-normal">Linux</span></span> o `%TEMP%` / `C:\Windows\Temp` en <span class="hover:entity-accent entity-underline inline cursor-pointer align-baseline"><span class="whitespace-normal">Windows</span></span>.
- Puede leer los ficheros a procesar con el usuario que ejecuta Pandora, o llamar a un script que a su vez llame al plugin con todos los parámetros, para que pueda leer el log completamente. Si utiliza un script externo , este tendrá que tener permisos para que el plugin genere sus ficheros índice.

# Matriz de compatibilidad

**Linux**

<table border="1" id="bkmrk-sistemas-donde-se-ha" style="border-collapse: collapse; width: 100%; height: 84px;"><tbody><tr style="height: 28px;"><td style="width: 50%; height: 28px;">**Sistemas donde se ha probado**</td><td style="width: 50%; height: 28px;">Rocky 9

</td></tr><tr style="height: 28px;"><td style="width: 50%; height: 28px;">**Sistemas donde debería funcionar**</td><td style="width: 50%; height: 28px;">Cualquier sistema linux soportado por PandoraFMS

</td></tr></tbody></table>

**Windows**

<table border="1" id="bkmrk-sistemas-donde-se-ha-1" style="border-collapse: collapse; width: 100%; height: 84px;"><tbody><tr style="height: 28px;"><td style="width: 50%; height: 28px;">**Sistemas donde se ha probado**</td><td style="width: 50%; height: 28px;">Windows Server 2022

</td></tr><tr style="height: 28px;"><td style="width: 50%; height: 28px;">**Sistemas donde debería funcionar**</td><td style="width: 50%; height: 28px;">Cualquier sistema Windows soportado por PandoraFMS

</td></tr></tbody></table>

# Parámetros de configuración

El plugin se configura mediante un fichero de configuración externo. Este archivo de configuración tiene una serie de parámetros «generales» , una serie de parámetros específicos para cada registro, y un conjunto de parámetros específicos para cada bloque de expresión regular.

**Parametros generales**

- **include** Hace una llamada a otro fichero de configuración. Se puede anidar sin límite, y su orden de carga es secuencial.  
    Es importante llamar a ficheros con rutas absolutas.
- **index\_dir** Utiliza este directorio para almacenar los archivos de índice. El plugin debe poder escribir y leer en el directorio
- **logfile** Archivo de registro del plugin.

**Parametros específicos de log**

- **log\_begin y log\_end** Establecer marcas de inicio y fin de la definición de un archivo logparser.log
- **log\_module\_name** Nombre del módulo generado por el plugin.
- **log\_type** Tipo de módulo de log, puede ser de tres tipos:  
    \- log\_module: Devuelve las lineas del log en un módulo de tipo log.  
    \- return\_occurrences: Devuelve un dato numérico con el número de ocurrencias.  
    \- return\_lines: Devuelve las líneas del log que sí coinciden.  
    \- return\_message: Devuelve un mensaje especificado por el fichero de configuración
- **log\_rotate\_mode** Puede ser de tipo inode o md5. Este es el tipo de detección se realiza para saber si un registro se rota o  
    no.
- **log\_force\_readall** Cuando este token está presente, el analizador de logs procesa todo el log desde el principio si no lo ha hecho ya  
    (Es la primera vez que se abre o detecta una rotación). NOTA: Puede generar grandes volúmenes de datos
- **log\_location\_exec** Ejecuta el comando especificado para obtener el nombre (ruta absoluta) del archivo a procesar.
- **log\_location\_filename** Especifica el nombre del archivo de registro (ruta absoluta) a procesar.
- **log\_location\_multiple** Permite especificar un archivo o varios archivos utilizando un comodín, por ejemplo: /tmp/apache/file\_log\* o /tmp/system\*/mail\*.  
    Usado en combinación con log\_create\_module\_for\_each\_log creará un módulo diferente por cada fichero de registro  
    o pondrá toda la información de diferentes ficheros en el mismo módulo.
- **log\_create\_module\_for\_each\_log** Si se utiliza con «log\_location\_multiple» forzará al plugin a generar un módulo diferente para cada archivo de registro de logs.

**Definicion de expresiones regulares**

- **log\_regexp\_begin y log\_regexp\_end**  
    Marca el principio y el final de la definición de una expresión regular para la definición del archivo de registro  
    en el que se encuentran.
- **log\_regexp\_rule**  
    Defina la expresión regular. NOTA: no utilice marcadores / / Directamente la expresión regular extendida  
    (tipo Perl). Ejemplos:

```
File\sdoes\snot\sexist → Find “File does not exist”
[0-9]*\serrores → Find strings “043 errores”
```

- **log\_regexp\_severity**  
    Envía en el XML una severidad, puede ser ADVERTENCIA, CRÍTICA o NORMAL (en mayúsculas). Es opcional.
- **log\_return\_message**  
    Texto que fue enviando para encontrar al menos una ocurrencia (si localizó varias solo enviará un mensaje). Usted  
    puede utilizar los interruptores $ 1 .. $ 2 para los campos previamente identificados con una expresión regular para hacer la búsqueda  
    campo → sintaxis ()
- **log\_regexp\_action**  
    Comando que se ejecuta para encontrar al menos una ocurrencia (si localiza varias se ejecuta una sola vez).  
    Al definir un registro, puede definir varios bloques de expresiones regulares. Cada bloque de expresiones regulares  
    contendrá sólo una regla regexp. En caso de coincidencias múltiples, contará cada ocurrencia,  
    pero sólo enviará un mensaje o ejecutará una acción.

  
Para entender cada elemento, a continuación se muestra un ejemplo de fichero de configuración.  
  
**Linux**

```
# Include, para cargar archivos de configuración externos/adicionales
# include /tmp/my_other_configuration.conf

# Directorio donde se almacenarán los índices temporales (/tmp por defecto)
#index_dir /tmp

# Registrar problemas con el logparser, (/tmp/pandora_logparser.log por defecto)
#logfile /tmp/pandora_logparser.log

#Ejemplo de creacion de modulo de tipo log
log_begin
log_module_name errors file
log_force_readall
log_location_file /var/log/errors.out
log_description get errors
log_type log_module
log_regexp_begin
log_regexp_rule (?i)error
log_regexp_severity CRITICAL
log_return_message Error
log_regexp_end
log_end

# Ejemplo de coincidencia en un unico archivo de registro
log_begin
log_module_name Weekly
log_location_file /var/log/weekly.out
log_description Errors cannot find
log_type return_lines
log_regexp_begin
log_regexp_rule output
log_regexp_severity WARNING
log_return_message Cannot find process to run
log_regexp_end
log_end

# Ejemplo de coincidencia en varios archivos de registro dentro del mismo módulo
log_begin
log_rotate_mode md5
log_module_name system_log
log_force_readall
log_location_multiple /var/log/system.log*
log_description Errors cannot find
log_type return_lines
log_regexp_begin
log_regexp_rule Cannot
log_regexp_severity WARNING
log_return_message Cannot find process to run
log_regexp_end
log_end

# Ejemplo con distintos patrones dentro de un mismo archivo
log_begin
log_module_name hits_apache
log_location_file /var/log/apache2
log_description Access log from Apache, we will get the integria access
log_type return_ocurrences
log_regexp_begin
log_regexp_rule Error -($1)\-($2) [0-9a-zA-Z]*
log_regexp_severity WARNING
log_return_message Otro bonito texto de error
log_regexp_end
log_regexp_begin
log_regexp_rule File\sdoes\snot\sexist
log_regexp_severity WARNING
log_regexp_end
log_regexp_begin
log_regexp_rule pandora_backend\.html
log_regexp_severity WARNING
log_return_message Something possible harmful happen
log_regexp_end
log_end

# Ejemplo con varios patrones en varios ficheros de registro con diferentes módulos dinámicos
log_begin
log_rotate_mode inode
log_module_name test_log
log_force_readall
# Si se activa, este token creará un módulo diferente utilizando el module_name
# y el nombre completo del archivo de registro sustituyendo / por " ".
log_create_module_for_each_log
log_location_multiple /tmp/log*/hola*
log_description Errors cannot find
log_type return_lines
log_regexp_begin
log_regexp_rule adios
log_regexp_severity WARNING
log_return_message Cannot find process to run
log_regexp_end
log_end
```

**Windows**

```
# Include external/additional configuration files
# include C:\PandoraFMS\conf\extra.conf

# Temporary index directory
index_dir C:\PandoraFMS\tmp\logparser

# Log file for logparser errors
logfile C:\PandoraFMS\logs\pandora_logparser.log


# Example: log module creation
log_begin
log_module_name errors_file
log_force_readall
log_location_file C:\Logs\errors.log
log_description get_errors
log_type log_module
log_regexp_begin
log_regexp_rule (?i)error
log_regexp_severity CRITICAL
log_return_message Error_detected
log_regexp_end
log_end


# Example: single log file matching
log_begin
log_module_name weekly_log
log_location_file C:\Logs\weekly.log
log_description weekly_errors
log_type return_lines
log_regexp_begin
log_regexp_rule output
log_regexp_severity WARNING
log_return_message Cannot_find_process_to_run
log_regexp_end
log_end


# Example: multiple log files in same module
log_begin
log_rotate_mode md5
log_module_name system_log
log_force_readall
log_location_multiple C:\Logs\system.log*
log_description system_errors
log_type return_lines
log_regexp_begin
log_regexp_rule Cannot
log_regexp_severity WARNING
log_return_message Cannot_find_process_to_run
log_regexp_end
log_end


# Example: multiple patterns in one log file
log_begin
log_module_name apache_access
log_location_file C:\Logs\apache\access.log
log_description apache_access_log
log_type return_occurrences

log_regexp_begin
log_regexp_rule Error\-([0-9]+)
log_regexp_severity WARNING
log_return_message Apache_error_detected
log_regexp_end

log_regexp_begin
log_regexp_rule File\sdoes\snot\sexist
log_regexp_severity WARNING
log_regexp_end

log_regexp_begin
log_regexp_rule pandora_backend\.html
log_regexp_severity WARNING
log_return_message Potential_issue_detected
log_regexp_end

log_end


# Example: dynamic modules for multiple files
log_begin
log_rotate_mode inode
log_module_name test_log_dynamic
log_force_readall

log_create_module_for_each_log
log_location_multiple C:\Logs\app*.log
log_description application_logs
log_type return_lines

log_regexp_begin
log_regexp_rule adios
log_regexp_severity WARNING
log_return_message Match_found
log_regexp_end

log_end
```

# Configuración del plugin

Copie los plugins al directorio de plugins del agente, distribúyalo a través de colecciones de ficheros o copiándolo en la carpeta del agente de pandora. Haga lo mismo con los ficheros adicionales que necesiten. El comando de ejecución del plugin dentro de la configuración del agente será similar a este, pero utilizando las rutas donde estarían ubicados el plugin y el fichero de configuración.   
  
Ejemplo de ejecución en Linux:

```
module_plugin /var/opt/PandoraFMS/etc/pandora/plugins/pandora_logparser /var/opt/PandoraFMS/etc/pandora/collections/fc_23/log_example.conf
```

En windows sería lo mismo, pero adaptandolo a las rutas de tu maquina :

```
module_plugin C:\Program Files\PandoraFMS\Pandora Agent\plugins\pandora_logparser.exe C:\Program Files\PandoraFMS\Pandora Agent\collections\fc_23\log_example.conf
```