Browse Tag: fluentd

td-agent のカスタムパッケージを作った

td-agent とても便利ですよね、fluentd をインストールするのに、もっとも手軽な方法だと思って、いつも愛用しています。

さて、fluentd のプラグインが増えていくると、特に複数台のサーバに導入するとき、けっこうな時間がかかって来ました。
せっかく、omnibus-td-agent が公開されているので、これをカスタマイズしてみました。

このカスタマイズでの、公式 omnibus-td-agent からの差分はこちらになりますが、おもに次のようなカスタマイズを行っています。

  • specific_install のインストール(たまに検証用に使ったり、rubygem にないものをどうしても使いたいとき)
  • fleuntd バージョンの固定(現行バージョンは 0.12.22  なので少し古いので、あとで更新しておきたいと思います)
  • 次のプラグインたちの同梱
    • dstat
    • datadog_event
    • dogstatsd
    • elasticsearch
    • file-alternative
    • filter_typecast
    • flowcounter
    • forest
    • grep
    • multiprocess
    • record-modifier
    • record-reformer
    • sampling-filter
    • typecast
    • map(公式では label 対応していないため、独自に拡張したものを利用)
    • dogapi gem

この変更で独自に拡張したい場合は、plugin_gems.rb に追加したいプラグインを設定することで、それらのプラグインを含めたパッケージを作ることができます。

あとは、Vagrant 上でビルドして、自身の Yum リポジトリに追加して、インストールするだけです。

この変更で、自分が使っているプラグインを含めた td-agent の配布がとても簡単になりました。

Fluentd s3 + ローカルファイルに出力する設定の紹介

このエントリは、Fluentd Advent Calendar 2015 – Qiita の 4 日目のエントリです。当日、勝手にエントリしています。

今日は、最近実施した非常によくある構成 Fluend 経由で s3 + ローカルファイルに出力する設定を本番環境(※ただし、正式本番稼働前)で設定したので、どこにもある情報ですが、一緒に設定された設定ファイルの例がなかなかなかったので紹介してみます。

OS は、CentOS 7 になります。td-agent は、公式の方でインストール します。

やりたいことしては、S3 のバケット上に、「YYYY/MM/DD/HH/タグ1_タグ2」ファイルとして出力して、ローカルファイルにも同じディレクトリ構成のファイルで、同時出力することになります。

まず、設定ファイルですが、次のようになりました。

<source>
  type forward
  bind 127.0.0.1
  port 24224
</source>

<match hoge.**>
  type copy

  <store>
    type forest
    subtype s3
    <template>
      id hoge-s3-${tag_parts[1]}
      path ${tag_parts[1]}/

      aws_key_id <AWS_ACCESS_KEY_ID>
      aws_sec_key <AWS_SECRET_ACCESS_KEY>
      s3_bucket hoge-bucket
      s3_region <AWS_DEFAULT_REGION>
      format json
      s3_object_key_format %{path}%{time_slice}_%{index}.log
      store_as json

      time_slice_format %Y/%m/%d/%H/${tag_parts[1]}_%Y%m%d%H%M_${tag_parts[2]}
      flush_interval 60s
      flush_at_shutdown true

      buffer_type file
      buffer_path /var/log/td-agent/.s3-${tag_parts[1]}_%Y%m%d%H%M_${tag_parts[2]}.log
      buffer_chunk_limit 64m
      buffer_queue_limit 32

      num_threads 1
    </template>
  </store>

  <store>
    type forest
    subtype file_alternative
    <template>
      id hoge-file-${tag_parts[1]}
      path /var/log/td-agent/${tag_parts[1]}/%Y/%m/%d/%H/${tag_parts[1]}_%Y%m%d%H%M_${tag_parts[2]}.log
      symlink_path /var/log/td-agent.log
      dir_mode 0750

      time_slice_format %Y%m%d%H%M
      flush_interval 0s
      flush_at_shutdown true

      buffer_type file
      buffer_path /var/log/td-agent/.${tag_parts[1]}_%Y%m%d%H%M_${tag_parts[2]}.log
      buffer_chunk_limit 64m
      buffer_queue_limit 32

      num_threads 1
    </template>
  </store>
