fluentdを利用してJournaldのログを取得する方法

schedule 2018/03/30  refresh 2023/11/09

 

 

こんにちは、セシオスサポートチームです。

 

弊社では福利厚生の一環で一ヶ月に一回程度、フットサル大会を実施しています。

短い時間ではありますが、デスクワークで凝り固まった思考や体をほぐすのにはうってつけです。全員が全力で動きまわるためか、メンバーの何名かは翌日の筋肉痛がつらいそうです。
今はまだチームに分かれてミニゲームを楽しむ程度ですが、ゆくゆくは得点の集計やMVPの表彰などなどやりたいことがあったりなかったりします。
何かをするためにもとりあえず記録して残しておくだけでも後々何かに使えるかもしれません。

 

けれど集めた記録の集計や解析は面倒なことも多く管理も大変です。実業務でも実行結果をログとして残しておく場合、収集方法や管理・運用でとても大変です。

 

そんなデータを収集、利用するためのツールにFluentdというオープンソースがあります。

 

データの収集や使用を統一化し、管理を楽にしてくれるツールだそうです。プラグインも多く存在しておりカスタマイズしやすく大変便利なんだそうです。


今回はそんなfluentdの導入手順を取りまとめてみました。
これから導入を検討されている皆様のご参考になれば幸いです。

 

 

やること

fluentdの導入手順のご紹介 ※Version1.0(td-agent3)
Journaldで取得しているログをfluentdで取得、表示するまでの手順をまとめてあります。

 

 

環境

CentOS 7.4 ※仮想マシン

 

 

手順

 

1. 導入

 

公式サイトには様々なインストール手段が紹介されています。
今回はFluentdの安定板パッケージであるtd-agentを利用します。

# curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh

 

無事インストールが完了したら早速動作確認をします。

# systemctl start td-agent

 

デーモンが起動しているか確認

# systemctl status td-agent

 

導入したtd-agentにはあらかじめ動作確認用の設定が組み込まれています。
今回はそれを使って導入確認をします。

# curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

 

サンプルコードを実行するとtd-agentのログファイルにレコードが出力されます。

# tailf /var/log/td-agent/td-agent.log

 

 

2. プラグインの導入準備

導入した素のtd-agentの設定ファイルを編集します。
ユーザとグループをrootに変更しておきます。

 

/usr/lib/systemd/system/td-agent.service

・・・
[Service]
User=root
Group=root
・・・

 

設定ファイルを修正したのでdaemonをリロードします。

# systemctl daemon-reload

 

プラグインの導入にはGCCをインストールする必要があります。

# yum install gcc

 

 

3. プラグインのインストール

journaldから必要なログを収集、分類しているのでそれに合わせて必要なプラグインを導入します。

# /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-systemd -v 0.3.1

このプラグインでjournaldを直接参照することができるようになります。

 

 

4. configファイルの調整

取得部分にjournaldからデータを取得しているように記述します。

 

/etc/td-agent/td-agent.conf

<source>
@type systemd
    tag journald.log
    path /var/run/log/journald
    read_from_head false
    <storage>
       @type local
        persistent false
        path journald.pos
    </storage>
    <entry>
        field_map {"MESSAGE": "log", "_PID": ["process", "pid"], "_CMDLINE": "process", "_COMM": "cmd"}
        fields_strip_underscores true
        fields_lowercase true
    </entry>
</source>
<match journald.log>
    @type stdout
</match>

 

 

5. 動作確認

td-agentをリスタートして動作確認

# systemctl restart td-agent

 

確認用データを投入してtd-agentがログを取得できるかを確認します。

# logger test

 
journaldから取得したログは自Json形式に変換されて出力されます。
以上が導入までの手順になります。

 

 

さいごに

今回はデータの取得部分にパッケージを導入しましたが、データ取得・出力部分にも様々なパッケージが存在します。
公式ページから導入可能なプラグインを確認できますのでいろいろ試してみてはいかがでしょうか。