Closed7

[キャッチアップ] fluentd

shingo.sasakishingo.sasaki

Fluentd ってそもそもなにか

  • 読み方は フルエントディー
  • 様々なデータの収集を統一できるOSSのデータコレクタ
  • 主にログファイルなど、個々のシステムから生成されるデータを集約、解析し、S3などのストレージへの保存を行うツール
shingo.sasakishingo.sasaki

Fluentd ってどういう用途で使うのよ

fluentd は、入力イベントの受け取り方法や出力方法を、全てプラグインとして実装されているため、プラグインさえあれば、システムの垣根を超え、あらゆる形式のログを集約し、任意の出力を行うことができる。

そのため、多種多様なシステムから吐き出される、異なるフォーマットのログを一元管理し、統一された出力を行うとった用途での使用が考えられる。

shingo.sasakishingo.sasaki

Fluentd 自体はどんな形式でログを管理してるのよ

まず、ログの種類を「タグ」と呼ばれる階層構造で表現する。階層は3層以上の多階層も可能

<親タグ>.<子タグ>.<孫タグ>

ログの内容は JSON 形式になっているため、アプリケーション側でのパースも容易になっている

{
  "ip_address" : "127.0.0.1",
  "request_uri": "/api/users"
}
shingo.sasakishingo.sasaki

Fluentd ってどうやって使うのよ

いろんな導入方法があるけど、パッケージマネージャで td-agent をインストールして、systemdinit.d で、デーモン化するのが一般的

Debian/Ubuntu の場合
Install by DEB Package (Debian/Ubuntu)

shingo.sasakishingo.sasaki

Fluentd の設定はどうするの

fluentd は /etc/td-agent/td-agnet.conf とかに記述されてる以下みたいな設定に基づいて動作する

# http://this.host:9880/myapp.access?json={"event":"data"}
<source>
  @type http
  port 9880
</source>

<filter myapp.access>
  @type record_transformer
  <record>
    host_param "#{Socket.gethostname}"
  </record>
</filter>

<match myapp.access>
  @type file
  path /var/log/fluent/access
</match>

設定に使えるディレクティブは6種類

  • source: ログを生成するソースの定義
  • match: タグごとの出力方法の定義
  • filter: 入力と出力の間に、任意の加工を行う
  • system: fluentd 全体の設定を定義(ログレベルなど)
  • label: 共通の設定をグルーピングするためのラベル
  • @include: 他の設定ファイルを参照する
このスクラップは2021/05/23にクローズされました