Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
es:documentation:03_monitoring:09_log_monitoring [2022/05/25 23:34]
jimmy.olano [Migración al sistema Elasticsearch]
es:documentation:03_monitoring:09_log_monitoring [2022/05/27 21:03] (actual)
jimmy.olano Boleto GitLab # 9065 .
Línea 16: Línea 16:
       - Obtener las líneas y el contexto de los mensajes de //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//.   - **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 [[wpes>es.wikipedia.org/wiki/es.wikipedia.org/wiki/es.wikipedia.org/wiki/es.wikipedia.org/wiki/es.wikipedia.org/wiki/Elasticsearch|Elasticsearch]] para almacenar la información de //logs//, lo que implica una mejora sustancial del rendimiento.+A partir de la versión 7.0 NG 712, Pandora FMS incorpora [[wpes>Elasticsearch]] para almacenar la información de //logs//, lo que implica una mejora sustancial del rendimiento. 
  
 ===== Cómo funciona ===== ===== Cómo funciona =====
Línea 46: Línea 47:
 Con un entorno de un solo nodo con estas características se pueden almacenar hasta 1 GB de datos diarios y almacenarlos el tiempo por defecto que son 8 días. Con un entorno de un solo nodo con estas características se pueden almacenar hasta 1 GB de datos diarios y almacenarlos el tiempo por defecto que son 8 días.
  
-En el caso de requerir una mayor resiliencia de datos, y tolerancia a fallos, será necesario la configuración de un clúster de Elasticsearch (mínimo 3 nodos para garantizar integridad de datos). Al pasar a un entorno de //cluster//  también es posible distribuir la carga entre los nodos, duplicando (en el caso de 3 nodos) la capacidad de procesamiento del entorno. **Será necesario un sistema de balanceo de carga**  si se quiere trabajar con los diferentes nodos //de forma simultánea//.+En el caso de requerir una mayor resiliencia de datos, y tolerancia a fallos, será necesario la configuración de un clúster de Elasticsearch (mínimo 3 nodos para garantizar integridad de datos). Al pasar a un entorno de clúster también es posible distribuir la carga entre los nodos, duplicando (en el caso de 3 nodos) la capacidad de procesamiento del entorno. **Será necesario un sistema de balanceo de carga**  si se quiere atacar con los diferentes nodos //de forma simultánea//.
  
  
Línea 60: Línea 61:
 Para Rocky Linux 8 se recomienda la instalación por medio de paquete RPM, es un único paquete que contiene todo lo necesario para la instalación de la base de datos de Elasticsearch. Para Rocky Linux 8 se recomienda la instalación por medio de paquete RPM, es un único paquete que contiene todo lo necesario para la instalación de la base de datos de Elasticsearch.
  
