【レビュー】Fluentd実践入門 ── 統合ログ基盤のためのデータ収集ツール


【PR】この記事には広告を含む場合があります
  • 出版情報
  • ・著者:田籠聡/著
  • ・出版日:20221008
  • ・ページ数:544P
  • レビュー数
  • ・週間:0記事
  • ・月間:0記事
  • ・年間:1記事
  • ・全期間:1記事

ジャンルTop10選

目次


【凡例】
□章
▼節番号
#節
##項
###目
#### コラム


### はじめに
### 謝辞
### 本書の読み進め方
### 本書の前提知識
### 対象バージョン
### 動作環境
### サポートページ

□第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プラグイン ── データの書式を変更する
### injectプラグインヘルパー ── タグや日時をレコードに注入する
## データの処理を行うプラグイン
### Filterプラグイン ── データの除去や付加、変更を行う
▼6.5
# Fluentdのプロセスとイベント処理
## Fluentdのプロセス構成 ── スーパーバイザーとワーカー
### プロセス管理を行うスーパーバイザープロセス
### データ処理を行うワーカープロセス
## 実行プロセス名の変更
## 複数ワーカー ── 複数プロセスの利用により処理性能を引き上げる
### 複数ワーカーによるデータ処理
### プラグインごとの複数ワーカー対応
### 複数ワーカー動作に非対応のプラグインの使用
▼6.6
# MessagePack ── Fluentdが使用するイベントデータ表現方法
## 効率的なデータ表現の必要性
### バッファリングのための高いデータ読み書き性能
### ネットワーク転送に伴う高効率なデータ変換
## 一般的な手法であるJSONの問題点 ── 低いサイズ効率
## MessagePackによる解決 ── バイナリによる効率的なデータ表現
▼6.7
# まとめ

□第7章:プラグインごとの役割
▼7.1
# さまざまな種類のプラグイン
▼7.2
# Inputプラグイン ── データの入力を担当する
## Inputプラグインが実行する処理
## Inputプラグインによるイベント生成
### タグの付与
### 日時の生成
### レコードの生成
## @labelパラメータによるルーティング先の決定
## イベント生成を行う複数のemitメソッドと性能特性
▼7.3
# Filterプラグイン ── InputプラグインとOutputプラグインの間でデータを加工する
## Filterプラグインが実行する処理
▼7.4
# Outputプラグイン ── データの出力を担当する
## Outputプラグインが実行する処理
## バッファリングの有無
### バッファリングを行わない非バッファOutputプラグイン
### バッファリングを行うバッファOutputプラグイン
## スレッド ── 出力処理を入力から分離し、並列化する
### スレッド設定の考え方
## バッファチャンク ── チャンクキーごとにデータをまとめる
### チャンクキーの省略 ── 全データがまとめて書かれる
### キャンクキーへのタグや日時の指定 ── 同じタグや時間でまとめる
### 複雑なチャンクキーの指定
## プレースホルダ展開 ── チャンクキーの情報を出力にも用いる
### 日時のためのプレースホルダ
### タグやレコード中の値のためのプレースホルダ
### そのほかの特殊なプレースホルダと組み合わせ
## flushパラメータとチャンクサイズ ── データ出力の粒度と頻度を制御する
### flush_modeパラメータによる詳細な出力の制御
## flush_threadパラメータ群 ── データ出力の頻度と並列度を制御する
### flush_thread_countパラメータ ── 出力の並列数を指定する
### flush_thread_intervalパラメータ ── 出力処理の間隔を指定する
### flush_thread_burst_intervalパラメータ ── 連続したデータ出力を抑止する
### flush_threadパラメータ群の関係
## retryパラメータ ── 出力処理のリトライを制御する
### exponential_backoff ── 標準のリトライ方法
### periodic ── よりわかりやすいリトライ方法
### リトライ設定における注意点
### リトライがいつまでも成功しない場合の処理
## Secondary Output ── 回復不能なエラーに対処する
### Outputプラグインが出力に失敗し続ける場合のための機能
### 出力失敗時の最後の手段として使用
## Multi Outputプラグイン ── 複数のOutputプラグインへ出力する特殊なOutputプラグイン
### out_copyとout_roundrobinプラグインに見るMulti Outputプラグインの典型例
▼7.5
# Bufferプラグイン ── データのバッファリング機構をOutputプラグインに提供する
## Bufferプラグインが実行する処理
## 2つのBufferプラグイン ── 保存場所としてメモリかファイルかを選択する
### memory ── メモリ空間にデータを保存する
### file ── 指定したパスのファイルにデータを保存する
### memoryとfileの選択基準
### fileに特有の注意点
## flush_at_shutdownパラメータ ── Fluentd停止時にデータを出力する
## チャンクサイズの制御
### チャンクサイズのレコード数による制御
## バッファ総容量の制御
### バッファ総容量を使い切った場合の処理
### 圧縮オプションによるバッファ使用容量の削減
▼7.6
# Parserプラグイン ── データを解析する
## Parserプラグインが実行する処理
## Parserによる日時解析
## Parserによる型変換
## Parserが空だと判断する値の指定
▼7.7
# Formatterプラグイン ── イベントをテキストデータに整形する
## Formatterプラグインが実行する処理
## Formatterによる日時変換
▼7.8
# Storageプラグイン ── プラグインのための保存機能を提供する
## Storageプラグインが実行する処理
▼7.9
# Service Discoveryプラグイン ── 連携先サービスを管理する
## Service Discoveryプラグインが実行する処理
▼7.10
# まとめ

