エラスティックスタックへのJMXデータ(ELK)
1概要
このクイックチュートリアルでは、JMXデータをTomcatサーバーからElastic Stack(以前はELKと呼ばれていました)に送信する方法について説明します。
LogstashでJMXからデータを読み取ってElasticsearchに送信するように設定する方法について説明します。
2エラスティックスタックを取り付ける
まず、Elastic stackをインストールする必要があります(https://www.elastic.co/guide/en/elasticsearch/reference/current/__installation.html[Elastichsearch] –
Logstash
–
Kibana
)
次に、すべてが正しく接続され、正しく機能していることを確認するために、JMXデータをLogstashに送信し、それをKibanaで視覚化します。
2.1. ログスタッシュのテスト
最初に、オペレーティングシステムによって異なるLogstashインストールディレクトリに移動します(この場合はUbuntu)。
cd/opt/logstash
簡単な設定をLogstashにコマンドラインから設定できます。
bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts =>["localhost:9200"]} }'
その後、コンソールにサンプルデータを入力するだけで済みます。終了したら、CTRL-Dコマンドを使用してパイプラインを閉じます。
2.2. Elasticsearchをテストする
サンプルデータを追加した後、LogstashインデックスがElasticsearchで利用可能になるはずです。
curl -X GET 'http://localhost:9200/__cat/indices'
出力例:
yellow open logstash-2017.11.10 5 1 3531 0 506.3kb 506.3kb
yellow open .kibana 1 1 3 0 9.5kb 9.5kb
yellow open logstash-2017.11.11 5 1 8671 0 1.4mb 1.4mb
2.3. テストキバナ
Kibanaはデフォルトでポート5601で動作します – ホームページにアクセスすることができます:
http://localhost:5601/app/kibana
パターン「
logstash – **
」を使用して新しいインデックスを作成し、そこにサンプルデータを表示できるはずです。
3 Tomcatを設定する
次に、
CATALINA
OPTS__に以下を追加してJMXを有効にする必要があります。
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
ご了承ください:
-
setenv.sh
を変更して
CATALINA
OPTS__を設定できます。 -
Ubuntuユーザーの場合
setenv.sh
は、/usr/share/tomcat8/binにあります。
4 JMXとLogstash
を接続する
それでは、JMXメトリックをLogstashに接続しましょう。そのためには、JMX入力プラグインをインストールする必要があります(詳細は後で説明します)。
4.1. JMXメトリックを設定する
まず、隠したいJMXメトリックを設定する必要があります。設定はJSON形式で提供します。
これが私たちの
jmx
config.json__です。
{
"host" : "localhost",
"port" : 9000,
"alias" : "reddit.jmx.elasticsearch",
"queries" :[ {
"object__name" : "java.lang:type=Memory",
"object__alias" : "Memory"
}, {
"object__name" : "java.lang:type=Threading",
"object__alias" : "Threading"
}, {
"object__name" : "java.lang:type=Runtime",
"attributes" :["Uptime", "StartTime"],
"object__alias" : "Runtime"
}]}
ご了承ください:
-
CATALINA
OPTS__からJMXに同じポートを使用しました -
必要なだけ設定ファイルを提供できますが、必要です。
それらを同じディレクトリに配置します(この例では、
jmx
config.json__を/monitor/jmx/に保存しました)。
4.2. JMX入力プラグイン
次に、Logstashインストールディレクトリで次のコマンドを実行してJMX入力プラグインをインストールしましょう。
bin/logstash-plugin install logstash-input-jmx
次に、Logstash構成ファイル(
jmx.conf
)を作成する必要があります。ここで、入力はJMXメトリックで、出力はElasticsearchに送信されます。
input {
jmx {
path => "/monitor/jmx"
polling__frequency => 60
type => "jmx"
nb__thread => 3
}
}
output {
elasticsearch {
hosts =>["localhost:9200"] }
}
最後に、Logstashを実行して構成ファイルを指定する必要があります。
bin/logstash -f jmx.conf
Logstash構成ファイル
jmx.conf
はLogstashホームディレクトリ(この場合は
/opt/logstash
)に保存されています。
5 JMXメトリックを視覚化する
最後に、Kibanaを使って、JMXメトリクスデータの簡単な視覚化を作成しましょう。ヒープメモリの使用状況を監視するための簡単なチャートを作成します。
5.1. 新しい検索を作成する
まず、ヒープメモリの使用量に関連する指標を取得するための新しい検索を作成します。
-
検索バーの「新規検索」アイコンをクリックしてください。
-
次のように入力してください
metric__path:reddit.jmx.elasticsearch.Memory.HeapMemoryUsage.used
-
Enterを押す
-
[
metric
path
]フィールドと[
metric
value
number__]フィールドを必ず追加してください。
サイドバーから
** 検索バーの[検索を保存]アイコンをクリックします
-
検索に「使用メモリ」という名前を付けます。
サイドバーのフィールドにインデックスが付けられていないとマークされている場合は、[設定]タブに移動し、[
logstash – **
]インデックスのフィールドリストを更新します。
5.2. 折れ線グラフを作成
次に、ヒープメモリの使用状況を時系列で監視する簡単な折れ線グラフを作成します。
-
[視覚化]タブに移動します
-
[折れ線グラフ]を選択します
-
[保存した検索から]を選択します
-
先ほど作成した「使用済みメモリ」検索を選択してください
Y軸の場合は、必ず選択してください。
-
集計:平均
-
フィールド:
metric
value
number
X軸の場合は、[日付ヒストグラム]を選択してから、視覚化を保存します。
5.3. スクリプトフィールドを使用する
メモリ使用量はバイト単位なので、あまり読みやすくありません。 Kibanaにスクリプトフィールドを追加して、メトリックの種類と値を変換できます。
-
[設定]からインデックスに移動し、[
logstash – **
]を選択します。 -
[スクリプトフィールド]タブに移動し、[スクリプトフィールドを追加]をクリックします。
-
名前:
metric
value
formatted
-
フォーマット:バイト
-
スクリプトでは、単に「
metric
value
number
」の値を使います。
doc['metric__value__number'].value
これで、検索とビジュアライゼーションを「
metric
value
number
」の代わりにフィールド「
metric
value
formatted
」を使用するように変更でき、データが正しく表示されるようになります。
この非常に単純なダッシュボードは次のようになります。
6. 結論
これで終わりです。お分かりのように、設定は特に難しいことではありません。JMXデータをKibanaで表示できるようにすることで、素晴らしい生産監視ダッシュボードを作成するために多くの興味深い視覚化作業を行うことができます。