ハイファットマンの友人M

ハイファットマンはおともだちです。ほぼメモ

マイクラのログイン・ログアウトを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 ~/.rben
$ 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 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が作成されます。
作成された設定ファイル配下の内容に更新します。

<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 /root/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_access_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を起動します。

  #@type            line_notify # line_notifyプラグインを使用
  #access_token     your_access_token # トークンを設定
  #message_template <%= record['log'] %> # 送信する内容を設定(logキーを出力)

f:id:motty72:20180421192437j:plain

通知が来ました!

参考