□第8章:組込みプラグイン
▼8.1
# さまざまな組込みプラグイン
▼8.2
# in_tailプラグインとParserプラグイン ── テキストファイルからデータを読み込む
## ログの読み込み設定
### 1行単位のログの読み込み
### 複数行からなるログの読み込み
### 長すぎる行の無視
## さまざまなファイルパス指定 ── 読み込み対象を柔軟に指定する
### ワイルドカードによる複数ファイルの並行読み込み
### 日時パターンによる日付などを含むファイル名ログの継続的な読み込み
### 複数ファイルを対象にしたファイルの先頭からの読み込み
## 読み込みの停止と再開
## ログローテーション時のin_tailプラグインの挙動
### ログローテーション後のもとのファイルの監視
### ログローテーション後の新規ファイル作成の検出
### ワイルドカード使用時のログローテーション
## アクセス権限のトラブル ── ファイルの読み込み権限と、再開位置に必要な書き込み権限
▼8.3
# out_fileプラグインとFormatterプラグイン ── データをテキストファイルに書き出す
## 書き出し単位およびデータ形式の指定
### タグや日時を含んだファイル名での書き出し
## ファイル単位での書き出しおよび追記
## 圧縮ファイルでの書き出し
## out_fileプラグインによる出力ファイルの外部からの監視
▼8.4
# in_forward/out_forwardプラグイン ── ネットワーク経由でデータを送受信する
## ホスト間でのデータのやりとり
## at least onceによる確実な送信
### at least onceでの通信パターン
### at least onceでのデータ送信のデメリット
## データ送信先の管理方法
### データ送信先の設定ファイルでの管理
### データ送信先のService Discoveryプラグインでの管理
### sd_fileプラグインによるService Discoveryプラグインの使用例
## 通信の暗号化 ── TLSによる暗号化通信でデータを送る
### 暗号化のためのサーバ証明書の準備
### 事前共有した証明書をCAとしてのサーバ証明書の生成
## 送受信の相手の相互認証
### 共有キーによる送受信相互の認証
### ユーザー名とパスワードによる送信者の認証
## キープアライブの利用 ── 確立した接続を再利用して接続負荷を削減する
## HeartbeatのUDP利用 ── 通信負荷を削減する
## 受信したデータの制御
### ラベルによる受信データ処理方法の制御
### 受信データのタグの変更
### 受信データへの送信元情報の追加
### 安全に扱えない受信データの無視
▼8.5
# out_copyプラグイン ── 複数のプラグインとの組み合わせでデータを別々に処理する
## ほかのOutputプラグインとの組み合わせ例
### out_stdoutプラグイン ── データの中身を確認する
### out_relabelプラグイン ── データを別のパイプラインへ分岐する
## copy_modeパラメータ ── 他プラグインの影響を排除する
### 単純なコピーによるレコードへの変更の回避
### 深いコピーによるレコードの値への変更の回避
## 出力エラーの扱いの変更 ── プラグインによる処理失敗を無視する
### ignore_errorオプション ── 特定プラグインでの失敗を無視する
### ignore_if_prev_successオプション ── 前プラグインが失敗したときに出力を実行する
▼8.6
# filter_grepプラグイン ── 正規表現を用いてデータを選別する
## 条件に合うイベントの選別
## 条件に合うイベントの除去
## 選別と除去、andとorを組み合わせた複雑な条件の記述
## 深い階層構造を持ったレコードの処理
▼8.7
# filter_parserプラグイン ── レコード内のデータをさらに解析する
## データの取り出し ── レコードの値に含まれる情報をレコードとする
## イベントの更新 ── レコードの値に含まれる情報をレコードに加える
## filter_record_transformerプラグイン ── 独自のルールやRubyコードを用いてさらに複雑な処理を実現する
▼8.8
# in_exec/out_execプラグイン ── 外部コマンドの実行によるデータの入出力
## in_execプラグイン ── コマンド実行結果を取り込む
### 起動後に継続的にデータを出力するコマンドの利用
### 定期的なコマンド実行からのデータ取り込み
## out_execプラグイン ── コマンド実行によりデータを出力する
### データ出力の実行時間の制御
▼8.9
# in_http/out_httpプラグイン ── HTTP通信によるデータの入出力
## HTTPリクエストによる外部からのデータ受信
### リクエストヘッダやクエリパラメータの値のレコードへの追加
### クロスオリジンリクエストの受信
### 任意の形式を用いたHTTPでのデータ受信
## HTTPリクエストとしての外部へのデータ送信
### 1つのJSONオブジェクトとしてのリクエストボディ
### Content-Typeや任意のリクエストヘッダの指定
### HTTPリクエストの失敗のコントロール
▼8.10
# まとめ

