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/26 12:06]
jimmy.olano [Configuración] Boleto GitLab # 8129 . NOTA la guía rápida será insertada aquí, por eso borro el término.
es:documentation:03_monitoring:09_log_monitoring [2022/05/27 21:03] (actual)
jimmy.olano Boleto GitLab # 9065 .
Línea 47: 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 atacar 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 89: Línea 89:
  
  
-==== Configuración ====+==== Configuración de nodo ====
  
 <WRAP center round important 60%>\\ <WRAP center round important 60%>\\
Línea 146: 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 156: 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'' .+En caso de trabajar con un clúster necesita completar el parámetro ''discovery.seed_hosts''  .
  
 <code> <code>
Línea 229: 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 332: Línea 401:
  
   * **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  }}
  
-Para definir un **//template//  multinodo** consulte "[[:es:quickguides:elasticsearch_cluster#modelos_de_datos_y_plantillas|Configuración de un racimo de servidores Elasticsearch]]".+{{  :wiki:getinterface.png  }}
  
  
ºº