Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
La optimización de ELK se puede realizar desde los siguientes aspectos:
Características de ES como almacenamiento de registros:
① Aumentar la memoria del servidor y la memoria dinámica de JVM
② Utilice varias instancias para equilibrar la carga
③Utilice filebeat en lugar de logstash para recopilar datos de registro
- 为了保证不丢失数据,就要保护 translog 文件的安全:
- Elasticsearch 2.0 之后,每次写请求(如 index 、delete、update、bulk 等)完成时,都会触发fsync将 translog 中的 segment 刷到磁盘,然后才会返回 200 OK 的响应;或者: 默认每隔5s就将 translog 中的数据通过fsync强制刷新到磁盘。
- 该方式提高数据安全性的同时,降低了一点性能。
- ==> 频繁地执行 fsync 操作,可能会产生阻塞导致部分操作耗时较久。 如果允许部分数据丢失,可设置异步刷新 translog 来提高效率,还有降低 flush 的阀值, 优化如下:
- "index.translog.durability": "async",
- "index.translog.flush_threshold_size":"1024mb",
- "index.translog.sync_interval": "120s"
- 写入 Lucene 的数据,并不是实时可搜索的,ES 必须通过 refresh 的过程把内存中的数据转换成 Lucene 的完整 segment 后,才可以被搜索。
- 默认 1 秒后,写入的数据可以很快被查询到,但势必会产生大量的 segment,检索性能会受到影响。所以,加大时长可以降低系统开销。 对于日志搜索来说,实时性要求不是那么高,设置为 5 秒或者 10s;对于 SkyWalking,实时性要求更低一些,我们可以设置为 30s。
- 设置如下:
- "index.refresh_interval":"5s"
- index.merge.scheduler.max_thread_count 控制并发的 merge 线程数,如果存储是并发性能较好的 SSD,可以用系统默认的 max(1, min(4, availableProcessors / 2)),当节点配置的 cpu 核数较高时,merge 占用的资源可能会偏高,影响集群的性能,普通磁盘的话设为1,发生磁盘 IO 堵塞。设置 max_thread_count 后,会有 max_thread_count + 2 个线程同时进行磁盘操作,也就是设置为 1 允许 3 个线程。
- 设置如下:
- "index.merge.scheduler.max_thread_count":"1"
Primero debe cerrar el índice, luego ejecutarlo y finalmente abrirlo después del éxito.
curl -XPOST 'http://localhost:9200/_all/_close'
curl -XPUT -H "Content-Type:application/json" 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{"index.merge.scheduler.max_thread_count" : "1","index.refresh_interval" : "10s","index.translog.durability" : "async","index.translog.flush_threshold_size":"1024mb","index.translog.sync_interval" : "120s"}'
curl -XPOST 'http://localhost:9200/_all/_open'
El grupo de subprocesos de escritura está lleno, lo que provoca que se rechacen tareas y no se puedan escribir algunos datos. Después de la optimización anterior, el número de rechazos ha disminuido mucho, pero todavía hay casos en los que se rechazan tareas. Por lo tanto, también necesitamos optimizar el grupo de subprocesos de escritura.
El grupo de subprocesos de escritura utiliza un tipo fijo de grupo de subprocesos, es decir, el número de subprocesos centrales es el mismo que el valor máximo de subprocesos. La cantidad de subprocesos es igual a la cantidad de núcleos de CPU de forma predeterminada. El valor máximo que se puede establecer solo puede ser el número de núcleos de CPU más 1. Por ejemplo, para una CPU de 16 núcleos, la cantidad máxima de subprocesos que se puede. establecer es 17.
- # 线程数设置
- thread_pool:
- write:
- # 线程数默认等于cpu核数,即16
- size: 17
- # 因为任务多时存在任务拒绝的情况,所以加大队列大小,可以在间歇性任务量陡增的情况下,缓存任务在队列,等高峰过去逐步消费完。
- queue_size: 10000
Intercambiar partición de intercambio: cuando la memoria física del sistema no es suficiente, es necesario liberar una parte del espacio en la memoria física para que lo utilice el programa que se está ejecutando actualmente. El espacio liberado puede provenir de algunos programas que no han funcionado durante mucho tiempo. El espacio liberado se guarda temporalmente en Swap. Cuando esos programas están a punto de ejecutarse, los datos guardados se restauran desde Swap a la memoria. De esta forma, el sistema siempre realiza Swap cuando la memoria física es insuficiente.
La partición de intercambio es muy perjudicial para el rendimiento y la estabilidad del nodo y debe desactivarse. Hace que la recolección de basura dure minutos en lugar de milisegundos y puede hacer que los nodos respondan lentamente o incluso se desconecten del clúster.
1) Desactivar Swap en el sistema Linux (efectivo temporalmente)
- 执行命令 sudo swapoff -a
- 可以临时禁用 Swap 内存,但是操作系统重启后失效
2) Reducir el uso de Swap tanto como sea posible en sistemas Linux (con efecto permanente)
- 执行下列命令
- echo "vm.swappiness = 1" >> /etc/sysctl.conf
- 正常情况下不会使用 Swap,除非紧急情况下才会 Swap。
3) Habilite bootstrap.memory_lock
- config/elasticsearch.yml 文件增加配置
- #锁定内存,不让 JVM 写入 Swap,避免降低 ES 的性能
- bootstrap.memory_lock: true
El tamaño del índice depende del tamaño de los fragmentos y segmentos. Si los fragmentos son demasiado pequeños, los segmentos pueden ser demasiado pequeños, lo que puede provocar una mayor sobrecarga; si los fragmentos son demasiado grandes, los fragmentos pueden fusionarse con frecuencia; lo que resulta en una gran cantidad de operaciones de E/S, lo que afecta el rendimiento de escritura.
Debido a que el tamaño de cada uno de nuestros índices es inferior a 15G y el valor predeterminado es 5 fragmentos, no hay necesidad de tantos, por lo que lo ajustamos a 3.
"index.number_of_shards": "3"
Reduzca la cantidad de fragmentos de copia del clúster. Demasiadas copias provocarán una expansión de la escritura interna de ES. El número predeterminado de copias es 1. Si un nodo donde se encuentra un índice deja de funcionar, otra máquina con una copia tendrá los datos de respaldo del índice, de modo que los datos del índice se puedan usar normalmente. Pero escribir datos en una copia afecta el rendimiento de escritura. Para los datos de registro, 1 copia es suficiente. Para índices con grandes cantidades de datos, puede establecer el número de copias en 0 para reducir el impacto en el rendimiento.
"index.number_of_replicas": "1"
① Aumentar la memoria del servidor y la memoria dinámica de JVM
② Utilice varias instancias para equilibrar la carga
③Utilice filebeat en lugar de logstash para recopilar datos de registro
① Optimice el índice: optimice fsync y aumente adecuadamente el intervalo entre vaciados de disco
② Optimice la configuración del grupo de subprocesos de escritura para reducir el rechazo de tareas: modifique el archivo de configuración de ES elasticsearch.yml y configure el subproceso de escritura en la cantidad de núcleos de CPU + 1
③Bloquear la memoria y evitar que ES use swap: swapoff -a, cerrar swap
④Reduzca adecuadamente la cantidad de fragmentos de índice y copias