JMX 🔗
Splunk Distribution of OpenTelemetry Collectorは、Smart Agentレシーバーと jmx
モニタータイプを使用して、任意のGroovyスクリプトを実行し、リモートJavaアプリケーションからフェッチされたJMX MBeansをSignalFxデータポイントに変換します。これは、GenericJMX モニターよりも柔軟な選択肢です。
注釈
ネイティブのOpenTelemetryコンポーネントを使用してOpenTelemetry CollectorでJMXを監視するには、JMXレシーバー を参照してください。
Splunk Distribution of OpenTelemetry Javaでアプリケーションをインストルメンテーションする場合、JMXモニターを使用する代わりにJavaエージェントでメトリクスをキャプチャできます。詳しくは メトリクスコレクション を参照してください。
以下のユーティリティ・ヘルパーは、Groovyスクリプト内で、スクリプトのコンテキストで設定される変数 util
:
util.queryJMX(String objectName)
:このヘルパーは、ワイルドカードを含むことができる、与えられたobjectName
のために設定されたJMXアプリケーションをクエリします。いずれにせよ、戻り値は0個以上のGroovyMBean
オブジェクトのList
です。これはGroovyがMBean上の属性へのアクセスを簡単にするために提供する便利なラッパーです。GroovyMBean
オブジェクトについての詳細はhttp://groovy-lang.org/jmx.html。最初のMBeanにアクセスするために、返されたリストでGroovy.first()
メソッドを使うことができます。util.makeGauge(String name, double val, Map<String, String> dimensions)
: SignalFx ゲージ・データポイントを作成する便利な関数。これは、output.sendDatapoint[s]
に供給できるDataPoint
インスタンスを作成します。これはデータポイントを送信せず、作成のみを行います。util.makeCumulative(String name, double val, Map<String, String> dimensions)
:SignalFx 累積カウンター・データポイントを作成するための便利な関数。これは、output.sendDatapoint[s]
に与えることができるDataPoint
インスタンスを作成します。これはデータポイントを送信せず、作成するだけです。
スクリプトコンテキストで利用可能な output
インスタンスは、Splunk Observability Cloud にデータを送信するために使用されます。以下のメソッドが含まれています:
output.sendDatapoint(DataPoint dp)
:与えられたデータポイントをSignalFxに出力します。util.make[Gauge|Cumulative]
ヘルパーを使用して、DataPoint
インスタンスを作成します。output.sendDatapoints(List<DataPoint> dp)
:指定されたデータポイントをSignalFxに送信します。DataPoint
インスタンスを作成するには、util.make[Gauge|Cumulative]
ヘルパーを使用することをお勧めします。一度に複数のデータポイントを送信する方が若干効率的ですが、非常に大量のデータを送信するのでなければ、それほど重要ではありません。
メリット 🔗
インテグレーションを設定すると、これらの機能にアクセスできるようになります:
メトリクスを表示します。独自のカスタム・ダッシュボードを作成することができ、ほとんどのモニターは組み込みのダッシュボードも提供しています。ダッシュボードについては、Splunk Observability Cloudでダッシュボードを表示する を参照してください。
Infrastructure Monitoring に表示される環境内の物理サーバー、仮想マシン、AWS インスタンス、およびその他のリソースのデータ駆動型の視覚化を表示します。ナビゲーターについては、Splunk Infrastructure Monitoring でナビゲーターを使用する を参照してください。
Metric Finder にアクセスして、モニターから送信されたメトリクスを検索します。詳細については、メトリクス・ファインダーとメタデータ・カタログを検索する を参照してください。
インストール 🔗
このインテグレーションを導入するには、以下の手順に従ってください:
Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:
[設定] セクションの説明に従ってインテグレーションを設定します。
Splunk Distribution of OpenTelemetry Collector を再起動します。
設定 🔗
Smart Agent モニターとCollector のインテグレーションを使用するには、以下の手順に従います:
Smart Agent レシーバーを設定ファイルに含めます。
レシーバーセクションおよびパイプラインセクションの両方で、Collector 構成にモニタータイプを追加します。
Collector でSmart Agent モニターを使用する の方法を参照してください。
Smart Agent レシーバー の設定方法を参照してください。
一般的な設定オプションのリストについては、モニターの共通設定 を参照してください。
Collectorの詳細は、はじめに:Collectorを理解して使用する を参照してください。
例 🔗
このインテグレーションを有効にするには、Collector構成に以下を追加します:
receivers:
smartagent/jmx:
type: jmx
... # Additional config
次に、設定ファイルの service.pipelines.metrics.receivers
セクションにモニターを追加します:
service:
pipelines:
metrics:
receivers: [smartagent/jmx]
コンフィギュレーション設定 🔗
次の表に、このインテグレーションの設定オプションを示します:
オプション |
必須 |
タイプ |
説明 |
---|---|---|---|
|
いいえ |
|
|
|
いいえ |
|
|
|
いいえ |
|
|
|
はい |
|
|
|
いいえ |
|
該当する場合は、JMX 認証用のユーザー名。 |
|
いいえ |
|
JMX 認証用のパスワード(該当する場合)。 |
|
いいえ |
|
|
|
いいえ |
|
キーストアファイルのパスワード(必要な場合)。 |
|
いいえ |
|
キーストアタイプ。(デフォルト: |
|
いいえ |
|
TLSプロファイルが必要な場合は、信頼されたストアのパス。 |
|
いいえ |
|
トラストストアファイルのパスワード(必要な場合)。 |
|
いいえ |
|
|
|
いいえ |
|
レルムはプロファイルSASL/DIGEST-MD5で必要とされます。 |
以下は、Cassandra nodetool status
ユーティリティが提示するデータの一部をレプリケートするGroovyスクリプトの例です:
// Query the JMX endpoint for a single MBean.
ss = util.queryJMX("org.apache.cassandra.db:type=StorageService").first()
// Copied and modified from https://github.com/apache/cassandra
def parseFileSize(String value) {
if (!value.matches("\\d+(\\.\\d+)? (GiB|KiB|MiB|TiB|bytes)")) {
throw new IllegalArgumentException(
String.format("value %s is not a valid human-readable file size", value));
}
if (value.endsWith(" TiB")) {
return Math.round(Double.valueOf(value.replace(" TiB", "")) * 1e12);
}
else if (value.endsWith(" GiB")) {
return Math.round(Double.valueOf(value.replace(" GiB", "")) * 1e9);
}
else if (value.endsWith(" KiB")) {
return Math.round(Double.valueOf(value.replace(" KiB", "")) * 1e3);
}
else if (value.endsWith(" MiB")) {
return Math.round(Double.valueOf(value.replace(" MiB", "")) * 1e6);
}
else if (value.endsWith(" bytes")) {
return Math.round(Double.valueOf(value.replace(" bytes", "")));
}
else {
throw new IllegalStateException(String.format("FileUtils.parseFileSize() reached an illegal state parsing %s", value));
}
}
localEndpoint = ss.HostIdToEndpoint.get(ss.LocalHostId)
dims = [host_id: ss.LocalHostId, cluster_name: ss.ClusterName]
output.sendDatapoints([
// Equivalent of "Up/Down" in the `nodetool status` output.
// 1 = Live; 0 = Dead; -1 = Unknown
util.makeGauge(
"cassandra.status",
ss.LiveNodes.contains(localEndpoint) ? 1 : (ss.DeadNodes.contains(localEndpoint) ? 0 : -1),
dims),
util.makeGauge(
"cassandra.state",
ss.JoiningNodes.contains(localEndpoint) ? 3 : (ss.LeavingNodes.contains(localEndpoint) ? 2 : 1),
dims),
util.makeGauge(
"cassandra.load",
parseFileSize(ss.LoadString),
dims),
util.makeGauge(
"cassandra.ownership",
ss.Ownership.get(InetAddress.getByName(localEndpoint)),
dims)
])
本番のJMXサービスを監視するためにスクリプトを使用する前に、スクリプトが入念にテストされていることを確認してください。一般的に、スクリプトは属性のみを読み取るべきですが、それを強制するものはありません。
メトリクス 🔗
このインテグレーションで利用可能なメトリクスはありません。
トラブルシューティング 🔗
Splunk Observability Cloudをご利用のお客様で、Splunk Observability Cloudでデータを確認できない場合は、以下の方法でサポートを受けることができます。
Splunk Observability Cloudをご利用のお客様
Splunk サポートポータル でケースを送信する
Splunkサポート に連絡する
見込み客および無料トライアルユーザー様
Splunk Answers のコミュニティサポートで質問し、回答を得る
Join the Splunk #observability user group Slack channel to communicate with customers, partners, and Splunk employees worldwide. To join, see Chat groups in the Get Started with Splunk Community manual.