エラスティックスタック(ELK)へのJMXデータ
1. 概要
このクイックチュートリアルでは、TomcatサーバーからElastic Stack(旧称ELK)にJMXデータを送信する方法を見ていきます。
JMXからデータを読み取ってElasticsearchに送信するようにLogstashを構成する方法について説明します。
2. ElasticStackをインストールします
まず、Elasticスタックをインストールする必要があります(Elasticsearch –Logstash –Kibana)
次に、すべてが接続されて正しく機能していることを確認するために、JMXデータをLogstashに送信し、Kibanaで視覚化します。
2.1. Logstashをテストします
まず、オペレーティングシステム(この場合はUbuntu)によって異なるLogstashインストールディレクトリに移動します。
cd /opt/logstash
コマンドラインからLogstashに簡単な構成を設定できます。
bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } }'
次に、コンソールにサンプルデータを入力し、CTRL-Dコマンドを使用してパイプラインを閉じます。
2.2. Elasticsearchをテストする
サンプルデータを追加すると、ElasticsearchでLogstashインデックスが利用可能になります。次のように確認できます。
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をテストする
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に接続しましょう。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で表示できるようにすることで、多くの興味深い視覚化作業を実行して、素晴らしい本番監視ダッシュボードを作成できます。