要旨(「BOOK」データベースより)
多種多様なログ処理のための拡張性と信頼性。開発者自らによる、設定・運用・拡張手法の集大成。
目次
▲
【凡例】
□章
▼節番号
#節
##項
###目
#### コラム
▲
### はじめに
### 謝辞
### 本書の読み進め方
### 本書の前提知識
### 対象バージョン
### 動作環境
### サポートページ
□第1章:Fluentdとは何か
▼1.1
# Fluentd ── 統合ログ基盤のためのデータ収集ツール
▼1.2
# ログとは何か
## ログの種類
### システムログ ── コンピュータシステムの状況を記録する
### アクセスログ ── Webサービスへのリクエストを記録する
### アプリケーションログ ── コンピュータシステムで稼働するアプリケーションの挙動を記録する
### 操作ログや行動ログ、IoTのログ ── より詳細にユーザーの挙動を記録する
## 大規模データ処理の時代の到来
### データ量とユースケースの急激な増大
### 大規模データ処理のためのソフトウェアの登場
▼1.3
# Fluentdの特徴
## 柔軟なデータ配送 ── 入力元と出力先を自由に組み合わせる
### 直接のデータ入出力
### データ転送を挟んだ入出力
## 構造化データ ── 扱う情報すべてに意味を持たせる
## 豊富なプラグイン ── 多様な入出力と実行環境をサポートする
### Fluentd登場以前の問題点
### Fluentdによる解決
### 公開プラグインのユーザー間での共有
## 出力の並列化と再実行のしくみの提供 ── プラグインの実装を簡単にして開発を支援する
▼1.4
# Fluentdのデータ処理方式
## バッチ処理の問題点
### データがまとまってから転送する
### データがまとまってから処理する
## ストリーム処理による解決
### データを即座に転送する
### データを即座に処理する
## Fluentdで扱えるデータ
▼1.5
# Fluentdのユースケース
## ログ検索をすばやく実行
## ログ集計によるモニタリングと通知の自動化
## リアルタイムな状況分析
## Fluentdを使用すべきでないケース
▼1.6
# Fluentdのコア機能
## ルーティング ── 行き先を制御する
## バッファリング ── データを一時的に保存してまとめる
## リトライ ── 失敗した処理をやりなおす
## プラグイン機構 ── さまざまな機能を入れ替え可能にする
▼1.7
# Fluentdのデータ配送方式
## at most once ── 何もなければ成功とする
### 採用するべきユースケース
## at least once ── 成功したと返事がなければ失敗とする
### 採用するべきユースケース
#### コラム:Fluentdでは未実装のexactly once ── 正確に1回だけ転送する
▼1.8
# Fluentdのバージョン
▼1.9
# 本書の構成
▼1.10
# まとめ
□第2章:Fluentdのインストール
▼2.1
# Fluentdの動作環境
## Fluentdに必要なホスト性能
▼2.2
# インストール前の準備
## 時刻の同期の設定 ── NTPを用いて時刻を合わせる
## システムリソース制限の変更 ── 多数のファイルを扱えるようにする
### ファイルディスクリプタの設定
### ネットワーク関連の設定
## 実行内容の検討
▼2.3
# インストール方法の選択
## パッケージを用いたインストール
### td-agent ── 歴史と実績の安定版
### calyptia-fluentd ── 新世代の安定版
## パッケージを用いないインストール
### gem ── 手元環境でのFluentd利用に
### ソースコード ── Fluentd本体の開発に
▼2.4
# パッケージを用いたインストール
## rpmパッケージ ── Red Hat Enterprise Linux、Amazon Linuxなど
### td-agentのインストール
### calyptia-fluentdのインストール
### 設定ファイルの場所
### 起動/停止方法
## debパッケージ ── Ubuntu、Debian GNU/Linuxなど
### td-agentのインストール
### calyptia-fluentdのインストール
### 設定ファイルの場所
### 起動/停止方法
## msiパッケージ ── Windows
### td-agentのインストール
### calyptia-fluentdのインストール
### 設定ファイルの場所
### 起動/停止方法
▼2.5
# パッケージを用いないインストール
## gem ── 手元環境でのFluentd利用に
### Fluentdのインストール
### 設定ファイルの場所
### 起動/停止方法
## ソースコード ── Fluentd本体の開発に
### Fluentdのインストール
### 設定ファイルの場所
### 起動/停止方法
▼2.6
# まとめ
□第3章:Fluentdのシステム設定
▼3.1
# Fluentdのシステム設定 ── Fluentdそのものの挙動を指定する
## 動作方法関連のパラメータ
### process_nameパラメータ ── プロセス名を指定する
### workersパラメータ ── ワーカー数を指定する
### without_sourceパラメータ ── Inputプラグインなしで起動する
### enable_msgpack_time_supportパラメータ ── Timeオブジェクトを処理可能にする
### strict_config_valueパラメータ ── パラメータ型のチェックを厳密に行う
### restart_worker_intervalパラメータ ── ワーカープロセス再起動時に待ち時間を持つ
### disable_shared_socketパラメータ ── プロセス間共有ソケットを使用しない
## ファイルシステム関連のパラメータ
### root_dirパラメータ ── プラグイン用ディスクスペースを指定する
### file_permissionパラメータ ── ファイル作成時のデフォルトパーミッションを指定する
### dir_permissionパラメータ ── ディレクトリ作成時のデフォルトパーミッションを指定する
## ログ出力関連のパラメータ
### log_levelパラメータ ── Fluentd全体のログレベルを指定する
### suppress_config_dumpパラメータ ── ログへの設定ダンプを出力しない
### suppress_repeated_stacktraceパラメータ ── 連続した同一エラーのスタックトレースを出力しない
### log_event_verboseパラメータ ── 停止処理時にもログを出力する
### emit_error_log_intervalパラメータ ── Inputプラグインのemit失敗ログの出力を抑制する
### ignore_repeated_log_intervalパラメータ ── 連続して発生する同一ログの出力を抑制する
### ignore_same_log_intervalパラメータ ── 同一ログの出力を抑制する
## ログ出力関連の詳細パラメータ
### formatパラメータ ── ログの書式を指定する
### time_formatパラメータ ── ログの日時形式を指定する
### rotate_sizeパラメータ ── ログファイルのサイズ上限を指定する
### rotate_ageパラメータ ── 保持するログファイルの世代数を指定する
## RPC関連のパラメータ
### rpc_endpointパラメータ ── RPC操作用のエンドポイントを起動する
### enable_get_dumpパラメータ ── 設定ダンプを出力するRPCエンドポイントを有効化する
▼3.2
# Fluentdのコマンドラインオプション ── Fluentdをどのように起動するかを指定する
## 使用可能なコマンドラインオプション
## パッケージによるFluentdのコマンドラインオプション指定
### Linuxでの環境変数を用いた指定
### Windowsでのレジストリを用いた指定
▼3.3
# 設定変更の反映 ── 設定をFluentdに正しく読み込ませる
## 全体の再起動による反映
## 一部の再起動または再読み込みによる反映
### ワーカープロセスの再起動による反映
### ワーカープロセスからの設定再読み込みによる反映
▼3.4
# シグナル、RPCによるプロセス管理 ── 動作中のFluentdを操作する
▼3.5
# まとめ
□第4章:設定ファイルの書式と構造
▼4.1
# 設定の構成要素 ── リテラル、パラメータ、ディレクティブ
▼4.2
# リテラル ── 名前や値を表現する
## リテラルの構造 ── さまざまな文字列
## 空のリテラル ── 0文字の文字列
## シングルクオートによるリテラル ── 空白や改行を含む文字列
## ダブルクオートによるリテラル ── 特殊な処理が有効となる
### バックスラッシュによるエスケープ文字
### Ruby式の埋め込み
▼4.3
# コメント ── 動作に影響しない注釈を書く
▼4.4
# パラメータ ── 名前と型のある値の組み合わせを定義する
## パラメータの構造 ── 名前と値の型を持つ
### 名前 ── 何を設定するかを指定する
### 値の型 ── パラメータが受け取る値の型を指定する
## パラメータの型
### 整数型、浮動小数点数型 ── 数値を表現する
### サイズ型、時間型 ── 単位付き指定が可能な数値を表現する
### 真偽値型 ── trueかfalseのどちらかを表現する
### 文字列型 ── 文字の集合を表現する
### 列挙型 ── 既定の値のどれかを表現する
### 配列型 ── 複数の値を表現する
### ハッシュ型 ── 複数の名前と値のペアを表現する
### 正規表現型 ── 文字列のパターンを表現する
### レコードのキーを表すパラメータ
## パラメータのデフォルト値
▼4.5
# ディレクティブ ── 構造を決定する要素
## ディレクティブの構造 ── パラメータの集合をタグで囲む
### タグ ── ディレクティブの種類を定義する
### 引数 ── ディレクティブに情報を追加する
### パラメータ ── ディレクティブ単位で有効な設定を指定する
### セクション ── 設定値を与えられたディレクティブを表す
## 既定のディレクティブ ── Fluentd本体に必須の機能を実現する
### systemディレクティブ ── Fluentd全体を設定する
### workerディレクティブ ── 個別のワーカーを設定する
### sourceディレクティブ ── Inputプラグインを設定する
### matchディレクティブ ── Outputプラグインを設定する
### filterディレクティブ ── Filterプラグインを設定する
### labelディレクティブ ── ラベルの付いたイベントをルーティングする
### そのほかのディレクティブ ── プラグインに機能を提供する
▼4.6
# source、match、filterディレクティブの予約語パラメータ
## @typeパラメータ ── 使用するプラグイン名を指定する
## @idパラメータ ── プラグイン設定にIDを付けて判別可能にする
## @log_levelパラメータ ── プラグイン単位でログレベルを指定する
## @labelパラメータ ── イベントのルーティング制御用ラベルを指定する
▼4.7
# @include ── 設定ファイルにほかのファイルの記述を取り込む
## 各サーバへの共通設定の取り込み
## 各プラグインへの共通パラメータの取り込み
## URLを用いたHTTP経由での取り込み
▼4.8
# 設定ファイルの全体像
▼4.9
# まとめ
#### コラム:YAMLによる設定ファイル記述
□第5章:プラグインの基本
▼5.1
# Fluentdにおけるプラグイン ── Fluentdの主要な機能を実現する
▼5.2
# プラグインのライフサイクル ── 初期化から起動、停止、破棄まで
▼5.3
# プラグインの種類
## プラグイン名のルール ── 種類と名前の組み合わせからなる
## プラグインの機能による分類
### オーナープラグイン ── イベント処理の中心となるInput、Filter、Outputプラグイン
### オウンドプラグイン ── プラグインから使われるそのほかのプラグイン
## プラグインヘルパー ── プラグインに共通の機能を提供する
▼5.4
# プラグインのインストール
## RubyGemsによるインストール ── 公開されているプラグインをインストールする
## コマンドライン指定またはディレクトリ配置によるインストール ── 1ファイルだけのプラグインを読み込ませる
## Gemfileによる管理 ── 使用するプラグインとそのバージョンをまとめて指定する
▼5.5
# プラグイン探索のしくみ
## プラグインのファイル名のルール ── 種類のための接頭辞を持つ
## プラグイン探索の優先順位
▼5.6
# まとめ
□第6章:イベントデータ
▼6.1
# Fluentdにおけるイベント ── タグ、日時とレコードからなる
▼6.2
# イベントの構造
## タグ ── データの発生元や種類を表現する
### タグはドット区切りの文字列
### タグの設計方針
## 日時 ── データがいつ発生したかを示す
### ナノ秒精度による日時
### タイムゾーンへの配慮の必要性
## レコード ── 伝達すべきデータの内容そのもの
### キーと値のペアの集合によるデータ表現
### レコードの大きさの制約
▼6.3
# イベントの流れ
## イベントの基本的な流れ ── Inputプラグインにより入力され、Outputプラグインにより出力される
### Inputプラグインによるイベントの生成
### Routerによるイベントのルーティング
### ラベルを用いたイベント処理内容の定義
### Filterプラグインによるイベントの処理
### Outputプラグインによるイベントの出力
## そのほかのイベントの流れ
### Outputプラグインによる例外的なイベント生成
### エラーストリーム ── 正常に処理できないイベントの行き先
### ログストリーム ── Fluentd自身のログもイベントとして扱う
▼6.4
# プラグインによるデータ処理
## データの入力と取り込みに関わるプラグイン
### Inputプラグイン ── データを入力する
### Parserプラグイン ── テキストデータを解析する
### extractプラグインヘルパー ── タグや日時をレコードから抽出する
## データの書式と出力に関わるプラグイン
### Outputプラグイン ── データを出力する
### Formatterプ
内容紹介
本書は、Fluentdについて網羅的に解説した書籍です。
Fluentdは、ログやそのほかのデータの収集および集約、転送、変換、保存を実現するためのソフトウェアです。すでに多くのユーザーに利用されているほか、Kubernetes環境におけるデファクトスタンダードなログ収集方法として扱われています。そのため、AWS、GCPおよびAzureといったクラウド環境においても標準的なツールとして使われています。
本書は、Fluentdがデータをどのように処理しているかから、内部構造やプラグイン機構の詳細、プラグインの開発方法までを網羅的に記述しています。筆者はFluentdの初期からのユーザーであり、Fluentdの主開発者の一人でもあるため、ユーザーとして必要な事項を開発者の視点から解説できているはずです。
著者紹介(「BOOK著者紹介情報」より)(本データはこの書籍が刊行された当時に掲載されていたものです)
田籠 聡(タゴモリ サトシ)
プログラマーとしてlivedoor、LINE、Treasure Dataなどで働いたのち、現在は独立してサービス開発や技術顧問などを行う。データ分析基盤関連のほか、WebアプリケーションやITインフラなどの技術にも携わる。ほかにISUCONの発案と発起など。Fluentdを含む多数のOSSプロジェクトのコミッター、メンテナー
著者について
田籠 聡 (タゴモリ サトシ)
田籠 聡(たごもり さとし)
プログラマーとしてlivedoor、LINE、Treasure Dataなどで働いたのち、現在は独立してサービス開発や技術顧問などを行う。データ分析基盤関連のほか、WebアプリケーションやITインフラなどの技術にも携わる。ほかにISUCONの発案と発起など。Fluentdを含む多数のOSSプロジェクトのコミッター、メンテナー。
Twitter:@tagomoris
GitHub:tagomoris