</match>

プラグインは、設定ファイルから分かるとおり、fluentd-plugin-forestfluent-plugin-file-alternative、が必要なので、td-agent-gem 経由でインストールしておきます。


$ sudo /opt/td-agent/usr/sbin/td-agent-gem install --no-ri --no-rdoc fluentd-plugin-forest fluent-plugin-file-alternative

ここでちょっとハマったのは、ローカルファイルへ出力する file_alternative の実際の出力ファイルが「/var/log/td-agent/.YYYY/MM/DD/HH/ファイル名」となってしまって、/var/log/td-agent 以下とみるとドットディレクトリとしてしまったところでした。上の設定で、正しくファイルが出力されています。

これから、この環境で本番稼働前のベンチマークを実施して、buffer まわりのパラメータ、thread の調整などを行ってみるつもりです。

今回、監視まわりは Datadog を使っているので、別のエントリーで紹介したいと思います。

[書評] サーバ/インフラエンジニア養成読本 ログ収集〜可視化編

大変遅くなりましたが、@yoshi_ken さんから、サーバ/インフラエンジニア養成読本 ログ収集〜可視化編を献本させていただきました。

この本は、Fluentd、Elasticsearch、Kibana、について現場での実際の使われ方などについて書かれたムック本になります。
Fluentd といえば、最近 Google の Kubernetes と Compute Engine の標準のログコレクタに採用されたことで有名ですよね。

この本は、大きく分けて特集4に別れていますので、それぞれの感想を書かせていただきます。

【特集1】

第一章 はじめに
この本の構成概要になります。

第二章 サービス改善に必要なこと
なぜ、サービス改善に「ログ」が必要なのか、コーヒーショップのエンジニアになった視点から書かれています。改めてサービス改善での「ログ」の重要性が分かるよう内容となっていました。

第三章 なぜ可視化なのか
「ログ」を分析し、意志決定するためになぜ可視化が必要なのかについて書かれている章でした。可視化、重要ですが、どのような可視化するか、状況によって大きく異なってくるので、自ら創り上げたいものです。

第四章 ログデータ入門
具体的なログデータとして、どのようなログデータがあるのか、第二章のコーヒーショップを例にとって説明されている章です。
ログデータも、ウェブサービスごとにまったく異なっているため、事前にサービスをリリースする前にどのようなログをとっておいたのかよいのか、すぐには使わない情報でも、将来的に必要となってくるログデータもあわせて、最初に整理しておくことの重要性に気がつかれます。
特にログは、実際にウェブサービスをリリースしたあと、既存のログを変更するのは、なかなか難しいことが多いので(※実際に個人的なにもこの事象に遭遇したことがあります)、事前のログの整理もウェブサービスの成功の一つになってくるのではないかと思います。

第五章 はじめての Fluentd、Elasticsearch、Kibana
実際に vagrant 経由で、Fluentd、Elasticsearch バージョン 1.2.1、Kibata バージョン 3.0.1、を動作させて、ログを流し込むまで、具体的なインストールの例が書かれています。最初に Fluentd、Elasticsearch、Kibana、をはじめるにはとても分かり記事でした。こちらにソースコードがありますので、参考にするといいでしょう。
ちなみに OS X の場合は、td-agent のセットアップは、Homebrew Cask 経由 brew cask info td-agent で簡単にセットアップできるのでお使い下さい。

第六章 Elasticsearch と Kibana を超えて
この章では、実際のウェブサービス「インターネット広告サービス」の実際のサービスを例にとった、とても実践的な解説で必読です。

第七章 まとめと参考文献
Fluentd、Elasticsearch、Kibana、をはじめるための参考文献の紹介です。

【特集2】

