Closed7
[キャッチアップ] fluentd
概要
- fluentd に関する自分用の調査メモ
Fluentd ってそもそもなにか
- 読み方は フルエントディー
- 様々なデータの収集を統一できるOSSのデータコレクタ
- 主にログファイルなど、個々のシステムから生成されるデータを集約、解析し、S3などのストレージへの保存を行うツール
Fluentd ってどういう用途で使うのよ
fluentd は、入力イベントの受け取り方法や出力方法を、全てプラグインとして実装されているため、プラグインさえあれば、システムの垣根を超え、あらゆる形式のログを集約し、任意の出力を行うことができる。
そのため、多種多様なシステムから吐き出される、異なるフォーマットのログを一元管理し、統一された出力を行うとった用途での使用が考えられる。
Fluentd 自体はどんな形式でログを管理してるのよ
まず、ログの種類を「タグ」と呼ばれる階層構造で表現する。階層は3層以上の多階層も可能
<親タグ>.<子タグ>.<孫タグ>
ログの内容は JSON 形式になっているため、アプリケーション側でのパースも容易になっている
{
"ip_address" : "127.0.0.1",
"request_uri": "/api/users"
}
Fluentd ってどうやって使うのよ
いろんな導入方法があるけど、パッケージマネージャで td-agent
をインストールして、systemd
や init.d
で、デーモン化するのが一般的
Debian/Ubuntu の場合
Install by DEB Package (Debian/Ubuntu)
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にクローズされました