Plug-in do Fluentd
Introdução ao produto
Este plug-in de saída do Fluentd grava dados coletados no DataHub. Ele segue os padrões de desenvolvimento de plug-ins de saída do Fluentd e oferece instalação simplificada.
Instalação do produto
Instalar usando RubyGems
Nota: Recomendamos alterar a fonte do RubyGems para https://gems.ruby-china.com.
gem install fluent-plugin-datahub
Instalação local
O Fluentd roda apenas em ambiente Linux e exige a instalação do Ruby.
Há dois modos de instalação disponíveis. Se você ainda não instalou o Fluentd, use o modo de instalação com um clique para instalar tanto o Fluentd quanto o plug-in do DataHub. Caso já tenha instalado o Fluentd, utilize o modo de instalação independente para instalar apenas o plug-in de gravação do DataHub.
1) Instalação com um clique: Se você ainda não instalou o Fluentd, baixe o pacote completo de instalação do Fluentd. Nota: O pacote completo de instalação inclui a versão fluentd-0.12.25.gem do Fluentd.
$ tar -xzvf fluentd-with-datahub-0.12.25.tar.gz
$ cd fluentd-with-datahub
$ sudo sh install.sh
2) Instalação independente: Caso já tenha o Fluentd instalado, baixe o pacote do plug-in DataHub para Fluentd. Use o comando gem para instalar o plug-in do DataHub.
$ sudo gem install --local fluent-plugin-datahub-0.12.25.gem
Casos de uso
Caso de uso 1: Carregar um arquivo CSV
O exemplo a seguir mostra como carregar arquivos CSV incrementais para o DataHub em tempo quase real. O arquivo CSV tem o seguinte formato:
0,qe614c760fuk8judu01tn5x055rpt1,true,100.1,14321111111
1,znv1py74o8ynn87k66o32ao4x875wi,true,100.1,14321111111
2,7nm0mtpgo1q0ubuljjjx9b000ybltl,true,100.1,14321111111
3,10t0n6pvonnan16279w848ukko5f6l,true,100.1,14321111111
4,0ub584kw88s6dczd0mta7itmta10jo,true,100.1,14321111111
5,1ltfpf0jt7fhvf0oy4lo8m3z62c940,true,100.1,14321111111
6,zpqsfxqy9379lmcehd7q8kftntrozb,true,100.1,14321111111
7,ce1ga9aln346xcj761c3iytshyzuxg,true,100.1,14321111111
8,k5j2id9a0ko90cykl40s6ojq6gruyi,true,100.1,14321111111
9,ns2zcx9bdip5y0aqd1tdicf7bkdmsm,true,100.1,14321111111
10,54rs9cm1xau2fk66pzyz62tf9tsse4,true,100.1,14321111111
Cada linha representa um registro com campos distintos. O arquivo está salvo no caminho local /temp/test.csv. O tópico do DataHub tem o seguinte esquema:
|
Nome do campo |
Tipo do campo |
|
id |
BIGINT |
|
name |
STRING |
|
gender |
BOOLEAN |
|
salary |
DOUBLE |
|
my_time |
TIMESTAMP |
Adicione a seguinte configuração do Fluentd ao arquivo ${CONFIG_HOME}/fluentd_test.conf:
<source>
@type tail
path your_file_path
tag test1
format csv
keys id,name,gender,salary,my_time
</source>
<match test1>
@type datahub
access_id your_app_id
access_key your_app_key
endpoint http://ip:port
project_name test_project
topic_name fluentd_performance_test_1
column_names ["id", "name", "gender", "salary", "my_time"]
flush_interval 1s
buffer_chunk_limit 3m
buffer_queue_limit 128
dirty_data_continue true
dirty_data_file path_to_dirty_data_file
retry_times 3
put_data_batch_size 1000
</match>
Execute o comando a seguir para iniciar o Fluentd e enviar dados do arquivo CSV para o DataHub:
${FLUENTD_HOME}/fluentd-with-dataHub/bin/fluentd -c ${CONFIG_HOME}/fluentd_test.conf
Caso de uso 2: Coletar logs do Log4j
Os logs do Log4j têm o seguinte formato:
11:48:43.439 [qtp1847995714-17] INFO AuditInterceptor - [c2un5sh7cu52ek6am1ui1m5h] end /web/v1/project/tefe4mfurtix9kwwyrvfqd0m/node/0m0169kapshvgc3ujskwkk8g/health GET, 4061 ms
Use a seguinte configuração do Fluentd:
<source>
@type tail
path bayes.log
tag test
format /(?<request_time>\d\d:\d\d:\d\d.\d+)\s+\[(?<thread_id>[\w\-]+)\]\s+(?<log_level>\w+)\s+(?<class>\w+)\s+-\s+\[(?<request_id>\w+)\]\s+(?<detail>.+)/
</source>
<match test>
@type datahub
access_id your_access_id
access_key your_access_key
endpoint http://ip:port
project_name test_project
topic_name dataHub_fluentd_out_1
column_names ["thread_id", "log_level", "class"]
</match>
Inicie o Fluentd com essa configuração para enviar logs do Log4j ao DataHub.
Parâmetros de configuração
Input plugin configuration
tag test1 : Specifies the route. The route is matched against the <match> regular expression.
format csv : Collects data in CSV format.
keys id,name,gender,salary,my_time : Specifies the columns to collect. The column names must match the column names in the destination DataHub table.
Output plugin configuration
shard_id 0 : Specifies the shard ID to write to. By default, data is written in a round-robin manner.
shard_keys ["id"] : Specifies the partition key. The key value is hashed to determine the index of the shard to write to.
flush_interval 1 : Fluentd writes data at least once per second. The default is 60s.
buffer_chunk_limit 3m : The chunk size. Supports "k" (KB) and "m" (MB). The recommended value is 3m.
buffer_queue_limit 128 : The chunk queue size. This value and buffer_chunk_limit determine the total buffer size.
put_data_batch_size 1000 : Writes data to DataHub for every 1,000 records.
retry_times 3 : The number of retries.
retry_interval 3 : The retry interval in seconds.
dirty_data_continue true : Specifies whether to continue when dirty data is encountered. If set to true, Fluentd retries. After all retries are exhausted, the dirty data is written to a dirty data file.
dirty_data_file /xxx/yyy : Specifies the path to the dirty data file.
column_names ["id"] : Specifies the columns to collect.
Teste de desempenho
Ambiente de teste: O Fluentd rodou em um sistema Linux com 2 núcleos e 4 GB de memória. Os resultados do teste de desempenho foram:
Para registros únicos de 512 B, a velocidade de gravação foi de aproximadamente 2.800 registros/s.
Aumentar o
put_data_batch_sizemelhorou ligeiramente a velocidade, mas o efeito não foi significativo.Para registros únicos de 100 KB, o plug-in funcionou apenas quando
put_data_batch_sizefoi definido como 100. Valores de 500 e 1.000 falharam porque o tamanho dos dados em uma única operação de gravação excedeu 50 MB.-
A velocidade média total de gravação foi de 3 MB/s.Perguntas frequentes
P: Como escrevo uma expressão regular para o parâmetro format no Fluentd? R: Use este editor online de expressões regulares.