第一章 ログ収集の目的とミドルウェアの特徴
現在存在するさまざまなログ収集ソフトウェアの特徴について解説されている記事です。改めて、Fluentd との違いを知るにはよい記事です。

第二章 はじめてみよう Fluentd
特集1の第五章と少し内容が重複していますが、こちらは Fluentd にフォーカスしたアーキテクチャーの開設から始まり、インストール方法、さらに詳しい設定方法が解説されている記事です。特に設定が非常に詳しく解説されており、この記事を読めば、Fluentd の設定の詳細をよりよく理解できるでしょう。

第三章 Fluentd 設計のコツ
Fluentd を実際の環境で構築・運用するためのノードのデザインパターンについて解説されている記事です。自分でこれから Fluentd をあるウェブサービスに導入する場合、どのような Fluentd ノード構成にすればよいのか、それを指南してくれる記事です。

第四章 Fluentd 運用ノウハウ
Fleuntd 構築・導入したあとは、運用が必要となります。この章では、Fluentd の死活・リソース・性能監視の具体的な方法、ログの欠損を防ぐための具体的な工夫など、Fluentd を導入する上で具体的な解説がありますので、Fluentd ユーザは必読です。

第五章 逆引き Fluentd プラグイン
Fluentd には、さざまなプラグインがありますが、各カテゴリ別に各 Fluentd プラグインの解説がされている記事です。プラグインの逆引きリファレンスとして、とても参考になります。

【特集3】

第一章 データストア入門
データストアを格納するためのさまざまソフトウェアの解説記事です。

第二章 Elasticsearch の基礎
Kibana のバックエンドに Elasticsearch が採用されていますが、この Elasticsearch についての概要について解説記事です。Elasticsearch を実際に始める前に読んでおくと、よいでしょう。

第三章 Elasticsearch のはじめ方
Elasticsearch のインストール方法から、設定方法、そして実際の使い方(データの追加方法や検索方法)まで、詳しく解説されている記事です。この記事を読みながら実際に試せば Elasticsearch が分かる記事となっています。

第四章 運用 Tips
Elasticsearch クラスタを運用する上での Tips について書かれている記事です。個人的には、これから Elasticsearch クラスタを運用することになりそうなので、必読です。

第五章 インデックス管理ツールと激選プラグイン
Elasticsearch も Fluentd と同様にさまざまなプラグインがありますが、よく使われる・便利なプラグインについての解説記事です。

第六章 elasticsearch-hadoop
elasticsearch-hadoop という Hadoop クラスタと連携させるためのライブラリについての解説記事です。
Hadoop クラスタと連携できることは知らなかったので、とても参考になりました。

【特集4】

第一章 Kibana の基礎知識
Kibana の概要記事です。

第二章 インストールと設定
Kibana のインストール方法と設定方法です。この記事を読めば、Kibana を簡単にセットアップすることができそうです。

第三章 ダッシュボードとパネル操作
Kibana の Web GUI であるダッシュボードの操作方法についての解説記事です。Kibana の Web GUI は英語のため、日本語で解説されており、非常に分かりやすい記事です。

第四章 データのフィルタリング
Kibana をよりよく使いこなすには、データのフィルタリングを必須となりますが、フィルタリングをする方法について解説されている記事です。

第五章 基本的パネル
Kibana のさまざまな可視化としてのパネルについて解説されている記事です。

第六章 パネルのスタイルとダッシュボードの運用
パネルの表示方法についての解説です。

第七章 Fluentd によるデータ入力
fluentd-plugin-elasticsearch を使って、Elasticsearch にデータを投入する方法について解説されている記事です。

この本は、これから Fluentd、Elasticsearch、Kibana をはじめてみる人はおすすめの本です。Fluentd だけ使い方という人もとても参考になる本なので、まだ読んでいない人は要チェックな本です!

@yoshi_ken さん、ご献本、ありがとうございました!

サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
鈴木 健太 吉田 健太郎 大谷 純 道井 俊介
技術評論社
売り上げランキング: 17,280