概要
intra-martが動いているResinのjmx情報をモニタリングしたい。
resin-adminやJConsoleがあるじゃないか、という意見を振り切って、敢えてLogstashでやる例。
試した環境は以下の通り。
アプリケーション | バージョン |
---|---|
Resin | 4.0.48 |
Logstash | 2.3.3 |
Logstashの準備
Logstashをelastic社のサイトからダウンロードしておく。インストールそのものの手順は簡単なので割愛。
logstash-input-jmxのインストール
標準では入っていないようなので、jmxを取得するプラグインをインストールします。
logstash-plugin install logstash-input-jmx
jmxを取得する用の設定ファイルの準備
任意の場所にフォルダを作って、適当にファイルを作ります。
面倒なので、binフォルダ以下にjmx というフォルダを作り、server_a.jmx としました。
hostやport、usernameなどは適当に読み替えてください。
もし、複数台のサーバを監視するのであれば、server_b.jmx, server_c.jmx・・・server_x.jmxなどと複数のファイルを設定したフォルダの下においてください。
portの値は後述するresin.propertiesの中で指定した値になります。
今回はメモリとRuntimeの値を取ってみることにします。
取得できる値の種類は、resin-adminなどで、java.langの下を見ながらやると良いと思います。OperatingSystemとかを見るとCPUの値もとれます。(それは、metricbeatでいいじゃん、という話もあります)
{
"host" : "192.168.1.1",
"port" : 9999,
"username" : "",
"password": "",
"alias" : "innova-20x",
"queries" : [
{
"object_name" : "java.lang:type=Memory",
"object_alias" : "Memory"
}, {
"object_name" : "java.lang:type=Runtime",
"attributes" : [ "Uptime", "StartTime" ],
"object_alias" : "Runtime"
}]
}
logstash用設定ファイルの準備
logstash用の設定ファイルを作成します。
ここは、シンプルに標準出力に取得した値を出すようにしてみます。
jmxの中でpathを指定していますが、ここに先に用意したjmxを取得する用の設定ファイルがあるフォルダを指定します。
ファイルパスを直接指定するとエラーとなるので注意してください。
input {
jmx {
path => "./jmx"
polling_frequency => 15
type => "jmx"
nb_thread => 1
}
}
output {
stdout { codec => "rubydebug" }
}
resinの準備
resin.propertiesの編集
resin.propertiesに外からjmxの値を取れるように穴をあけます。
開発用途として、認証もsslも外しています。
設定 | 値 |
---|---|
com.sun.management.jmxremote | |
com.sun.management.jmxremote.port | 9999 (jmxの設定ファイルで使用する) |
com.sun.management.jmxremote.local.only | false (外部からつなぐので) |
com.sun.management.jmxremote.authenticate | false (今回は認証をつけていない) |
com.sun.management.jmxremote.ssl | false |
記載例はこちら。
# Arg passed directly to the JVM
jvm_args : -Xmx6144m -XX:MaxPermSize=1536m -Xloggc:log/gc.log -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
jvm_mode : -server
# jvm_args : -Dfile.encoding=UTF-8
resin.propertiesの編集後は、resinを再起動しておきます。
logstashの起動
logstashを起動して、jmxの値をコンソールに出してみます。指定間隔(今回は15秒間隔)でコンソールが流れていれば成功!
logstash -f <作成したlogstashの設定ファイル>
おまけ
outputにelasticsearchを入れて、kibanaで見てやると、ダッシュボードもすぐ作れる予感。
Heapのサイズをグラフにしてみる例。
jmxの数値と、ユーザのアクションログを組みあわせて可視化すると、夢が広がりんぐ。
お後がよろしいようで。