□第9章:本番環境における構成と運用
▼9.1
# 本番環境における難しさ
▼9.2
# データの収集と集約における戦略
## 規模の拡大と権限および認証情報管理の両立
## エージェント ── データ発生元からデータを読み込む
## 集約ノード ── エージェントからデータを集めて書き込む
### 集約ノードによる性能と運用性の向上
### 集約ノードの冗長化
## コンテナからのログ収集
### ファイルを経由したログ収集
### DockerのLogging Driverを経由したログ収集
### Fluentdをコンテナで動かしてのログ収集
▼9.3
# エージェントにおけるFluentd設定の注意点
## CPUやメモリなどのリソース消費の抑制
## エージェントのディスクスペースへの上限設定
### プラグインごとのバッファの最大使用サイズ
## ネットワークへの過負荷の防止
## Fluentdの停止順序制御 ── ログ出力元よりもあとにFluentdを停止する
▼9.4
# 集約ノードにおけるFluentd設定の注意点
## サーバ性能を活かせるようなパラメータ設定
## 集約ノードのディスクスペースの設計と制御
### 必要なローカルディスクの総容量を見積もる
### ディスク使用量を考えたパラメータ設定
## 常に余裕を持たせたネットワーク帯域
### 高スループットなデータ出力のための設定と設計
## 複数の集約ノードへの分散データ転送
### out_forwardプラグインによる分散データ転送
### 複数の集約ノードへのデータ転送におけるロードバランサの利用
### ロードバランサによる暗号化の組み合わせ
▼9.5
# コンテナにおけるFluentd設定の注意点
## ファイルの所有権とパーミッションの確認
## コンテナの終了順序の指定
## コンテナ外を利用したファイルバッファ
▼9.6
# バッファ管理のための設定とオプション
## flush_at_shutdownパラメータ ── 停止時にローカルストレージにファイルを残さない
## without-sourceコマンドラインオプション ── 残ったバッファを出力するためにFluentdを起動する
### サーバシャットダウン処理としてのバッファ出力用の起動
▼9.7
# 実運用のためのFluentdログ設定
## ログレベル変更によるFluentdログの制御
### Fluentd全体のログレベルの変更
### プラグイン単位のログレベルの変更
## 同内容のエラーログの出力量の制御
### 連続した同じスタックトレースの非表示化
### 一定時間内の同内容ログの非表示化
▼9.8
# Fluentdの監視
## in_monitor_agentプラグインによる監視
### 外部からの監視リクエストへの応答
### 外部への動作状況の報告
▼9.9
# 設定ファイルとプラグインの管理手法
## @includeによる設定ファイルの用途ごとの分割と共有
### 設定ファイルの読み込み順序の明示
## Gemfileによるプラグインの一括管理
## DockerによるFluentdとプラグイン、設定の一括管理
▼9.10
# まとめ

