すべての JMX MBean または MBean 属性を 検出 したり、これらのオブジェクトの検出パターンを指定したりできます。
ディスカバリ ルールを設定するには、MBean と MBean 属性の違いを理解しておく必要があります。 MBean は、管理が必要なデバイス、アプリケーション、または任意のリソースを表すことができるオブジェクトです。
たとえば、Web サーバーを表す MBean があります。 その属性は、接続数、スレッド数、リクエスト タイムアウト、http ファイル キャッシュ、メモリ使用量などです。 この考えを人間の包括的な言語で表現すると、コーヒー マシンを豆と水の補充時間などを監視対象の属性として持つ MBean として定義できます。
ディスカバリールールの設定で、タイプフィールドにJMXエージェントを選択します。
JMXオブジェクトディスカバリ用に2つのアイテムキー(jmx.discovery[]とjmx.get[])がサポートされています。
| アイテムキー | |||
|---|---|---|---|
| 戻り値 | パラメータ | コメント | |
| jmx.discovery[<ディスカバリーモード>,<オブジェクト名>,<一意な短い説明>] | |||
| このアイテムは、MBeanオブジェクトまたはその属性を記述するLLDマクロを含むJSON配列を返します。 | ディスカバリーモード - 次のいずれか: attributes(JMX MBean属性の取得、デフォルト)またはbeans(JMX MBeanの取得) オブジェクト名 - 取得するMBean名を識別するオブジェクト名パターン(ドキュメントを参照)(デフォルトは空、すべての登録済みBeanを取得) 一意な短い説明 - ホスト上で同じディスカバリーモードとオブジェクト名を持つ複数のJMXアイテムを許可する一意な説明(省略可能) |
例: → jmx.discovery - すべてのJMX MBean属性を取得 → jmx.discovery[beans] - すべてのJMX MBeanを取得 → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - すべてのガベージコレクタ属性を取得 → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - すべてのガベージコレクタを取得 このアイテムが返すことができるMBeanプロパティには、マクロ名生成でサポートされる文字が制限されているため、制限事項があります(サポートされる文字は次の正規表現で表現できます: A-Z0-9_\.)。したがって、例えばハイフン付きの単語や非ASCII文字を含むMBeanプロパティをディスカバリするには、jmx.get[]を使用する必要があります。 |
|
| jmx.get[<ディスカバリーモード>,<オブジェクト名>,<一意な短い説明>] | |||
このアイテムは、MBeanオブジェクトまたはその属性を含むJSON配列を返します。jmx.discovery[]と比較して、LLDマクロは定義しません。 |
ディスカバリーモード - 次のいずれか: attributes(JMX MBean属性の取得、デフォルト)またはbeans(JMX MBeanの取得) オブジェクト名 - 取得するMBean名を識別するオブジェクト名パターン(ドキュメントを参照)(デフォルトは空、すべての登録済みBeanを取得) 一意な短い説明 - ホスト上で同じディスカバリーモードとオブジェクト名を持つ複数のJMXアイテムを許可する一意な説明(省略可能) |
このアイテムを使用する場合は、返されたJSONからJSONPathを使用して抽出した値を指すカスタム低レベルディスカバリーマクロを定義する必要があります。 | |
パラメータを指定しない場合、JMXからすべてのMBean属性が要求されます。JMXディスカバリでパラメータを指定しない、または*:type=*,name=*のような広範囲のすべての属性を取得しようとすると、パフォーマンス上の問題が発生する可能性があります。
このアイテムは、MBeanオブジェクトまたは属性を記述する低レベルディスカバリーマクロを含むJSONオブジェクトを返します。例えば、MBean属性のディスカバリーの場合(見やすく整形):
[
{
"{#JMXVALUE}":"0",
"{#JMXTYPE}":"java.lang.Long",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionCount",
"{#JMXATTR}":"CollectionCount"
},
{
"{#JMXVALUE}":"0",
"{#JMXTYPE}":"java.lang.Long",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
"{#JMXATTR}":"CollectionTime"
},
{
"{#JMXVALUE}":"true",
"{#JMXTYPE}":"java.lang.Boolean",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
"{#JMXATTR}":"Valid"
},
{
"{#JMXVALUE}":"PS Scavenge",
"{#JMXTYPE}":"java.lang.String",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
"{#JMXATTR}":"Name"
},
{
"{#JMXVALUE}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXTYPE}":"javax.management.ObjectName",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,ObjectName",
"{#JMXATTR}":"ObjectName"
}
]MBeanのディスカバリーの場合(見やすく整形):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]次のマクロはディスカバリルール フィルター およびアイテム、トリガー、グラフのプロトタイプでの使用がサポートされています。
| マクロ | 説明 |
|---|---|
| MBean 属性の検出 | |
| {#JMXVALUE} | 属性値 |
| {#JMXTYPE} | 属性タイプ |
| {#JMXOBJ} | オブジェクト名 |
| {#JMXDESC} | 属性名を含むオブジェクト名 |
| {#JMXATTR} | 属性名 |
| MBean の検出 | |
| {#JMXDOMAIN} | MBean ドメイン. (Zabbix予約名) |
| {#JMXOBJ} | オブジェクト名. (Zabbix予約名) |
| {#JMX<key property>} | MBean プロパティ (like {#JMXTYPE}, {#JMXNAME}) (参照 Limitations below). |
MBeanプロパティ名からLLDマクロ名を作成するアルゴリズムにはいくつかの制限があります:
A-Z0-9_\.このjmx.discovery("beans"モード)例を考えてみてください。MBeanには以下のプロパティが定義されています(一部は無視されます。下記参照):
JMXディスカバリの結果、以下のLLDマクロが生成されます:
無視されるプロパティは以下の通りです:
MBeanを使用したLLDルール作成のより実践的な例を2つ見てみましょう。 MBeansを収集するLLDルールとMBean属性を収集するLLDルールの違いをよりよく理解するために、次の表をご覧ください。
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
このルールは3つのオブジェクトを返します: 列の最上行: MBean1, MBean2, MBean3。
オブジェクトの詳細については、サポートされているマクロテーブルの「MBeansのディスカバリ」セクションを参照してください。
MBeans(属性なし)を収集するディスカバリルールの設定は次のようになります。

ここで使用されているキー:
すべてのガベージコレクタが属性なしでディスカバリされます。ガベージコレクタは同じ属性セットを持っているため、アイテムプロトタイプで必要な属性を次のように使用できます。

ここで使用されているキー:
LLDディスカバリルールの結果は次のようになります(2つのガベージコレクタのアイテムがディスカバリされます)。

このルールは、以下のフィールドを持つ9つのオブジェクトを返します: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3。
オブジェクトの詳細については、サポートされているマクロの表の「MBean属性のディスカバリ」セクションを参照してください。
MBean属性を収集するディスカバリルールの設定は以下のようになります:

ここで使用されているキー:
単一のアイテム属性を持つすべてのガベージコレクタがディスカバリされます。

この特定のケースでは、すべてのMBean属性ごとにプロトタイプからアイテムが作成されます。この設定の主な欠点は、すべての属性に対してアイテムプロトタイプが1つしかないため、トリガープロトタイプからトリガーを作成することができないことです。そのため、このセットアップはデータ収集には使用できますが、自動監視には推奨されません。
jmx.get[]はjmx.discovery[]アイテムと似ていますが、Javaオブジェクトのプロパティを低レベルディスカバリーマクロ名に変換しないため、ハイフンや非ASCII文字など、LLDマクロ名生成に関連する制限なしに値を返すことができます。
ディスカバリーにjmx.get[]を使用する場合、低レベルディスカバリーマクロは、ディスカバリールールのカスタムLLDマクロタブで個別に定義でき、必要な値を指すためにJSONPathを使用します。
検出アイテム: jmx.get[beans,"com.example:type=*,*"]
レスポンス:
[
{
"object": "com.example:type=Hello,data-src=data-base,ключ=значение",
"domain": "com.example",
"properties": {
"data-src": "data-base",
"ключ": "значение",
"type": "Hello"
}
},
{
"object": "com.example:type=Atomic",
"domain": "com.example",
"properties": {
"type": "Atomic"
}
}
]検出アイテム: jmx.get[attributes,"com.example:type=*,*"]
レスポンス:
[
{
"object": "com.example:type=*",
"domain": "com.example",
"properties": {
"type": "Simple"
}
},
{
"object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,ключ=значение,obj=true",
"domain": "com.zabbix",
"properties": {
"type": "Hello",
"domain": "com.example",
"data-source": "/dev/rand",
"ключ": "значение",
"obj": true
}
}
]