エラスティックスタック(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で表示できるようにすることで、多くの興味深い視覚化作業を実行して、素晴らしい本番監視ダッシュボードを作成できます。