es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible utilizar el plugin de salida redis_store para fluentd para manejar una gran cantidad de registros?

Estoy tratando de configurar fluentd para enviar registros a redis en un servidor diferente (la ruta es fluentbit-fluentd-redis-logstash-elastic), pero no puedo resolver algunos problemas de rendimiento. Si guardo los registros solo en disco, todo está bien, se guardan todos los registros (miles por segundo), pero si añado la sección redis_store, la misma cantidad de datos hace que fluentd sea mucho más lento y la memoria sigue creciendo hasta el próximo reinicio (día o dos).
Sé que probablemente sea porque la entrada es más rápida que la salida, pero ¿cómo manejar eso, cómo enviar tantos datos a redis? Aumentar la memoria no es una solución, solo puede agregar algún tiempo. ¿Es posible que redis no pueda recibir datos de tantos hilos (pero redis no está sobrecargado, no hay cola)? No sé si es un problema de red (pero en este complemento no puedo probar otro protocolo), un problema de CPU (la CPU está alrededor del 70%) o el propio complemento.
Si agrego el complemento de redis, la comunicación con redis es demasiado lenta y fluentd no es lo suficientemente rápido para agregar datos a la memoria.

Configuración

<system>
  workers 4
  root_dir /fluentd/log/buffer/
</system>
<worker 0-3="">
<source>
 @type forward
  bind 0.0.0.0
  port 9880

<label @test="">
<match></match><em>*>
 @type forest
 subtype copy
 <template>
 <store>
    @type file
    @id "test-#{worker_id}"
    @log_level debug
    path "fluentd/log/test-#{worker_id}.</store></template></em>.log"
    append true
 <buffer>
    flush<em>mode interval
    flush</em>interval 3
    flush<em>at</em>shutdown true
  </buffer>
 <format>
  @type single<em>value
  message</em>key log
 </format>

 <store>
     @type redis<em>store
     host server</em>ip
     port 6379
     key test
     store<em>type list
 <buffer>
    flush</buffer></em>mode interval
    flush<em>interval 3
    flush</em>at<em>shutdown true
    flush</em>thread_count 4

 </store>


</label>
</worker>

¿Alguna sugerencia sobre cómo mejorar el rendimiento con redis?
Gracias

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay varias formas de mejorar el rendimiento hacia Redis en Fluentd. Aquí tienes algunos consejos:

    1. Aumenta el número de trabajadores de Fluentd: Dado que el cuello de botella es causado por una entrada más rápida que la salida, aumentar el número de trabajadores podría ayudar a mejorar el rendimiento. En la configuración proporcionada, se especifican cuatro trabajadores en la sección del sistema. Podrías intentar aumentar gradualmente este número para ver si mejora el rendimiento.
    <system>
      workers 8
      root_dir /fluentd/log/buffer/
    </system>
    
    1. Aumenta el recuento de hilos de flush_thread_count: En el plugin redis_store, flush_thread_count especifica el número de hilos utilizados para enviar datos a Redis. Aumentar este valor podría ayudar a distribuir la carga entre múltiples hilos y mejorar el rendimiento.
    <buffer>
      flush_mode interval
      flush_interval 3
      flush_at_shutdown true
      flush_thread_count 8
    </buffer>
    
    1. Ajusta la configuración del búfer: La configuración del búfer, flush_mode, flush_interval y flush_at_shutdown, puede afectar la velocidad de envío de los registros a Redis. Ajustar estos valores podría ayudar a mejorar el rendimiento.
    <buffer>
      flush_mode immediate  # prueba diferentes modos de flush
      flush_interval 0.5   # prueba diferentes intervalos de flush
      flush_at_shutdown true
    </buffer>
    
    1. Utiliza un balanceador de carga: Si tienes varios servidores de Redis, podrías utilizar un balanceador de carga para distribuir la carga entre ellos. Esto puede ayudar a mejorar el rendimiento y evitar alcanzar los límites de una única instancia de Redis.

    2. Monitorea los recursos del sistema: También debes monitorear los recursos del sistema, como la CPU, la memoria y el uso de la red, para identificar cualquier cuello de botella o problema de rendimiento. Aislar la causa raíz del problema puede ayudar a determinar la mejor acción a tomar para mejorar el rendimiento.

Comments are closed.