□第10章:プラグイン開発の基本
▼10.1
# プラグイン開発の必要性
▼10.2
# プラグイン開発チュートリアル ── 簡単なプラグインを書いてみる
## 最小限のプラグイン作成
### プラグインファイルの作成
### プラグインを使用する設定ファイルの作成
### 作成したプラグインの読み込みと起動
## 一定間隔でのレコード生成の実装
### プラグインヘルパーを用いた一定時間ごとの処理実行
### 変更した処理内容の確認
## パラメータによる設定の利用
### 文字列のためのパラメータ追加
### 追加したパラメータの設定ファイルにおける指定
## チュートリアルのふりかえり
▼10.3
# プラグイン開発の流れ
## プラグインのgemパッケージ化の考慮
## gemパッケージの初期作成
### fluent-plugin-generateコマンドによるファイル生成
### bundle gemコマンドによるファイル生成
## gemspecへのgem情報の記述
### プラグイン情報の編集
### 依存ライブラリの指定
## プラグインコードの記述
## テストの記述
### テストによるプラグインに期待する動作の明示
### テストの継続的な実行による挙動の確認
### 教材としての他プラグインのテストコード
## バージョン管理 ── バージョン番号を付けて更新する
### プラグインリリース時の初期バージョン
### プラグインをバージョン1.0にする時期
## リリース ── プラグインを必要な場所で動かせるようにする
### 非公開gemとする場合のリリース
### RubyGemsを通して公開する場合のリリース
### リリースはユーザーに対するコミュニケーション
▼10.4
# プラグイン共通の処理
## プラグインの設定パラメータ
## プラグインライフサイクル ── プラグイン起動時や停止時に処理を実行する
### 必要なライフサイクルの選択と実装
### ライフサイクルメソッドにおけるsuper呼び出し
## プラグインヘルパー ── Fluentdが用意する共通の機能を呼び出す
### プラグインヘルパーの使用宣言
### ライフサイクルメソッドにおけるsuper呼び出し
## プラグインIDの確認と利用 ── 動作中のプラグイン固有の情報を使う
## プラグインルートディレクトリ ── プラグインのためのファイル置き場を使う
### プラグインルートディレクトリ使用時の注意点
### Storageプラグインによるプラグインデータ保存の検討
## 複数ワーカー対応 ── 複数のFluentdプロセスでプラグインを動作させる
### 複数ワーカーに対応したプラグインの作成
### 設定による複数ワーカー対応の可否
## プラグインロガー ── プラグインの動作状況を記録する
### プラグインロガーの使用方法
### キーワード引数を用いた付加情報の付与
### ブロックを用いた付加情報の付与
### errorキーワードによる例外のロギング
### ログ出力の重要性
▼10.5
# まとめ

□第11章:プラグインの設定
▼11.1
# プラグインの設定方法 ── パラメータとセクションを使用する
▼11.2
# パラメータの定義と利用
## パラメータ ── 設定をオブジェクト化する
## config_paramメソッド ── パラメータを定義する
### パラメータの名前と型の指定
### パラメータのオプションの指定
### パラメータの値の利用
## パラメータの型
### integer、float ── 整数と浮動小数点数
### size、time ── 単位を指定できる数値
### bool ── 真か偽の値
### string ── 任意の文字列
### enum ── シンボルの選択肢
### array ── 値の配列
### hash ── キーと値のペア
### regexp ── 文字列のパターン
## 型破りなパラメータ ── 型のみでは定義できない設定値を使う
### 型を明示しないパラメータの定義と使用
### 困ったときの文字列パラメータ
## パラメータのオプション
### defaultオプション ── 無指定の場合のデフォルト値を指定する
### secretオプション ── 設定値をログに表示しないよう秘密にする
### param_nameオプション ── プラグインコード内では設定名と異なる名前を使う
### aliasオプション ── 設定ファイル内でのパラメータの別名を使えるようにする
### deprecatedオプション ── もう使用しないでほしいパラメータを示す
### obsoletedオプション ── パラメータを使用禁止だと宣言する
### descオプション ── パラメータの説明を記述する
## config_set_defaultメソッド ── デフォルト値を上書きする
### デフォルト値の上書きの利用ケース
▼11.3
# セクションの定義と利用
## セクション ── ディレクティブをオブジェクト化する
## config_sectionメソッド ── セクションを定義する
### セクションの名前とパラメータの指定
### セクションの引数の指定
### セクションオブジェクトの利用
## セクションのオプション
### requiredオプション ── 指定必須のセクションを作る
### multiオプション ── 同名セクションを複数指定可能にする
### initオプション ── 設定ファイルで指定されなくてもセクションオブジェクトを作る
### finalオプション ── セクション定義を上書き不可能にする
### param_nameオプション ── プラグインコード内では設定名と異なる名前を使う
### aliasオプション ── 設定ファイル内でのディレクティブの別名を使えるようにする
▼11.4
# プラグインによる設定の解析と利用
## configureメソッド ── プラグインを設定する
### プラグイン設定解析の詳細
### 設定値の追加チェックの実装
## 設定値を用いたプラグイン起動の準備
▼11.5
# まとめ

