Difference between pages "Pandora: Documentation en: Web Monitoring" and "Pandora: Documentation es: Monitorizacion logs"

From Pandora FMS Wiki
(Difference between pages)
Jump to: navigation, search
(Form Checking on a Website)
 
(Recolección de logs)
 
Line 1: Line 1:
[[Pandora:Documentation_en|Go back to Pandora FMS documentation index]]
+
[[Pandora:Documentation|Volver a Indice de Documentacion Pandora FMS]]
  
= Monitoring User Browsing Behavior =
+
= Recolección de logs =
  
== Introduction ==
+
==Introducción==
  
In the Enterprise version, it is possible to monitor a Web using the WEB Server component, also called Goliat Server.
+
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.
  
[[File: GoliatLogo 2.jpg|right]]
+
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.
  
This functionality comes from an old project of the founder of Pandora FMS. Goliat F.I.S.T. was an open source project to perform dynamic load audits on web services. You can still find the source code (from 2002) whose updating stopped more or less in 2010 [https://sourceforge.net/projects/goliat/].
+
A partir de la versión 7.0NG 712, Pandora FMS incorpora '''ElasticSearch''' para almacenar la información de logs, lo que implica una mejora sustancial del rendimiento.
 +
<br><br>
 +
 
 +
== Cómo funciona ==
 +
El proceso es simple:
 +
 
 +
<center><br><br>
 +
[[Image:LogsEsquema.png|650px]]
 +
</center><br><br>
 +
 
 +
* 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 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).
 +
 
 +
== Configuración ==
 +
 
 +
=== Configuración del servidor ===
 +
 
 +
El nuevo sistema de almacenamiento de logs, basado en ElasticSearch, requiere configurar los diferentes componentes.
 +
 
 +
{{Warning|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.}}
 +
 
 +
==== Requisitos para el servidor ====
 +
 
 +
Es posible distribuir cada componente (Pandora FMS Server, ElasticSearch) en servidores independientes.
 +
 
 +
Si decide alojar ElasticSearch y LogStash en el mismo servidor, recomendamos:
 +
 
 +
* Centos 7.
 +
* Al menos 4GB de RAM, aunque se recomiendan 6GB de RAM por cada instancia de ElasticSearch.
 +
* 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 los datos de ElasticSearch (el número puede variar dependiendo de la cantidad de datos que se desee almacenar).
 +
* Conectividad desde el servidor y la consola de Pandora FMS a la API de ElasticSearch (por defecto puerto 9200/TCP ).
 +
 
 +
<br><br>
 +
==== 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 siguiendo la documentación oficial: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/install-elasticsearch.html
 +
 
 +
En caso de una instalación en sistemas CentOS/Red Hat, la instalación recomendada es por medio de rpm: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/rpm.html
 +
 
 +
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 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 como siguen:
 +
 
 +
cluster.name: elkpandora
 +
node.name: ${HOSTNAME}
 +
bootstrap.memory_lock: true
 +
