AWSで導入されたりデータドリブン開発が浸透するようになって
fluentdを目にする機会が多くなってきた感じです。
Fluentd と td-agent の違い
ログ収集とか調べ始めると出てくるワードで、
fumeとかlogstashとかkafkaとかと一緒に出てくるイメージ。
最初調べ始めるとtd-agentとfluentdの違いで止まった記憶があります。
fluentdがでで来るのに、実際にマシンにインストールするのはtd-agetで
プロセスもtd-agentって書いてあるしなぜ!?みたいな(笑)
一応公式ページで、Fluentdとtd-agentの違いについて回答しています。
What are the differences between td-agent and Fluentd?
> In one word, td-agent is a stable distribution package of Fluentd.
td-agentはfluentdの安定版でメモリ使用が最適化されていたり、chefレシピがあったりと便利。
なので開発である読者が利用するのは、td-agentであることはほぼ間違いないのかな。
詳しくは公式サイトをどうぞ
このサイトでは、
より有名なFluentdを使用しますが
その実態はtd-agentのことです。
Fluentd Aggregatorノードマシンを設定込みで作成する
実運用で採用するとしたら、ログ収集ノードとデータ挿入ノードは分けたほうがよいです。
その時に必要になるのがAggregatorノードです。
もし予算がたっぷりあってより大規模なログ集積基盤を考えている場合
Apache Kafkaが絶対おすすめです(笑)
aggratorノードで複数のログ収集ノードから飛んでくるデータを
S3とelasticsearchに突っ込む設定を用意します。
設定とかは検索すればよく出てくるけど、
今回はマシン(CentOS7)から構築していきます。
スクリプトを用意したのでコピペで一発で構築できます(らくちーん)
Aggregatorノードの設定ファイル
fleuntd.confファイルをスクリプトを実行する場所においてください。
S3を使うためにAWSのACCESS_KEYとかが必要ですが
不要な人はコメントアウトなどしてください。
設定可能なな環境変数は下記です。
・AWS_KEY
・AWS_SEC_KEY
・AWS_S3_BUCKET_NAME
・AWS_REGION
・ELASTIC_SEARCH_HOST
・ELASTIC_SEARCH_PORT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
<match td.*.*> @type tdlog @id output_td apikey YOUR_API_KEY auto_create_table <buffer> @type file path /var/log/td-agent/buffer/td </buffer> <secondary> @type file path /var/log/td-agent/failed_records </secondary> </match> <match debug.**> @type stdout @id output_stdout2 </match> <source> @type forward port 24224 bind 0.0.0.0 </source> <source> @type http @id input_http port 8888 </source> <source> @type debug_agent @id input_debug_agent bind 127.0.0.1 port 24230 </source> <match **> @type copy <store> @type elasticsearch host "#{ENV['ELASTIC_SEARCH_HOST']}" type_name ${tag} port "#{ENV['ELASTIC_SEARCH_PORT']}" logstash_format true <buffer tag,time> @type file path /var/log/td-agent/elasticsearch flush_thread_count 4 timekey 3600 timekey_wait 10m chunk_limit_size 256m </buffer> </store> <store> @type s3 aws_key_id "#{ENV['AWS_KEY']}" aws_sec_key "#{ENV['AWS_SEC_KEY']}" s3_bucket "#{ENV['AWS_S3_BUCKET_NAME']}" s3_region "#{ENV['AWS_REGION']}" path logs/${tag}/%Y-%m-%d/ #s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension} s3_object_key_format %{path}%{time_slice}_%{index}.txt store_as text <buffer tag,time> @type file path /var/log/td-agent/s3 timekey 3600 timekey_wait 10m chunk_limit_size 256m </buffer> </store> <store> @type stdout @id output_stdout </store> </match> |
Fluentd構築用シェルスクリプト
上の設定ファイルを置いた場所で下記スクリプトを実行してください(´・ω・`)
環境変数は上に書いてありますので適宜利用してくださいな。
コピペでもいいし。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash # setup fluentd v3 redhat echo -e "root soft nofile 65536\nroot hard nofile 65536\n* soft nofile 65536\n* hard nofile 65536\n" | sudo tee -a /etc/security/limits.conf echo "net.core.somaxconn = 1024\nnet.core.netdev_max_backlog = 5000\nnet.core.rmem_max = 16777216\nnet.core.wmem_max = 16777216\nnet.ipv4.tcp_wmem = 4096 12582912 16777216\nnet.ipv4.tcp_rmem = 4096 12582912 16777216\nnet.ipv4.tcp_max_syn_backlog = 8096\nnet.ipv4.tcp_slow_start_after_idle = 0\nnet.ipv4.tcp_tw_reuse = 1\nnet.ipv4.ip_local_port_range = 10240 65535" | sudo tee -a /etc/sysctl.conf sudo curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sudo sh sudo mv /etc/td-agent/td-agent.conf{,.bk} sudo mv ./td-agent.conf /etc/td-agent/ sudo systemctl enable fluentd sudo systemctl start td-agent sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-s3 sudo firewall-cmd --permanent --add-port=24224/tcp sudo firewall-cmd --reload sudo reboot |
これでログ集積基盤の真ん中らへんが簡単につくれるよね。
楽ちん楽ちん
気が向いたらansible, chefにしたやつ公開するね。
あとElasticSearchとかの構築スクリプトも公開するよ、
じゃあね〜〜〜〜。