□第12章:プラグインごとの開発手順
▼12.1
# Inputプラグインの開発
## Inputプラグインの形式
## データの取り込み
### Routerを経由するデータ取り込み
### router.emitメソッドに渡すタグと日時、レコード
### 読み取ったデータの日時や種別の扱い
## 複数イベントの効率的なemit
### 同一タグのイベントに対するemit_arrayメソッドの使用
## Inputプラグインにおけるパターン
### 定期的な処理実行
### ネットワーク経由でのデータ受信
▼12.2
# Filterプラグインの開発
## Filterプラグインの形式
### 日時操作の有無による実装の違い
## イベント内容の変更 ── レコードや日時を更新する
### レコードの変更
### 日時の変更
## イベントの破棄 ── 特定の条件に合わせてイベントを破棄する
### 破棄されたイベントのエラーストリームへの出力
## Filterプラグインに期待しない処理
▼12.3
# Outputプラグインの開発
## Outputプラグインの形式
## Outputプラグインの動作モード
### バッファOutputプラグイン ── バッファにためたデータをまとめて外部に書き出す
### 非同期バッファOutputプラグイン ── まとめたデータ書き出しの結果を別途確認する
### 非バッファOutputプラグイン ── データが来たら即座に書き出す
## バッファOutputプラグインの実装
### バッファリングの単位となるバッファチャンク
### バッファチャンク内のデータ
### バッファチャンクに対して可能な操作
### バッファチャンクのメタデータの利用
### バッファチャンクのユニークIDを用いたデータ処理の追跡
### バッファチャンク単位での出力先の変更
### バッファチャンクのデータ形式変更
## 非同期バッファOutputプラグインの実装
### 非同期バッファのバッファチャンクの扱いは同期バッファと共通
### 出力時の書き出しごとのID付与
### 書き出し結果確認後のコミット
### 非同期バッファによる強固なデータ保護の実現
## 非バッファOutputプラグインの実装
### 自力での例外処理の実施
### 失敗を許容するケースでの利用
## Outputプラグインの動作モード決定ルール
## 正常に出力できないイベントのエラーストリームへの出力
▼12.4
# Parserプラグインの開発
## Parserプラグインの形式
## Parserプラグインによるデータからの複数のイベント取り出し
## Parserプラグインが共通で提供する機能
▼12.5
# Formatterプラグインの開発
## Formatterプラグインの形式
## Formatterプラグインが共通で提供する機能
▼12.6
# まとめ

□第13章:プラグインのテスト
▼13.1
# テスト記述の方法
## テストの流れ
### 最小限のテストコード記述
### テストの準備と実行
### 実行と修正の繰り返し
## テストコードの書き方
### 公開プラグインのテストの参照
▼13.2
# Inputプラグインのテスト
## イベント生成の正しい検証
### 動作検証前の特定の処理の実行
### プラグインの起動や停止処理の省略
## 入力イベントの検査に使用できるメソッド
### eventsメソッド ── イベントを返す
### record_countメソッド ── イベントの数を返す
### event_streamsメソッド ── イベントストリームを返す
### emit_countメソッド ── emitした回数を返す
▼13.3
# Filterプラグインのテスト
## イベントに対するフィルタ結果の検証
## Filterプラグインのテストにおけるタグの扱いの省略
▼13.4
# Outputプラグインのテスト
## モックを使った出力の検証
## 出力の検証方法を決めてからのテスト記述
▼13.5
# Parserプラグインのテスト
## 1回の呼び出しで複数レコードが返る場合の想定
▼13.6
# Formatterプラグインのテスト
▼13.7
# テスト記述のためのヘルパーメソッド
## event_timeメソッド ── 望みの日時オブジェクトを簡単に生成する
## with_timezoneメソッド ── タイムゾーンを変更する
## with_worker_configメソッド ── 複数ワーカーでの動作をシミュレートする
## capture_logメソッド ── プラグインからのログ出力を取得する
▼13.8
# まとめ