network.host: ["127.0.0.1", “IP"]
 +
 
 +
* <b>cluster.name</b>: Será el nombre que recibirá el cluster.
 +
* <b>node.name</b>: Para nombrar el nodo, con ${HOSTNAME} tomará el nombre del host.
 +
* <b>bootstrap.memory_lock</b>: Siempre deberá ser "true".
 +
* <b>network.host</b>: La IP del servidor.
 +
 
 +
Si trabajamos con un solo nodo será necesario añadir también la siguiente línea:
 +
 
 +
discovery.type: single-node
 +
 
 +
En caso de trabajar con un clúster necesitaremos completar el parámetro <b>discovery.seed_hosts</b>.
 +
 
 +
discover.seed_hosts : ["ip", "ip", "ip"]
 +
 
 +
O bien:
 +
 
 +
discovery.seed_hosts:
 +
  - 192.168.1.10:9300
 +
  - 192.168.1.11
 +
  - seeds.mydomain.com
 +
 
 +
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''. Se recomienda utilizar al menos 2GB de espacio en XMS.
 +
 
 +
# Xms represents 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 de ElasticSearch: https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
 +
 
 +
Es necesario cambiar también en el fichero de configuración de ElasticSearch el parámetro <b>memlock unlimited</b>.
 +
 
 +
La ruta del fichero es:
 +
 
 +
/usr/lib/systemd/system/elasticsearch.service
 +
 
 +
Donde deberemos 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
 +
 
 +
 
 +
<b>Nota:</b> Si el servicio no consigue iniciarse, revise los logs ubicados en /var/log/elasticsearch/
 +
 
 +
Para comprobar la instalación de ElasticSearch bastará con ejecutar el siguiente comando:
 +
 
 +
curl -q http://{IP}:9200/
 +
 
 +
Que debería ofrecer 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
 +
 
 +
<br>
 +
<br>
 +
 
 +
==== Instalación y configuración de LogStash ====
 +
 
 +
{{Warning|A partir de la versión 745 de Pandora FMS <b>no</b> es necesaria la instalación de LogStash.}}
 +
 
 +
Instalar LogStash 5.6.2 desde el RPM descargable de la página web del proyecto ElasticSearch:  https://artifacts.elastic.co/downloads/logstash/logstash-5.6.2.rpm
 +
 
 +
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
 +
 
 +
 
 +
<b>Nota</b> Si está intentando instalar LogStash en Centos 6 en contra de nuestra recomendación, puede iniciarlo con el siguiente comando:
 +
 
 +
initctl start logstash
 +
 
 +
==== Parámetros de configuración en Pandora FMS Server ====
 +
 
 +
{{Warning|A partir de la versión 745 de Pandora FMS no será necesario configurar el fichero de configuración del servidor, ya que toda la configuración se realizará desde la consola al habilitar la recolecció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 Pandora FMS sin tener activa esta configuración será '''descartado'''.
 +
 
 +
  logstash_host eli.artica.lan
 +
  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).
 +
 
 +
La instalación de Syslog se realizará tanto en cliente como en servidor, y para ejecutarla será necesario lanzar el siguiente comando:  
 +
 
 +
yum install rsyslog
 +
 
 +
Una vez instalado Syslog en los equipos con los que queramos trabajar, será importante tener en cuenta que habrá que acceder al fichero de configuración para habilitar el input '''TCP''' y '''UDP'''.
 +
 
 +
/etc/rsyslog.conf
 +
 
 +
Tras realizar este ajuste será necesario detener y volver a arrancar el servicio '''rsyslog'''.
 +
 
 +
Una vez el servicio vuelva a estar corriendo, podemos realizar una comprobación de puertos para ver que el '''514''' está accesible.
 +
 
 +
netstat -ltnp
 +
 
 +
Después de activar el servicio y comprobar los puertos, debemos configurar el cliente para que pueda enviar los logs al servidor. Para ello accederemos una vez más al fichero de configuración de '''rsyslog'''.
 +
 
 +
/etc/rsyslog.conf
  
In Pandora FMS, it works as an independent server, similar to the network server, WMI server or remote plugin server.
+
Será necesario localizar y habilitar la línea que permite configurar el host remoto. Habrá que especificar qué queremos enviar, con lo que quedará como sigue:
This system operates under the principle of ''web transaction'', where each transaction is defined by one or more consecutive steps, which must be successfully concluded in order to consider that the transaction has been properly completed. The execution of a ''web transaction'' faithfully reproduces the complete browsing process that can include aspects such as authenticating yourself in a form, clicking on a menu option or filling in a form, verifying that each step returns a specific text string.
 
  
Any failure at any point in the process would result in a checking failure. The complete transaction includes the downloading of all resources (graphics, animations, etc.) that the actual navigation includes. In addition to performing response time and performance checks, it is possible to extract values from the web pages and then process them.
+
*.* @@remote-host:514
 +
<br>
 +
{{Tip|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.}}
  
Goliat is able to monitor both HTTP and HTTPS in a transparent way for the user, supports session management through cookies, parameter passage, and of course, downloading the resources associated with each page. It also has '''important limitations such as the dynamic management of javascript at runtime'''. For more complex web transactions, Pandora FMS has another much more powerful  (and complex) component called WUX Monitoring ('''Web User Experience'''), for more information click on the following link  [https://wiki.pandorafms.com/index.php?title=Pandora:Documentation_en:Monitoring_WUX]
+
Para más información de la configuración de rsyslog, visitar la web oficial: https://www.rsyslog.com/
  
==Installation and Configuration==
+
Para activar esta funcionalidad simplemente tendremos que habilitarlo en la configuración, agregando a pandora_server.conf el siguiente contenido:
  
To be able to use Goliat, activate it in the Pandora FMS Enterprise server:
 
  
  webserver 1
+
  # 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
  
Depending on the number of requests you want to make, you may have to increase the number of threads and the default timeout:
 
  
web_threads 1
+
Necesitará un servidor LogStash/ElasticSearch habilitado y configurado; por favor, revise los puntos precedentes para saber cómo configurarlo.
web_timeout 60
 
  
There is an advanced configuration token that will allow you to change the type of library you use under Goliat, LWP or CURL. LWP is used by default, but if you encounter any issues (SSL connections, long timeouts or concurrency problems in case of many threads), switch to CURL:
+
'''syslogserver''': Booleano, habilita (1) o deshabilita (0) el motor de análisis de SYSLOG local.
  
web_engine curl
+
'''syslog_file''': Ubicación del fichero donde se están entregando las entradas de los SYSLOG.
  
== Creating Web Modules ==
+
''' syslog_threads''': Número de hilos máximo que se utilizarán en el sistema productor/consumidor del SyslogServer.
  
To monitor a web page remotely, click on the modules tab. Then, select 'Create a new webserver module' and click on ''Create'':
+
'''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.
  
<center>
+
{{Warning|Es necesario que modifique la configuración de su dispositivo para que los logs se envíen al servidor de Pandora FMS.}}
[[image:Gagita2.png]]
+
 
</center>
+
==== Recomendaciones ====
  
Click on ''Create'' to see a form appear, in which fill out the appropriate fields to monitor a web page. The name and, above all, the type of WEB check-up are the most basic ones:
+
===== Rotación de logs para ElasticSearch y Logstash =====
  
<center>
+
'''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:
[[image:goliat_types.jpg]]
 
</center>
 
  
There are several check types to choose from:
+
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
  
* '''Remote HTTP module to check latency''': it obtains the total time that elapses from the first request until the last one is checked (in a WEB test there are one or more intermediate requests that complete the transaction). If it is defined in the check definition that the transaction must be carried out more than once, the average time of each request is used.
+
===== Purgado de índices =====
  
* '''Remote HTTP module to check server response''': it shows the values 1 (OK) or 0 (CRITICAL) as a result from checking the entire transaction. If there are several attempts, but at least one of them has failed, the test as a whole is also considered to have failed. Precisely the number of attempts is sometimes used to avoid false positives. In case you may want to perform the test several times in case of a failure, use the'' retries'' field (see advanced fields below).
+
Puede consultar en todo momento el listado de índices y el tamaño que ocupan lanzando una petición cURL contra su servidor ElasticSearch:
  
* '''Remote HTTP module to retrieve numeric data''': It retrieves a numeric value from an HTTP response using a regular expression.
+
curl -q <nowiki>http://elastic:9200/_cat/indices?</nowiki>
  
* '''Remote HTTP module to retrieve string data''': It retrieves a string from an HTTP response using a regular expression.
+
Donde "elastic" se refiere a la IP del servidor.
  
'''Web Checks'''
+
Para eliminar cualquiera de estos índices puede ejecutar la orden DELETE:
  
This essential field defines the WEB check to be performed. This is defined in one or more steps, or simple requests. These simple requests must be written in a special format in the Web checks field. Checks start with the tab page ''task_begin'' and end with the tab page ''task_end''.
+
curl -q -XDELETE <nowiki>http://elastic:9200/{index-name}</nowiki>
  
A complete example of a simple transaction would be the following:
+
Donde "elastic" se refiere a la IP del servidor, e "{index-name}" es el fichero de salida del comando anterior.
  
task_begin
+
Esta operación liberará el espacio utilizado por el índice eliminado.
get http://apache.org/
 
cookie 0
 
resource 0
 
check_string Apache Software Foundation
 
task_end
 
  
In this basic example, it is being checked whether there is a string in a web page. To that end, there is the variable '''check_string'''. This variable does not allow you to check HTML itself, it only searches for text sub-strings. If you look for "Apache Software Foundation" on the http://apache.org. web and if that text string exists, the check will return OK (if it is ''Remote HTTP module to check server response'')
+
=== Configuración de la consola ===
 +
Para activar el sistema de visualización de logs deberá activar la siguiente configuración:
  
To ensure that a string does not exist on a web page, you can use the variable' check_not_string':
+
<br><center>
 +
[[image:Logs1.JPG|850px]]
 +
<br></center>
  
<pre>
+
Luego podemos configurar el comportamiento del visor de logs en la pestaña 'Log Collector':
check_not_string Section 3
 
</pre>
 
  
 +
<br><center>
 +
[[image:Logs2.JPG|850px]]
 +
<br></center>
  
There are several extra variables to check forms:
+
En esta pantalla podremos configurar:
  
*'''resource (1 or 0)''': Download all the web resources (images, videos, etc).
+
* Dirección IP o FQDN del servidor que aloja el servicio ElasticSearch
*'''cookie (1 or 0)''': Keep a cookie or an open session for later checks.
 
*'''variable_name''': The name of a variable in a form.
 
*'''variable_value''': The value of the previous variable on the form.
 
  
By using these variables, it is possible to send data to forms and check whether they work appropriately or not.
+
* Puerto a través del que se está prestando el servicio ElasticSearch
  
{{Warning|In some specific cases, the domain redirection may '''not''' work. To solve this problem, create a module that uses the final domain address after all redirections are completed.}}
+
* 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.
  
{{Warning|The arguments taken by the  "check_string" syntax are not normal text strings, they are "regular expressions". That is to say, if you search for the string "Pandora FMS (4.0)" you will have to search for it with a regular expression, e. g. Pandora FMS \(4.0\). This allows you to perform much more powerful researches, but you should be aware that any character other than a letter or number will have to be escaped with \.}}
+
* 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.
  
== Checking the Latency of a Website ==
+
=== Elasticsearch Interface ===
  
If you want to check the latency of a website, select the module type named ''Remote HTTP module to check latency''. If you want to find out the latency of the ''http://pandorafms.com'' website, the code should look like the one below.
+
<br><center>
 +
[[image:ES_Interface.png|800px]]
 +
<br></center>
  
task_begin
+
A partir de la version 747 de Pandora FMS se hace disponible la interfaz de Elastic Search donde podremos realizar cambios en nuestra configuración a través de los templates.
get http://pandorafms.com
 
task_end
 
  
Add the '''resource 1''' configuration token so that the download time you calculate includes the download of all resources (javascript, CSS, images, etc.), thus calculating a more real data.
 
<br><br>
 
  
{{Tip|The download time of the website is NOT the time it takes to view a web site in a browser, as this usually depends on the loading time of Javascript, and Goliat downloads the javascript, but does not run it.}}
 
  
== Website Checks through a Proxy==
 
  
You can also carry out website checks by using a proxy. To configure the proxy, add the proxy URL in the 'Proxy URL' field which is located under 'Advanced options':
+
== Migración al sistema LogStash + ElasticSearch ==
  
<center>
+
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.
<br><br>
 
[[Image:Goliat_proxy_conf.png|center]]
 
<br><br>
 
</center>
 
  
An example of the URL could be:
 
  
http://proxy.domain.com:8080
+
Para migrar al nuevo sistema, deberá ejecutar el siguiente script que puede encontrar en /usr/share/pandora_server/util/
  
If the proxy requires an authentication, you may use an URL like this:
 
  
  http://my_user:[email protected].domain.com:8080
+
  # Migrate Log Data < 7.0NG 712 to >= 7.0NG 712
 +
/usr/share/pandora_server/util/pandora_migrate_logs.pl /etc/pandora/pandora_server.conf
  
== Retrieving data from a website ==
+
== Visualización y búsqueda ==
  
You may not want to know whether a specific Web site is working or how long it takes, but to get a real time value, such as Google's stock market value. To that end, use a ''Remote HTTP module to retrieve numeric data'' with the appropriate regular expression:
+
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:
  
<pre>
+
<br><center>
task_begin
+
[[image:LogsVistaNew.png|850px]]
get http://finance.google.com/finance/info?client=ig&q=NASDAQ%3aGOOG
+
<i>Vista de ocurrencias a lo largo del tiempo</i>
get_content \d+\.\d+
+
<br></center>
task_end
 
</pre>
 
  
The output will look like this:
+
<br>
 +
<br>
 +
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.
  
<br><br><center>
+
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:
[[image:Google_stock_quote.png|center|600px]]
 
</center><br><br>
 
  
It is also possible to specify a more complex regular expression for collecting data from more complex HTTP responses with the'' get_content_advanced'' configuration token:
+
192.168*
  
 +
<b>Nota</b>: Las búsquedas deben realizarse utilizando palabras completas o subcadenas iniciales de las palabras a buscar. Algunos ejemplos:
  
<pre>
+
192.168.80.14
task_begin
+
192.168*
get http://finance.yahoo.com/q?s=GOOG
+
Alerta en sistema
get_content_advanced <span id="yfs_l84_goog">([\d\.]+)</span>
+
Alerta en sis
task_end
+
Error
</pre>
 
  
{{Warning|The part of the regular expression to be returned (which is defined in ''get_content_advanced'') must be enclosed in brackets.}}
+
Debemos seleccionar uno de los 3 tipos de búsqueda:
  
To configure the thresholds that trigger warning or critical status, use the module configuration to verify that the received string matches what is expected.
+
* <b>Coincidencia exacta</b>: Búsqueda de cadena literal.
  
== Form Checking on a Website ==
+
<br><center>
 +
[[image:LogsVistaNew2.png|850px]]
 +
<br></center>
  
A more interesting check is that of a web form. However, this is much more complex than simply checking a text on a web page. This example check will use Pandora FMS's own console, log in, and will verify that it has been able to do it, verifying a text in the workspace section where it shows the data of the user who has logged in. If it is a default console, the admin user contains the description "Admin Pandora".
+
* <b>Todas las palabras</b>: Búsqueda de todas las palabras indicadas, independientemente del orden en una misma línea, teniendo en cuenta que cada palabra está separada por espacios.
  
To be able to perform this type of checks, you must have the necessary credentials to be able to log in (since these values are used to "send" them to the HTML form). In addition, go to the page and get the HTML code to be able to see the names of the variables. Then, it is necessary to have a basic knowledge of HTML to understand how Goliat works. This example uses "admin" with the password "pandora" which are the default credentials. You should have changed them, if you have not done it yet, this would be a good time to do it!
+
<br><center>
 +
[[image:LogsVistaNew4.png|850px]]
 +
<br></center>
  
{{Tip|The ideal procedure when designing a WEB transactional test with several steps is to test it step by step, in case something was missed in one of the steps.}}
+
* <b>Cualquier palabra</b>: Búsqueda de cualquier palabra indicada, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios.
  
Suppose that the login URL of Pandora FMS Console is:
+
<br><center>
http://192.168.70.116/pandora_console/
+
[[image:LogsVistaNew5.png|850px]]
Analyzing the HTML code, it is observed that the variables of the login form are:
+
<br></center>
  
*''nick'': user name
+
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:
*''pass'': user password
 
  
The variables variable_name and variable_value should be used together to validate the form.  
+
<br><center>
 +
[[image:LogsVistaNew3.png|850px]]
 +
<br></center>
  
Firstly, access the form, send the user and password and authenticate (determining the success of that authentication will be seen in the following step).
 
  
<pre>
+
=== Visualización y búsqueda avanzadas ===
task_begin
 
post http://192.168.70.116/pandora_console/index.php?login=1
 
variable_name nick
 
variable_value admin
 
variable_name pass
 
variable_value pandora
 
cookie 1
 
resource 1
 
task_end
 
</pre>
 
  
With the previous task, it would have been possible to access and validate the website. Now it will be verified that you are actually registered in the website by searching for something on it that you can only see when you are registered. The cookie 1 token is used to maintain the persistence of cookies obtained in the previous step. Without them, it would not be possible to "simulate" a session.
+
A partir de Pandora FSM 7.0NG OUM727 están disponibles las opciones avanzadas para visualización de datos de log.
  
In the second step, access the user details page and look for the phone, which by default for the "admin" user is 555-555-555. If you can see it, it means that you have logged in correctly in the console:
+
Con esta característica podremos graficar las entradas de log, clasificando la información en base a '''modelos de captura de datos'''.
  
<pre>
+
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.
task_begin
 
get http://192.168.70.116/pandora_console/index.php?sec=workspace&sec2=operation/users/user_edit
 
cookie 1
 
resource 1
 
check_string 555-555-5555
 
task_end
 
</pre>
 
  
And finally, log out from the console and look for the logout message:
 
  
<pre>
+
Para acceder a las opciones avanzadas pulse en ''Advanced options''. Se mostrará un formulario donde podrá elegir el tipo de vista de resultados:
task_begin
 
get http://192.168.70.116/pandora_console/index.php?bye=bye
 
cookie 1
 
resource 1
 
check_string Logged out
 
task_end
 
</pre>
 
  
Therefore, the total check process would look like this in Pandora FMS:
+
- Mostrar entradas de log (texto plano).
 +
- Mostrar gráfica de log.
  
 
<center>
 
<center>
[[Image:goliat_full_sample.jpg]]
+
[[Image: graph_log.png|800px]]
 
</center>
 
</center>
  
== Comportamiento de las peticiones WEB ==
+
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:
  
The fields of the advanced properties are similar to those of other types of modules, although there are some different and specific fields of the WEB checks:
+
<center>
 +
[[Image: graph_log2.png|800px]]
 +
</center>
  
'''Timeout'''
+
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.
  
This is the expiry time during the request, if this time is exceeded the request for verification will be discarded.
 
  
'''Agent browser id'''
+
<center>
 +
[[Image: graph_log3.png]]
 +
</center>
  
This is the web browser identifier to use, as certain pages only accept some web browsers (see zytrax.com for more information).
 
  
'''Requests'''
+
En el formulario que aparece, podremos elegir:
  
Pandora FMS will repeat the check the number of times indicated in this parameter. If one of the checks fails, the check will be considered erroneous. Depending on the number of checks in the module, a certain number of pages will be obtained; that is, if the module consists of three checks, three pages will be downloaded, and if some value has been set in the Requests field, then the number of downloads will be multiplied by it. It is important to keep this in mind to know the total time it will take the module to complete the operations.
+
;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:
  
'''Retries'''
+
clave, _valor_
  
It has nothing to do with requests and implies the opposite, i. e. if its value is > 1, and fails the first time, it will retry a certain number of times until it succeeds. For example with retries = 2 and Requests = 1, if the first test failed, it would retry it once more, and if the second one works, the check would be considered as valid. If it was Requests = 2, and Retries = 1, it would perform two checks, but if either failed, it would consider the test as failed.
 
  
== Simple HTTP Authentication ==
+
clave1,clave2,_valor_
  
Some websites might require HTTP authentication. This authentication method doesn't consist of the 'normal' user / password form. HTTP authentication is the one in which a pop-up appears, informing that the site "xxxx" asks us for credentials.
 
  
<center>
+
clave1,_valor_,clave2
[[Image:Conexion http.png]]
 
</center>
 
  
It can be configured in the advanced options (as seen in the previous screenshot) or directly in the WEB task definition with the following configuration tokens:
 
  
* Check type - HTTP server check type.
+
''Observación:'' Si no especificamos un campo valor, será automáticamente el conteo de apariciones que coinciden con la expresión regular.
* http auth (login) - The user.
 
* http auth (password) - The password.
 
* Proxy auth realm - The auth realm's name.
 
* Proxy auth (server) - The domain and HTTP port on which to listen on.
 
* Proxy URL - Proxy server url
 
* Proxy auth (login) - Proxy connection user
 
* Proxy auth (pass) - Proxy connection password
 
  
This is a full example:
+
''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.
  
task_begin
+
''Ejemplo''
get http://artica.es/pandoraupdate4/ui/
 
cookie 1
 
resource 1
 
check_string Pandora FMS Update Manager \(4.0\)
 
http_auth_serverport artica.es:80
 
http_auth_realm Private area
 
http_auth_user admin
 
http_auth_pass xxxx
 
task_end
 
  
== Webservice Monitoring ==
+
Si quisiéramos extraer entradas de un log con el siguiente formato:
  
With Pandora FMS and Goliat's Web Surveillance features, you're also able to monitor web services and APIs which are based on the REST specification, but you're unable to conduct such a surveillance on SOAP or XML-RPC based web services.
+
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.
  
Let's assume for a moment that you want to check a web API by a specific call which returns a number (from '0' to 'n') if it works properly. If not, it's not going to return anything, which will be considered a failure by Pandora FMS:
 
  
task_begin
+
Para contar el número de veces que se ha iniciado sesión, agrupando por usuario, usaremos:
get http://artica.es/integria/include/api.php?user=slerena&pass=xxxx&op=get_stats&params=opened,,1
 
check_string \n[0-9]+
 
task_end
 
  
This is going to return a reply like this:
 
  
<pre>
+
Expresión regular
HTTP/1.1 200 OK
 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
 
Connection: close
 
Date: Mon, 13 May 2013 15:39:27 GMT
 
Pragma: no-cache
 
Server: Apache
 
Vary: Accept-Encoding
 
Content-Type: text/html
 
Expires: Thu, 19 Nov 1981 08:52:00 GMT
 
Client-Date: Mon, 13 May 2013 15:39:27 GMT
 
Client-Peer: 64.90.57.215:80
 
Client-Response-Num: 1
 
Client-Transfer-Encoding: chunked
 
Set-Cookie: a81d4c5e530ad73e256b7729246d3d2c=pcasWqI6pZzT2x2AuWo602; path=/
 
  
0
+
Starting Session \d+ of user (.*?)\.
</pre>
 
  
This is going to produce an 'OK' (Green) module status, because the regular expression matching ('regexp') found the '0' just before a carriage return. It's important to check the entire response data - not just the 'data' section, so you can match the HTTP headers, too. For other responses, a different regular expression is required.
 
  
== HTTPS Monitoring ==
+
Campos:
  
Goliat is able to check both HTTP and HTTPS. To conduct checks on secured websites which are utilizing HTTPS, you only have to incorporate the protocol into its URL, e.g.:
+
username
  
<pre>
 
task_begin
 
get https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=zpwhtygjntrz&ss=1&scc=1&ltmpl=default&ltmplcache=2
 
cookie 1
 
resource 0
 
check_string Google
 
task_end
 
</pre>
 
  
== IPv6 Support ==
+
Este modelo de captura nos devolverá el número de inicios de sesión por usuario del intervalo de tiempo que seleccionemos.
  
Goliat supports IPv6, although it needs to use FQDN addresses, this means that URLs must have full names (e.g. ipv6.google.com). The numerical representation of IPv6 addresses (pe:[:: 1],[2404:6800:4004:4004:803::1014] etc.) is not valid for IPv6 checks with Goliat.
 
  
== Advanced Options ==
+
<center>
 +
[[Image: graph_log4.png]]
 +
</center>
  
=== Modifying HTTP Headers (available from versions 4.0.2 and above) ===
+
== Configuración de los agentes ==
  
With the ''header'' option, you're able to modify HTTP headers or create your own. The example below e.g. changes the ''Host'' HTTP header:
+
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.
  
task_begin
+
Veamos dos ejemplos para capturar información de logs, en Windows y en Unix:
get http://192.168.1.5/index.php
 
header Host 192.168.1.1
 
task_end
 
  
=== Debugging Web Surveillance (available from versions 4.0.2 and above) ===
+
=== En Windows ===
  
If you want to debug a website check, please add the ''debug <log_file>'' option. The files log_file.req and log_file.res are going to be created along with the contents of the HTTP request and response:
+
module_begin
 +
module_name Eventlog_System
 +
module_type log
 +
module_logevent
 +
module_source System
 +
module_end
  
  task_begin
+
  module_begin
  get http://192.168.1.5/index.php
+
  module_name PandoraAgent_log
  debug /tmp/request.log
+
module_type log
  task_end
+
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
  
The website check above is going to generate the files ''/tmp/request.log.req'' and ''/tmp/request.log.res''.
+
En ambos casos, la única diferencia de un módulo de monitorización a la definición de una fuente de log, es:
  
=== Using CURL instead of LWP ===
+
module_type log
  
LWP sometimes crashes when multiple threads issue HTTPS requests simultaneously. To solve this problem, you just have to edit the file named '/etc/pandora/pandora_server.conf' and to add the below mentioned line to it:
+
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.
  
web_engine curl
+
{{Warning|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.}}
  
After you've restarted the Pandora FMS Server, the CURL binary is going to be used to perform website checks instead of LWP.
+
=== Sistemas Unix ===
  
= Distributed Transactional WEB Monitoring by Selenium =
+
En Unix se utiliza un nuevo plugin, que viene con el agente de la versión 5.0. Su sintaxis es bien sencilla:
  
[[file:selenium_logo.png|right]]
+
module_plugin grep_log_module /var/log/messages Syslog \.\*
  
In addition to the features of Goliat, which is integral part of all Pandora FMS Enterprise versions, there is another way to perform Transactional Monitoring by Pandora FMS. This method is using an agent-like approach instead of a centralized system. It allows you to distribute the load and to use servers in remote networks to monitor different websites or applications.
+
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.
  
In such a case, [http://docs.seleniumhq.org/ 'Selenium'] is used as the back end instead of Goliat. It supports a navigation 'by clicks' which is much more precise than the ones offered by Goliat. The Selenium plug-in agent interacts with the Selenium Server - and this in turn with the system's browser. This method offers the possibility to browse the web using Chrome, Firefox or the Internet Explorer. It runs on Windows and Linux, enables latency and session checks and '''supports navigation with heavy implementations of JavaScript and Java applets, Flash or any other technology, supported by browsers today'''.
+
== Log Source en la Vista de Agentes ==
  
The Selenium plug-in Documentation is very extensive and specific and can be found in the [http://library.pandorafms.com/Library/repository/en Pandora FMS Module Library], along with the Enterprise Selenium Plug in.
+
A partir de la versión 749 de Pandora FMS, se ha añadido en la Vista del agente un box 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 se nos redirigirá a la vista del Log Viewer filtrada por ese log.
 +
 
 +
<center>
 +
[[Image: agent_view_log.png|800px]]
 +
</center>
  
'''This functionality had been improved, now you have Pandora UX to automatize and monitor both desktop and web User eXperience sessions'''
 
  
[[Pandora:Documentation_en|Go back to the Pandora FMS Documentation Index]]
+
[[Pandora:Documentation|Volver a Indice de Documentacion Pandora FMS]]
  
[[Category:Pandora FMS]]
+
[[Category: Pandora FMS]]
 
[[Category:Documentation]]
 
[[Category:Documentation]]

Revision as of 10:05, 11 September 2020

Volver a Indice de Documentacion Pandora FMS

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:

  1. 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:
    1. Crear módulos que cuenten las ocurrencias de una expresión regular en un log.
    2. Obtener las líneas y el contexto de los mensajes de log
  2. 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 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:



LogsEsquema.png



  • 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 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.

Template warning.png

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 cada componente (Pandora FMS Server, ElasticSearch) en servidores independientes.

Si decide alojar ElasticSearch y LogStash en el mismo servidor, recomendamos:

  • Centos 7.
  • Al menos 4GB de RAM, aunque se recomiendan 6GB de RAM por cada instancia de ElasticSearch.
  • 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 los datos de ElasticSearch (el número puede variar dependiendo de la cantidad de datos que se desee almacenar).
  • Conectividad desde el servidor y la 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 la máquina:

yum install java

Una vez instalado Java, instalar ElasticSearch siguiendo la documentación oficial: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/install-elasticsearch.html

En caso de una instalación en sistemas CentOS/Red Hat, la instalación recomendada es por medio de rpm: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/rpm.html

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 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 como siguen:

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 cluster.
  • node.name: Para nombrar el nodo, con ${HOSTNAME} tomará el nombre del host.
  • bootstrap.memory_lock: Siempre deberá ser "true".
  • network.host: La IP del servidor.

Si trabajamos con un solo nodo será necesario añadir también la siguiente línea:

discovery.type: single-node

En caso de trabajar con un clúster necesitaremos completar el parámetro discovery.seed_hosts.

discover.seed_hosts : ["ip", "ip", "ip"]

O bien:

discovery.seed_hosts:
 - 192.168.1.10:9300
 - 192.168.1.11
 - seeds.mydomain.com

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. Se recomienda utilizar al menos 2GB de espacio en XMS.

# Xms represents 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 de ElasticSearch: https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

Es necesario cambiar también en el fichero de configuración de ElasticSearch el parámetro memlock unlimited.

La ruta del fichero es:

/usr/lib/systemd/system/elasticsearch.service

Donde deberemos 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


Nota: Si el servicio no consigue iniciarse, revise los logs ubicados en /var/log/elasticsearch/

Para comprobar la instalación de ElasticSearch bastará con ejecutar el siguiente comando:

curl -q http://{IP}:9200/

Que debería ofrecer 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

Template warning.png

A partir de la versión 745 de Pandora FMS no es necesaria la instalación de LogStash.

 


Instalar LogStash 5.6.2 desde el RPM descargable de la página web del proyecto ElasticSearch: https://artifacts.elastic.co/downloads/logstash/logstash-5.6.2.rpm

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

Template warning.png

A partir de la versión 745 de Pandora FMS no será necesario configurar el fichero de configuración del servidor, ya que toda la configuración se realizará desde la consola al habilitar la recolecció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 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).

La instalación de Syslog se realizará tanto en cliente como en servidor, y para ejecutarla será necesario lanzar el siguiente comando:

yum install rsyslog

Una vez instalado Syslog en los equipos con los que queramos trabajar, será importante tener en cuenta que habrá que acceder al fichero de configuración para habilitar el input TCP y UDP.

/etc/rsyslog.conf

Tras realizar este ajuste será necesario detener y volver a arrancar el servicio rsyslog.

Una vez el servicio vuelva a estar corriendo, podemos realizar una comprobación de puertos para ver que el 514 está accesible.

netstat -ltnp

Después de activar el servicio y comprobar los puertos, debemos configurar el cliente para que pueda enviar los logs al servidor. Para ello accederemos una vez más al fichero de configuración de rsyslog.

/etc/rsyslog.conf

Será necesario localizar y habilitar la línea que permite configurar el host remoto. Habrá que especificar qué queremos enviar, con lo que quedará como sigue:

*.* @@remote-host:514


Info.png

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 más información de la configuración de rsyslog, visitar la web oficial: https://www.rsyslog.com/

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.

Template warning.png

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/{index-name}

Donde "elastic" se refiere a la IP del servidor, e "{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 deberá activar la siguiente configuración:


Logs1.JPG


Luego podemos configurar el comportamiento del visor de logs en la pestaña 'Log Collector':


Logs2.JPG


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.3.3 Elasticsearch Interface


ES Interface.png


A partir de la version 747 de Pandora FMS se hace disponible la interfaz de Elastic Search donde podremos realizar cambios en nuestra configuración a través de los templates.



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:


LogsVistaNew.png 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
Error

Debemos seleccionar uno de los 3 tipos de búsqueda:

  • Coincidencia exacta: Búsqueda de cadena literal.

LogsVistaNew2.png


  • Todas las palabras: Búsqueda de todas las palabras indicadas, independientemente del orden en una misma línea, teniendo en cuenta que cada palabra está separada por espacios.

LogsVistaNew4.png


  • Cualquier palabra: Búsqueda de cualquier palabra indicada, independientemente del orden, teniendo en cuenta que cada palabra está separada por espacios.

LogsVistaNew5.png


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:


LogsVistaNew3.png



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.

Graph log.png

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:

Graph log2.png

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.


Graph log3.png


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.


Graph log4.png

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.

Template warning.png

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

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.

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 box 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 se nos redirigirá a la vista del Log Viewer filtrada por ese log.

Agent view log.png


Volver a Indice de Documentacion Pandora FMS