LoginSignup
15
8

More than 3 years have passed since last update.

td-agentの設定と注意事項

Posted at

作業環境

  • OS: Amazon Linux2
  • td-agent3(fluentd v1)

構成

  • Fluentd Client数台
    • いつ入れ替わってもすべてのログを保存したいので、ほぼリアルタイムでServerにログを送って集約させます
  • Fluentd Server一台
    • ログの保存時間、コスト、検索の便利さなどを考慮して、一時間ごとにログをS3に転送します

Fluentd Client側のインストールと設定

インストール

下記のコマンドでtd-agent3をインストールすることができます。

curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh

設定

設定ファイルはここにあります。
/etc/td-agent/td-agent.conf

下記の内容を追加します。

<source>
  @type tail
  format nginx
  tag "nginx.access.#{Socket.gethostname}"
  path /var/log/nginx/access.log
  pos_file /var/log/td-agent/nginx.access.log.pos
</source>

<source>
  @type tail
  tag "nginx.error.#{Socket.gethostname}"
  path /var/log/nginx/error.log
  pos_file /var/log/td-agent/nginx.error.log.pos

  format multiline
  format_firstline /^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2} \[\w+\] (?<pid>\d+).(?<tid>\d+): /
  format1 /^(?<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?<log_level>\w+)\] (?<pid>\d+).(?<tid>\d+): (?<message>.*)/
  multiline_flush_interval 3s
</source>

<match nginx.**>
  @type forward
  <buffer tag>
    flush_interval 3s
  </buffer>
  <server>
    host x.x.x.x
    port 24224
  </server>
</match>
  • source: ログを指定し、tagをつける
  • match: tagをマッティングし、収集してきたログを処理する

※注意点:#{Socket.gethostname}でhost名を取得できますが、必ず""を付けてください。つけないと単なる文字列として扱われます。

Fluentd Server側のインストールと設定

インストール

下記のコマンドでtd-agent3とプラグインをインストールすることができます。

curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh
td-agent-gem install fluent-plugin-forest

※注意点:fluent-plugin-s3が必要だと多くの記事に書いてありますが、td-agentの中にすでに含まれてるのでインストール不要です。もしもう一つのfluent-plugin-s3を入れたら必ずアンインストールしてください。複数個存在すればエラーが発生してしまいます。ご注意ください。

プラグインの確認方法

td-agentを起動してログで確認できます。
/var/log/td-agent/td-agent.log

内容は下記のように。

2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-elasticsearch' version '3.5.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-kafka' version '0.11.1'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-prometheus' version '1.5.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-record-modifier' version '2.0.1'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '2.2.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-s3' version '1.1.11'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-td' version '1.0.0'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluent-plugin-webhdfs' version '1.2.4'
2019-12-10 11:41:04 +0900 [info]: gem 'fluentd' version '1.7.0'

設定

<match nginx.**>
  @type forest
  subtype copy
  <template>
    <store>
      @type s3
      aws_key_id YOUR_KEY_ID
      aws_sec_key YOUR_SECRIT_KEY
      s3_bucket BUCKET_NAME
      s3_region REGION
      s3_enpoint s3.ap-northeast-1.amazonaws.com
      path ${tag_parts[0]}/${tag_parts[1]}/%Y%m%d/${tag_parts[1]}.log.${tag_parts[2]}.
      time_slice_format %Y%m%d%H
      <buffer tag,time>
        @type file
        path /var/log/td-agent/s3/${tag_parts[0]}/${tag_parts[1]}.log.${tag_parts[2]}
        timekey 3600 # 1 hour partition
        timekey_wait 10s
      </buffer>
    </store>
  </template>
</match>

説明:tagがnginx.**のログは一旦buff fileに保存して、1時間ごとにs3に転送します。tagはClient側で設定されます。プラグインforestの使い方はgoogleで検索してください。

※注意点:bufferのpathですが、サーバごとにログごとに分けてください。分けないとエラーになってログの収集が失敗してしまいます。

Debugログの出力方法

デフォルトではエラーログは出ないです。
debugログを出力したい場合は下記の内容を/etc/td-agent/td-agent.confに追加して再起動してください。

<system>
  log_level debug
</system>
15
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8