□第14章:プラグインヘルパー
▼14.1
# さまざまなプラグインヘルパー
▼14.2
# プラグインヘルパーの使用方法
## プラグインヘルパーの有効化 ── プラグインで使用する機能を宣言する
## プラグインヘルパーのメソッド呼び出し
## プラグインヘルパーメソッドの説明例
▼14.3
# timerプラグインヘルパー ── 一定時間ごとに処理を実行する
## timer_executeメソッド ── ブロック引数の処理を一定時間ごとに実行する
▼14.4
# child_processプラグインヘルパー ── 外部コマンドを子プロセスとして実行する
## child_process_exist?メソッド ── 子プロセスが実行中かどうかを返す
## child_process_executeメソッド ── 指定コマンドを子プロセスとして実行する
### 単純な外部コマンドの起動
### 起動した外部コマンドとの間での入出力
### 外部コマンドとの入出力におけるエンコーディング変換
### ブロック付き呼び出しとプロセスの終了
▼14.5
# serverプラグインヘルパー ── ネットワークサーバを作成する
## server_createメソッド ── ネットワークサーバを作成して起動する
### ユーザーが設定したプロトコルの使用
### コネクションを使用したメッセージ返信
### 複数ワーカー動作への対応
### UDPデータ送信に対する返信の受信
### システムに依存する低レベルオプション
## server_create_connectionメソッド ── コネクション確立を検出するサーバを作成する
### 確立した接続に対する操作
▼14.6
# http_serverプラグインヘルパー ── HTTPサーバを作成する
## http_server_create_http_serverメソッド ── HTTPサーバを作成して起動する
### リクエストパスごとの処理の記述
### デフォルトの処理
## http_server_create_https_serverメソッド ── HTTPSサーバを作成して起動する
▼14.7
# threadプラグインヘルパー ── スレッドを作成する
## thread_createメソッド ── スレッドを作成して開始する
## thread_current_running?メソッド ── 現在のスレッドが実行中状態かどうかを返す
## thread_wait_until_startメソッド ── すべてのスレッドが実行中になるまで待つ
## thread_wait_until_stopメソッド ── すべてのスレッドが停止するまで待つ
▼14.8
# socketプラグインヘルパー ── ソケットを作成する
## socket_create_tcpメソッド ── TCPソケットを作成して接続する
## socket_create_udpメソッド ── UDPソケットを作成する
## socket_create_tlsメソッド ── TLSソケットを作成して接続する
## socket_createメソッド ── 指定プロトコルでソケットを作成する
▼14.9
# injectプラグインヘルパー ── タグや日時などを注入する
## inject_values_to_recordメソッド ── タグや日時などをレコードに注入する
## inject_values_to_event_streamメソッド ── タグや日時などをイベントストリームに注入する
▼14.10
# extractプラグインヘルパー ── レコードからタグや日時を取り出す
## extract_tag_from_recordメソッド ── レコードからタグを取り出す
## extract_time_from_recordメソッド ── レコードから日時を取り出す
▼14.11
# formatterプラグインヘルパー ── データ文字列のためFormatterプラグインを作成する
## formatter_createメソッド ── Formatterプラグインを作成する
### プラグインによるFormatterプラグインのデフォルト指定
### 用途ごとに異なる複数のFormatterプラグインの作成
### 作成したプラグインの利用
▼14.12
# parserプラグインヘルパー ── 文字列を解析してデータを得るためParserプラグインを作成する
## parser_createメソッド ── Parserプラグインを作成する
### プラグインによるParserプラグインのデフォルト指定
### Parserプラグインのブロック付き呼び出し
▼14.13
# record_accessorプラグインヘルパー ── 複雑な構造のレコードにアクセスする
## record_accessor_createメソッド ── 指定要素へのアクセサオブジェクトを作成する
▼14.14
# storageプラグインヘルパー ── プラグインから使用可能なストレージを提供する
## storage_createメソッド ── Storageプラグインを作成する
### ストレージに対するデータ操作
▼14.15
# service_discoveryプラグインヘルパー ── サービスの情報をプラグインに対して提供する
## service_discovery_configureメソッド ── Service Discoveryプラグインのセットアップを行う
### 専用のディレクティブに設定された情報の参照
### 固定リストの専用ディレクティブによる指定
### サービスオブジェクトのプラグイン側オブジェクトへの変換
### サービスの選択方法の制御
## service_discovery_select_serviceメソッド ── 利用可能サービスを1つ選択する
## service_discovery_servicesメソッド ── 利用可能サービスをすべて返す
## service_discovery_rebalanceメソッド ── サービスのリバランスを行う
▼14.16
# counterプラグインヘルパー ── 内部用カウンタを提供する
## Counter API ── Fluentdプロセス間で共有されたカウンタの操作
### カウンタによる数値の保存
### クライアントを経由したカウンタ操作
### Counter API有効化に必要な設定
## counter_client_createメソッド ── Counter APIクライアントを作成する
### カウンタ操作の同期実行と非同期実行
### カウンタの初期化
### カウンタの取得
### カウンタの増加
### カウンタのリセット
### カウンタの削除
▼14.17
# event_emitterプラグインヘルパー ── プラグインからイベントを入力する
## routerメソッド ── Routerを返す
▼14.18
# まとめ