-Para su descarga vaya a [[https://www.elastic.co/downloads/elasticsearch|https://www.elastic.co/downloads/elasticsearch]] y seleccione ''Linux x86_64'' (procesadores AMD® o Intel® de 64 bits).+Para su descarga vaya a [[https://www.elastic.co/downloads/elasticsearch|https://www.elastic.co/downloads/elasticsearch]] y seleccione\\ 
 +''Linux x86_64'' (procesadores AMD® o Intel® de 64 bits).
  
 Una vez haya descargado el paquete debe subirlo al servidor donde instalará Eleasticsearch, vaya a ese directorio y ejecute con derechos suficientes: Una vez haya descargado el paquete debe subirlo al servidor donde instalará Eleasticsearch, vaya a ese directorio y ejecute con derechos suficientes:
Línea 87: Línea 89:
  
  
-==== Configuración ====+==== Configuración de nodo ====
  
 <WRAP center round important 60%>\\ <WRAP center round important 60%>\\
Línea 144: Línea 146:
 **cluster.name** **cluster.name**
  
-Será el nombre que recibirá el grupo o //cluster//.+Será el nombre que recibirá el grupo o clúster.
  
 **node.name** **node.name**
Línea 154: Línea 156:
 Para ''network.host''  el valor ''0.0.0.0''  permite que Elasticsearch "escuche" en todas las interfaces de red (NIC), //coloque un valor específico para utilizar una //NIC //específica.// Para ''network.host''  el valor ''0.0.0.0''  permite que Elasticsearch "escuche" en todas las interfaces de red (NIC), //coloque un valor específico para utilizar una //NIC //específica.//
  
-En caso de trabajar con un //cluster//  necesita completar el parámetro ''discovery.seed_hosts''  (consulte "[[:es:quickguides:elasticsearch_cluster|Configuración de un racimo de servidores Elasticsearch]]" para más información): +En caso de trabajar con un clúster necesita completar el parámetro ''discovery.seed_hosts''  .
-<code>+
  
 +<code>
 discover.seed_hosts : ["ip:port", "ip", "ip"] discover.seed_hosts : ["ip:port", "ip", "ip"]
  
Línea 227: Línea 229:
 </code> </code>
  
-Se recomienda visitar el enlace a las mejores prácticas de Elasticsearch para entornos en producción:+Se recomienda visitar el enlace a las //Best practices (M//ejores prácticasde Elasticsearch para entornos en producción:
  
-[[https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod|https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod]]+  * [[https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod|https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html#dev-vs-prod]] 
 + 
 + 
 +=== Configuración de un clúster Elasticsearch === 
 +  * El tamaño mínimo de un clúster de servidores Elasticsearch es de 3 nodos y siempre debe ir creciendo en números impares para poder hacer uso del sistema de //quorum//  y garantizar la integridad de los datos. 
 +  * Asegúrese de que tiene conectividad entre los 3 nodos y que los puertos 9200 y 9300 son accesibles entre todos y cada uno de los nodos. 
 + 
 +<WRAP center round tip 60%>Recuerde configurar el cortafuegos (//firewall//) de cada nodo para que permita conexión por dichos números de puertos.</WRAP> 
 + 
 +Detenga el servicio Elasticsearch en todos y cada uno de los nodos: 
 +<code> 
 + 
 +systemctl stop elasticsearch.service 
 + 
 +</code> 
 + 
 +Modifique en el fichero de configuración ''/etc/elasticsearch/elasticsearch.yml''  las siguientes líneas: 
 + 
 +<code> 
 +#discovery.seed_hosts: ["host1", "host2"
 +#cluster.initial_master_nodes: ["host1", "host2"
 + 
 +</code> 
 + 
 +//[[:es:documentation:01_understanding:03_glossary#comentar_o_descomentar_un_parametro|Descomente]]//las líneas y agregue las direcciones IP o URL de cada uno de los nodos : 
 +<code> 
 + 
 +discovery.seed_hosts: ["host1", "host2", "host3"
 +cluster.initial_master_nodes: ["host1", "host2", "host3"
 + 
 +</code> 
 + 
 +Ejemplo con direcciones IP: 
 + 
 +<code> 
 +discovery.seed_hosts: ["172.42.42.101", "172.42.42.102", "172.42.42.103"
 +cluster.initial_master_nodes: ["172.42.42.101", "172.42.42.102", "172.42.42.103"
 + 
 +</code> 
 + 
 +<WRAP center round important 60%> \\ Asegúrese que la línea ''cluster.initial_master_nodes''  esté definida solo una vez en el fichero de configuración, **en algunos casos la misma línea aparece en dos bloques diferentes del mismo fichero.** \\ </WRAP> 
 + 
 +Antes de iniciar el servicio, debido a que los nodos se iniciaron por primera vez por sí solos (//standalone//), debe borrarse el contenido de la carpeta data (por defecto ''/var/lib/elasticsearch/'') para poder iniciar por primera vez el clúster. Hágalo con el comando: 
 + 
 +<code> 
 +rm -rf /var/lib/elasticsearch/
 + 
 +</code> 
 + 
 +Ahora es momento de iniciar los servicios en todos y cada uno de los nodos. Inicie y compruebe que se están ejecutando con los comandos: 
 + 
 +<code> 
 +systemctl start elasticsearch.service && systemctl status elasticsearch.service 
 + 
 +</code> 
 + 
 +Debe obtener una salida similar a: 
 + 
 +{{  :wiki:pfms-systemctl_status_elasticsearch.service.png  }} 
 + 
 +Una vez iniciados los servicios debe confirmar que los 3 nodos están unidos al clúster correctamente, por lo que al ejecutar en cualquiera de los nodos el siguiente comando debe dar la misma respuesta: 
 + 
 +<code> 
 +curl -XGET http://127.0.0.1:9200/_cat/nodes 
 + 
 +</code> 
 + 
 +{{  :wiki:pfms-elasticsearch-curl-x-get-_cat-nodes.png  }} 
 + 
 +Vuelva a revisar la configuración del //firewall//  siempre tomando en cuanta que los nodos deben comunicarse por los puertos ''9200''  y ''9300''  y que desde el servidor PFMS y la Consola web PFMS debe poder accederse al puerto ''9200''  también. Con estos pasos ya tendrá instalado y configurado el clúster de Elasticsearch para ser usado como motor de almacenamiento de //logs//  de Pandora FMS.
  
  
 ===== Modelos de datos y plantillas ===== ===== Modelos de datos y plantillas =====
  
-Antes de poner en producción un entorno, bien sea de un solo nodo o un //cluster// de datos, se recomienda aplicar las configuraciones correspondientes a este nodo o clúster en función a su utilización. En el caso de los índices generados por **Pandora FMS** la forma más efectiva de hacerlos es definiendo una plantilla (//template//) para definir la configuración de los campos y los datos almacenados.+Antes de poner en producción un entorno, bien sea de un solo nodo o un clúster de datos, se recomienda aplicar las configuraciones correspondientes a este nodo o clúster en función a su utilización. En el caso de los índices generados por **Pandora FMS** la forma más efectiva de hacerlos es definiendo una plantilla (//template//) para definir la configuración de los campos y los datos almacenados.
  
 <WRAP center round important 60%> 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. </WRAP> <WRAP center round important 60%> 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. </WRAP>
Línea 322: Línea 393:
 </code> </code>
  
-A través de la interfaz de Elasticsearch en Pandora FMS (**Admin tools** -> **Elasticsearch Interface**)  y utilizando el comando nativo de Elasticsearch podrá subir dicho //template//.+A través de la interfaz de Elasticsearch en Pandora FMS (**Admin tools** → **Elasticsearch Interface**) y utilizando el comando nativo de Elasticsearch podrá subir dicho //template//.
  
    * **PUT _template/<nombredeltemplate>**: en este ejemplo ''PUT _template/pandorafms''  .    * **PUT _template/<nombredeltemplate>**: en este ejemplo ''PUT _template/pandorafms''  .
 {{  :wiki:pfms-elasticsearch_interface_put_template.png  }} {{  :wiki:pfms-elasticsearch_interface_put_template.png  }}
  
-También podrá consultar los //templates// por la misma interfaz de Pandora FMS:+También podrá consultar los //templates//  por la misma interfaz de Pandora FMS:
  
   * **GET _template/<nombredeltemplate>**: en este ejemplo ''GET _template/pandorafms''  .   * **GET _template/<nombredeltemplate>**: en este ejemplo ''GET _template/pandorafms''  .
 +==== Templates multinodo ====
 +
 +Para 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 **debe 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:
 +
 +<code>
 +{
 + "index_patterns": ["pandorafms*"],
 + "settings": {
 +   "number_of_shards": 3,
 +   "auto_expand_replicas" : "0-1",
 +   "number_of_replicas" : "2"
 + },
 +
 +</code>
 +
 +<WRAP center round info 75%> \\ Esto es una definición muy básica, para poder definir correctamente el dimensionamiento del entorno de Elasticsearch es recomendable tener en cuenta los factores descritos en este artículo:</WRAP>
 +
 +  * [[https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster|https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster]]
 +
 +Desde la línea de comando puede listar los templates del entorno ejecutando:
 +<code>
 +
 +curl -X GET "localhost:9200/_cat/templates/*?v=true&s=name&pretty"
 +
 +</code>
 +
 +También puede ver los detalles de un, template, por ejemplo el que hemos creado para pandorafms ejecutando:
 +
 +<code>
 +curl -X GET "localhost:9200/_template/pandorafms*?pretty"
 +
 +</code>
 +
 +el cual devolverá en formato JSON la configuración que tenga definida.
 +
 +Puede realizar estas operaciones a través de la interfaz de Elasticsearch en Pandora FMS utilizando los comandos nativos de Elasticsearch.
 +
 +  * **PUT _template/<nombre_del_template> {json_data}**: permite introducir los datos del //template//  a crear.
 +  * **GET _template/><nombre_del_template>**: permite visualizar el //template//  creado.
 +{{  :wiki:getinterface.png  }}
 +
 {{  :wiki:getinterface.png  }} {{  :wiki:getinterface.png  }}
  
ºº