(仮)

アウトプットのれんしゅう

マイクラのログイン・ログアウトをLINEで通知する

イクラのマルチサーバーで、td-agentを使ってログイン・ログアウトを通知させます。


1. マイクラのマルチサーバーを立てる

Minecraft(マインクラフト)
Conohaで立てました。とりあえず2GBです。 マイクラのテンプレートがあるので構築が簡単です。

2. マイクラで遊ぶ

とりあえず遊びます。

3. LINE Notifyのアクセストークンを取得

LINE Notifyの右上からログインして「トークンを発行」からトークンを発行します。

4. マルチサーバーにrubyをインストール

conohaのサーバーにはrubyが入っていなかったので、インストールします。
rbenvでインストールしました。

$ yum install -y git gcc openssl-devel readline-devel zlib-devel
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ cd ~/.rbenv && src/configure && make -C src
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv versions
$ rbenv install 2.5.1
$ rbenv global 2.5.1
$ ruby -v

5. td-agentをインストール

gemでインストールします。 fluentd

fluent-plugin-line-notifyを使ってLINE通知をするのでインストールしておきます。

$ gem install fluentd --no-ri --no-rdoc
$ gem install fluent-plugin-line-notify

6. td-agentの設定・起動

td-agentの設定をします。

$ cd ~
$ fluentd --setup ./fluent

↑のコマンドを実行すると設定ファイル~/fluent/conf/fluent.confが作成されます。
作成された設定ファイル配下の内容に更新します。
(もともとある部分は削除してOK)

# match tag=system.** and forward to another fluent server
<match system.**>
  @type forward
  @id forward_output

  <server>
    host 192.168.0.11
  </server>
  <secondary>
    <server>
      host 192.168.0.12
    </server>
  </secondary>
</match>

<source>
  @type tail # pathで指定されたファイルを取得し続ける
  path /opt/minecraft_server/logs/latest.log # 取得するマイクラのログのパス
  format /^\[(?<time>.*)\]\s\[(?<caused_at>[^/]*)/(?<level>.*)\]:\s(?<log>.*)$/ # formatを指定
  time_format %H:%M:%S # 時間のフォーマットを指定
  pos_file ./fluent/pos/minecraft.pos # tailプラグインでどこまで読み込んだかを記憶する
  tag debug.minecraft.log # タグを設定
</source>

<filter debug.minecraft.log>
  @type grep # grepプラグインを使用
  <regexp>
    key log # json内のlogキーの値が対象
    pattern (joined|left) # joinedかleftが含まれるログをマッチさせる
  </regexp>
</filter>

<match debug.minecraft.log>
  #@type stdout # マッチしたらログに出力します
  @type            line_notify # line_notifyプラグインを使用
  access_token     your token # トークンを設定
  message_template <%= record['log'] %> # 送信する内容を設定(logキーを出力)
</match>

一旦、td-agentを起動させて、ちゃんとマッチするかどうかをログに出力させてチェックしてみます。

$ fluentd -c conf/fluent.conf

起動されたら、マイクラでマルチサーバーに入ってみましょう。

2018-04-21 19:02:33.000000000 +0900 debug.minecraft.log: {"caused_at":"Server thread","level":"INFO","log":"username joined the game"}

こんな感じで出力されていたらOKです。

一度プロセスをkillして、LINEに通知させるようにします。
設定ファイルの通知部分を以下に変更して、再度td-agentを起動します。

<match debug.minecraft.log>
  #@type stdout # マッチしたらログに出力します
  @type            line_notify # line_notifyプラグインを使用
  access_token     your token # トークンを設定
  message_template <%= record['log'] %> # 送信する内容を設定(logキーを出力)
</match>

f:id:motty72:20180421192437j:plain

通知が来ました!

参考