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.

Cómo establecer el nombre de host en el nombre de índice en el archivo de configuración de Fluentd.

Quiero establecer el nombre de host en index_name del archivo de configuración de Fluentd. Estoy configurando de la siguiente manera pero no está funcionando.

<match output.**="">
  @type copy
  <store>
    @type elasticsearch
    host elasticsearch
    ssl_version TLSv1_2
    ssl_verify false
    type_name _doc
    port 443
    scheme https
    flush_interval 10s
    index_name abc-${hostname}
  </store>
  <store>
    @type stdout
  </store>
</match>

¿Cómo puedo lograr eso?

Tags:  

Answer

  1. Avatar for davy.ai

    Para establecer el nombre de host en el campo index_name del archivo de configuración de fluentd, debes usar la sintaxis ${hostname} dentro de la directiva index_name. Al analizar tu fragmento de configuración, parece que ya estás utilizando esta sintaxis. Sin embargo, no está funcionando para ti.

    Una posible razón para esto podría ser que la sintaxis ${hostname} no se esté evaluando correctamente en tu configuración de fluentd. Para verificar esto, puedes intentar imprimir el valor ${hostname} en la consola utilizando la siguiente configuración:

    <match output.**="">
       @type copy
       <store>
        @type elasticsearch
            host elasticsearch
          ssl_version TLSv1_2
          ssl_verify false
          type_name _doc
          port 443
          scheme https
          flush_interval 10s
          index_name abc-${hostname}
        <buffer>
          @type stdout
          output_type json
          time_as_integer true
        </buffer>
      </store>
    </match>
    

    Esto imprimirá el registro en formato JSON en la consola y podrás ver el valor real de ${hostname}.

    Si el valor del nombre de host no se imprime correctamente, es posible que debas configurar tu entorno de fluentd para evaluar correctamente esta sintaxis. Una posible solución es especificar el nombre de host en tu configuración <source> utilizando la directiva @label. Por ejemplo:

    <source>
      @type forward
      @id input_forward
      @label @mainstream
      port 24224
      bind 0.0.0.0
    
    
    <label @mainstream="">
      <filter **="">
        @type record_transformer
        enable_ruby true
        <record>
          hostname "#{Socket.gethostname}"
        </record>
      </filter>
    
      <match output.**="">
        @type copy
        <store>
          @type elasticsearch
          host elasticsearch
          ssl_version TLSv1_2
          ssl_verify false
          type_name _doc
          port 443
          scheme https
          flush_interval 10s
          index_name abc-${hostname}
        </store>
        <store>
          @type stdout
        </store>
      </match>
    </label>
    

    Esta configuración utiliza el método Socket.gethostname para establecer dinámicamente el valor del nombre de host en la sección <filter>, que luego se reutiliza en la sección <store> utilizando la sintaxis ${hostname}. Esto debería establecer correctamente el valor del nombre de host en tu directiva index_name.

Comments are closed.