このブログは、PlanetSide2から来てN高等学校に紛れ込んでいる株式会社Armorisのアルバイトseigo2016が書いています。
あるもりすぶろぐの内容は個人の意見です。
MattermostのログをKibanaで可視化する
今回のArmorisブログではMattermostと言われるSlackライクなチャットツールのログを収集し、Kibanaというツールを用いてIndex Patternを作成しログを可視化する方法を紹介します。
環境
syslogサーバー (ローカルIP: 172.20.100.37)
syslogサーバーとして以下の環境を使用しています。
name | version |
---|---|
Ubuntu | 20.04.2 LTS |
td-agent | 4.1.0 |
Elasticsearch | 7.11.1 |
Kibana | 7.11.2 |
Mattermostサーバー
今回収集するMattermostのログは以下のパスに保存されているものを使用します。
- Mattermost ログ
/opt/mattermost/logs/mattermost.log
name | version |
---|---|
Vagrant | (bento/ubuntu-20.04) |
td-agent | 4.1.0 |
mattermost | 5.32.1 |
1. syslogサーバーの環境構築
まずは今回のメインであるログを収集するためのソフトウェアであるtd-agent(fluentd)を公式のリファレンスに従ってインストールします。
公式ページによると、td-agentはfluentdの安定版とのことです。
以下公式ページより
td-agent is a stable distribution package of Fluentd.
以下のコマンドを使用してインストールスクリプトをダウンロードし実行します。
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-focal-td-agent4.sh | sh
fluentdからElasticsearchに流すためのプラグインをインストールします。
sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch
次に公式のリファレンスに従ってElasticserachをインストールします。
設定は/etc/elasticsearch/elasticsearch.yml
ファイルを編集します。
今回は同じサーバー上で動いているfluentdからしかログを受け取らないため、network.host
はデフォルトのlocalhostからリクエストを受け取る設定にします。
また、待ち受けるポートは9200になります。
network.host: _local_ http.port: 9200
Elasticserachの設定が完了したら公式のリファレンスに従ってKibanaをインストールします。
Kibanaの設定は/etc/kibana/kibana.yml
ファイルを編集します。
server.port: 5601 server.host: "172.20.100.37" elasticsearch.hosts: ["http://localhost:9200"]
2. Mattermostのログの収集
syslogサーバーの設定が完了したらMattermostのログ(今回の環境では/opt/mattermost/logs/mattermost.log
)をfluentdで読み込み後、syslogサーバーに転送するための設定を行います。
Mattermostのサーバーにもsyslogサーバーと同じ手順でtd-agentをインストールします。
td-agentがインストールできたらMattermostのログをsyslogサーバーに転送する設定をします。
読み込むログファイルのパスとして、/opt/mattermost/logs/mattermost.log
を指定し、管理しやすいようにタグをmattermost
に設定します。
最後に読み込んだログの位置を記録するファイル(pos_file
)も指定します。
次にmattermost
タグのついたイベントを、syslogサーバーで待ち構えているfluentdにforward
プラグインを使用して転送します。
<server>
ディレクトリ内に送信先のサーバーのipアドレスとポートを指定します。
@type forward send_timeout 60s host 172.20.100.37 port 24424
Mattermostサーバーからsyslogサーバーに転送したmattermost
タグが付いたイベントに対して処理を行います。
mattermost
タグのついているログに対して、filter
プラグインを使用してjsonフォーマットとしてパースし、ElasticsearchプラグインでElasticsearchに転送します。
syslogサーバーは24424ポートで待ち受けます。
mattermost
タグのついたイベントのmessage
キーをjsonログとしてパースします。
@type parser key_name message @type json
mattermost
タグのついたイベントをポート9200で待ち受けているElasticsearchに送信します。
logstash_format
とはログをlogstashのログ形式(logstash-%Y.%m.%d
)にフォーマットするかどうかを指定します。
logstash_prefix
はlogstash_format
のログ名部分を指定した名称にします。この場合はmattermost-%Y.%m.%d
のようになります。
@type elasticsearch host 127.0.0.1 port 9200 type_name mattermost logstash_format true logstash_prefix mattermost
3. Kibanaの設定
最後にKibanaでの設定を行います。
まずは下の画像のように左のメニュータブを開き、Stack Management
を選択してインデックスメニューを作成します。
次に、下の画像のように左のメニューからIndex Patterns
(画像の①)を選択し、Create index pattern
をクリック(画像の②)して作成画面に遷移します。
Index Pattern Nameには、収集したいログのtd-agent.conf
でlogstash_prefix
に設定した名前を指定します。
今回はIndex Nameがmattermost-%Y.%m.%d
という形式になるため、これにマッチさせる為に下の画像のようにmattermost-*
と指定しNext Step
をクリックします。
Time fieldは@timestamp
を指定して作成します。
以上の設定を行うと以下の画像のようなフィールド構造になります。
最後に正常に設定できているか確認します。
以下の画像のように左のメニューのAnalytics
欄のDiscover
をクリックすることで、収集されたログが表示されます。
最後に
今回はFluentdとElasticsearch、Kibanaを利用してログを収集する方法をご紹介しました。
複数のサーバーで運用しているサービスのログを一箇所で管理することでそれぞれのサーバーにログを見に行く手間が省け、調査が容易になる為とても便利だと思います。
管理対象のログが複数サービスでは無い場合でも、生のログファイルを見るよりもグラフ表示などにより格段に見やすく為是非試してみてください。