Memo/Linux/Fluentd(td-agent)

http://dexlab.net/pukiwiki/index.php?Memo/Linux/Fluentd%28td-agent%29
 

Fluentd(td-agent) 統合ログ管理


RDS slow/general logをtd-agentで集める

  1. RDSからのslow/general log収集: fluent-plugin-rds-log
  2. SQLの抽象化。SQL中にpassowrd等があるとまずい場合にも使える: fluent-plugin-sql_fingerprint
    • pt-fingerprint --match-embedded-numbers で値を'?' に置換
    • サンプル
      1. echo "SELECT name, password FROM user WHERE id='12823';" | pt-fingerprint --match-embedded-numbers       
      2. select name, password from user where id=?

複数バージョンのgemが混在してうまく動作しない時

  • 同じパッケージの複数バージョンが混在しているとうまく動作しない時がある
    1. sudo td-agent-gem list
    2. sudo td-agent-gem cleanup
    3. sudo service td-agent restart

label:

  • Routing Examples | Fluentd
    • v0.12で導入
    • 「tag」はデータソースの識別子
    • 「label」は内部ルーティングの識別子

ログファイルをAWS S3にgz圧縮しつつアップロードする

  • 問題
    • ログファイルが大きく、ファイル数も多いと同時にgzipやアップロード等の処理が実行されるため、CPU使用率が跳ね上がる。
    • tailプラグインだと、同一ログファイルに対して、posやbufferのパスを変えても、複数のsourceを定義できない?片方だけが有効に見える。
  • Amazon S3 Output Plugin | Fluentd
    • デフォルトで圧縮(gzip)
    • path ディレクトリを含むS3オブジェクトパス
    • time_slice_format 毎にファイル分割される。デフォルト1時間毎(%Y%m%d%H)
    • time_slice_wait (デフォルト:10m) は古いログの到着を待つ時間。
    • flush_interval 1m とすると毎分アップロードされる
    • buffer_chunk_limit (デフォルト:8m) のサイズを超えると、ファイル分割されアップロードされる。index+1される。分割されたく無い場合は、大きい値256m等を指定する
  • 環境:td-agent-2.3.5-0.el6.x86_64
  • syslog等を読めるように変更
    1. sudo gpasswd -a td-agent wheel
    2. sudo chown :wheel /var/log/messages /var/log/cron /var/log/maillog /var/log/secure /var/log/yum.log
    3. sudo chmod 640 /var/log/messages /var/log/cron /var/log/maillog /var/log/secure /var/log/yum.log
    4. sudo service td-agent-agent restart
  • /etc/td-agent/td-agent.conf
    1. @include conf.d/*.conf
    2.  
    3. <source>
    4.   type monitor_agent
    5.   bind 0.0.0.0
    6.   port 24220
    7. </source>
  • /etc/td-agent/conf.d/aws_s3_logs.conf
    1. <source>
    2.   type tail
    3.   format none
    4.   path /var/log/cron
    5.   pos_file /var/tmp/td-agent/aws_s3_logs.syslog.cron.pos
    6.   tag aws_s3_logs.syslog.cron
    7.   @label @raw
    8. </source>
    9.  
    10. <source>
    11.   type tail
    12.   format none
    13.   path /var/log/maillog
    14.   pos_file /var/tmp/td-agent/aws_s3_logs.syslog.maillog.pos
    15.   tag aws_s3_logs.syslog.maillog
    16.   @label @raw
    17. </source>
    18.  
    19. <source>
    20.   type tail
    21.   format none
    22.   path /var/log/messages
    23.   pos_file /var/tmp/td-agent/aws_s3_logs.syslog.messages.pos
    24.   tag aws_s3_logs.syslog.messages
    25.   @label @raw
    26. </source>
    27.  
    28. <source>
    29.   type tail
    30.   format none
    31.   path /var/log/secure
    32.   pos_file /var/tmp/td-agent/aws_s3_logs.syslog.secure.pos
    33.   tag aws_s3_logs.syslog.secure
    34.   @label @raw
    35. </source>
    36.  
    37. <source>
    38.   type tail
    39.   format none
    40.   path /var/log/yum.log
    41.   pos_file /var/tmp/td-agent/aws_s3_logs.yum.yum.pos
    42.   tag aws_s3_logs.yum.yum
    43.   @label @raw
    44. </source>
    45.  
    46. <label @raw>
    47.   <match aws_s3_logs.**>
    48.       type forest
    49.       subtype s3
    50.       <template>
    51.         format single_value
    52.         s3_bucket "my-bucket"
    53.         s3_region "#{`curl -s -m 1 http://169.254.169.254/latest/meta-data/placement/availability-zone`.chop}"
    54.         s3_object_key_format "%{path}.%{time_slice}.%{index}.%{file_extension}"
    55.         path "${tag_parts[1]}/%Y/%m/%d/${tag_parts[1]}.${tag_parts[2]}.#{`hostname -s`.chomp}.#{`curl -s -m 1 http://169.254.169.254/latest/meta-data/instance-id`.chomp}"
    56.         time_slice_format "%Y%m%dT%H00Z"
    57.         time_slice_wait 10m
    58.         utc
    59.         buffer_type file
    60.         buffer_path "/var/tmp/td-agent/s3.${tag}"
    61.         buffer_chunk_limit 128m
    62.         disable_retry_limit true
    63.         flush_at_shutdown true
    64.       </template>
    65.   </match>
    66. </label>

fluent-plugin-forest:設定をテンプレート化して簡潔に書く

  • インストール
    1. sudo td-agent-gem install fluent-plugin-forest

動的に値を取得

  • td-agent-2.3.5-0.el6.x86_64
  • ec2 instance-id, hostnameを取得して値を使う
    1. path "#{`hostname -s`.chomp}.#{`curl -s -m 1 http://169.254.169.254/latest/meta-data/instance-id`.chomp}.%Y%m%dT%H00Z"

could not find a temporary directory

  • 原因: /tmp にスティッキービットが無い
  • 解決:
    1. sudo chmod o+t /tmp
    2.  
    3. ls -la / | grep tmp
    4. drwxrwxrwt.  8 root root 40960  515 18:57 2017 tmp

モニタリング

  • 監視を有効化
    1. cat /etc/td-agent/td-agent.conf
    2. @include conf.d/*.conf
    3.  
    4. <source>
    5.   type monitor_agent
    6.   bind 0.0.0.0
    7.   port 24220
    8. </source>
  • ltsvで取得
    1. curl -s http://127.0.0.1:24220/api/plugins
  • jsonで取得
    1. curl -s http://127.0.0.1:24220/api/plugins.json
  • 例:type:forwardのbuffer_queue_lengthを集計
    1. curl -s http://127.0.0.1:24220/api/plugins | perl -ne 'BEGIN{$sum;} if(/type:forward/ && /buffer_queue_length:(\d+)/){$sum+=$1;} END{print $sum;}'
    2. 5

正規表現のテスト


Slackに通知


forwardプラグイン使用時にはrequire_ack_responseオプションを付ける

fluentd v0.12以降かつ、forwardプラグイン使用時に「require_ack_response」を付ける事で、ログの欠損を抑える


out_forwardのDNSキャッシュはデフォルト無期限

  • 問題
    • out_forwardの接続先ホストのDNS更新があっても、再試行に失敗する。
  • 対策: DNSキャッシュのタイムアウトを設定する。0だとキャッシュしないため、パフォーマンスに影響が出る可能性がある。AWS Route53のデフォルトTTLの5分に設定。
    1. expire_dns_cache 300

td-agent2.2.0を削除する

  • yum eraseだと削除に失敗して消えない
    1. sudo yum erase td-agent
  • rpmコマンドで強制的に削除する
    1. sudo rpm -e --justdb td-agent

td-agent.1.x系をインストールする

2015-05-22現在、デフォルトでインストールされるtd-agentが2.x系に変わっている。
互換性が無いためリポジトリのパスが変わっている。
1.x系を使いたい場合、以下のように手動でbaseurlを変更するとインストールできる


コマンド

  • /usr/lib64/fluent/ruby/bin/fluentd : 本体
  • /usr/lib64/fluent/ruby/bin/fluent-gem : pluginインストールしたり本体更新したり
  • /usr/lib64/fluent/ruby/bin/fluent-cat : fluentdに直接メッセージを送れる。デ
  • 送受信がうまくいっているかテスト
    • 送信側
      1. echo '{"key":"message"}' | /usr/lib64/fluent/ruby/bin/fluent-cat debug.tag -h revice-td-agent-host
    • 受信側
      1. tail -f /var/log/td-agent/td-agent.log

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)