□第15章:Fluentdの通信プロトコル
▼15.1
# ネットワーク通信プロトコルの重要性
▼15.2
# Fluentd forward protocol v1の概要 ── 通信路とデータ表現
## プロトコルのバージョン
## TCPまたはTLSを用いた通信
## MessagePackによるデータ表現
## データ転送のためのモード
### Messageモード ── 一度に1イベントのみを送る
### Forwardモード ── 複数のイベントをまとめて送る
### PackedForwardモード ── 処理効率の良いデータ表現を用いて送る
### CompressedPackedForwardモード ── 圧縮済みのデータを送る
## 日時の表現
### ナノ秒精度の値を用いたFluentdの日時
### 2つの整数を組み合わせた日時表現
## 通信オプション
### sizeオプション ── データがいくつイベントを保持するか示す
### chunkオプション ── データ送信に対してACKを要求する
### compressedオプション ── データの圧縮形式を指定する
▼15.3
# Heartbeatを用いた死活監視 ── データ送信先が正常か確認する
## FluentdにおけるHeartbeat
## in_forward/out_forwardプラグインにおける実際の死活監視
▼15.4
# ACK ── データを受信したことを送信元に通知する
## ACKを要求するデータ転送
## ACK要求された場合のレスポンス
▼15.5
# 認証 ── 送信元あるいは送信先は正しいかを確認する
## データ送信前の認証作業
### 共有キーによるサーバとクライアントの相互認証
### ユーザー名とパスワードによるクライアント認証
## サーバのHELOメッセージ ── 認証処理に必要な情報を伝える
### 通常の場合
### クライアント認証を要求する場合
## クライアントのPINGメッセージ ── クライアントから認証情報を送る
## サーバのPONGメッセージ ── 認証結果とサーバからの認証情報を返す
▼15.6
# TLSによる暗号化通信 ── 送信データを暗号化により守る
## TLSのメリットとデメリット
## TLSのデメリットを緩和するキープアライブ
▼15.7
# まとめ

### あとがき
### 索引
### 著者プロフィール

概要

本書は、Fluentdについて網羅的に解説した書籍です。

Fluentdは、ログやそのほかのデータの収集および集約、転送、変換、保存を実現するためのソフトウェアです。すでに多くのユーザーに利用されているほか、Kubernetes環境におけるデファクトスタンダードなログ収集方法として扱われています。そのため、AWS、GCPおよびAzureといったクラウド環境においても標準的なツールとして使われています。

本書は、Fluentdがデータをどのように処理しているかから、内部構造やプラグイン機構の詳細、プラグインの開発方法までを網羅的に記述しています。筆者はFluentdの初期からのユーザーであり、Fluentdの主開発者の一人でもあるため、ユーザーとして必要な事項を開発者の視点から解説できているはずです。

レビューの一覧

 ・【AWS】さいきょうの運用・監視構成を作成するのに参考になった書籍[2023-02-27に投稿]


amazonで確認