6 JMXオブジェクトの検出
概要
すべての JMX MBean または MBean 属性を 検出 したり、これらのオブジェクトの検出パターンを指定したりできます。
ディスカバリ ルールを設定するには、MBean と MBean 属性の違いを理解しておく必要があります。 MBean は、管理が必要なデバイス、アプリケーション、または任意のリソースを表すことができるオブジェクトです。
たとえば、Web サーバーを表す MBean があります。 その属性は、接続数、スレッド数、リクエスト タイムアウト、http ファイル キャッシュ、メモリ使用量などです。 この考えを人間の包括的な言語で表現すると、コーヒー マシンを豆と水の補充時間などを監視対象の属性として持つ MBean として定義できます。
アイテムキー
ディスカバリ ルール の設定で、タイプ フィールドに JMX agent を選択します。
JMXオブジェクトのディスカバリでは、2つのアイテムキー jmx.discovery[]
および jmx.get[] がサポートされています。
| アイテムキー | |||
|---|---|---|---|
| 戻り値 | パラメータ | コメント | |
| jmx.discovery[<discovery mode>,<object name>,<unique short description>] | |||
| このアイテムは、MBeanオブジェクトまたはその属性を記述するLLDマクロを含むJSON配列を返します。 | discovery mode - 次のいずれか: attributes(JMX MBean属性を取得、デフォルト)または beans(JMX MBeansを取得) object name - 取得するMBean名を識別するオブジェクト名パターン(documentationを参照)(デフォルトでは空で、登録されているすべてのbeanを取得) unique short description - 同じディスカバリモードおよびオブジェクト名を持つ複数のJMXアイテムをホスト上で使用できるようにする一意の説明(任意) |
例: → jmx.discovery - すべてのJMX MBean属性を取得 → jmx.discovery[beans] - すべてのJMX MBeansを取得 → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - すべてのガベージコレクター属性を取得 → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - すべてのガベージコレクターを取得 マクロ名生成でサポートされる文字が限られているため、このアイテムが返せるMBeanプロパティにはいくつかの制限があります(サポートされる文字は次の正規表現で表せます: A-Z0-9_\.)。そのため、たとえばハイフンを含む語や非ASCII文字を含むMBeanプロパティをディスカバリするには、jmx.get[] を使用する必要があります。 |
|
| jmx.get[<discovery mode>,<object name>,<unique short description>] | |||
このアイテムは、MBeanオブジェクトまたはその属性を含むJSON配列を返します。jmx.discovery[] と比較すると、LLDマクロは定義しません。 |
discovery mode - 次のいずれか: attributes(JMX MBean属性を取得、デフォルト)または beans(JMX MBeansを取得) object name - 取得するMBean名を識別するオブジェクト名パターン(documentationを参照)(デフォルトでは空で、登録されているすべてのbeanを取得) unique short description - 同じディスカバリモードおよびオブジェクト名を持つ複数のJMXアイテムをホスト上で使用できるようにする一意の説明(任意) |
このアイテムを使用する場合は、返されたJSONからJSONPathを使用して抽出した値を指すカスタムのローレベルディスカバリマクロを定義する必要があります。 | |
パラメータが渡されない場合、JMXからすべてのMBean属性が要求されます。
JMXディスカバリでパラメータを指定しない場合や、
*:type=*,name=* のような広い範囲ですべての属性を取得しようとすると、
パフォーマンス上の問題が発生する可能性があります。
jmx.discovery の使用
このアイテムは、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マクロ名を作成するアルゴリズムには、いくつかの制限があります。
- 属性名は大文字に変換されます
- 属性名にLLDマクロ名でサポートされていない文字が含まれている場合、その属性名は無視されます(LLDマクロは生成されません)。サポートされる文字は、次の正規表現で表せます:
A-Z0-9_\. - 属性名が "obj" または "domain" の場合、予約済みのZabbixプロパティ {#JMXOBJ} および {#JMXDOMAIN} の値と重複するため、無視されます
次の jmx.discovery("beans" モード)の例を考えてみてください。MBean には以下のプロパティが定義されています(一部は無視されます。以下を参照してください)。
name=test
тип=Type
attributes []=1,2,3
Name=NameOfTheTest
domAin=some
JMXディスカバリの結果、次のLLDマクロが生成されます。
- {#JMXDOMAIN} - MBean のドメインを表すZabbix内部用
- {#JMXOBJ} - MBean オブジェクトを表すZabbix内部用
- {#JMXNAME} - "name" プロパティから作成
無視されるプロパティは次のとおりです。
- тип : 名前にサポートされていない文字(非ASCII文字)が含まれているため
- attributes[] : 名前にサポートされていない文字が含まれているため(角括弧はサポートされていません)
- Name : すでに定義されているため(name=test)
- domAin : Zabbixの予約名であるため
例
MBean を使用した LLD ルール作成の、より実践的な例をさらに 2 つ見ていきましょう。
MBean を収集する LLD ルールと、MBean 属性を収集する LLD ルールの違いをよりよく理解するために、次の表を参照してください。
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
例1: MBeanの検出
このルールは3つのオブジェクト、すなわち列の先頭行である MBean1、 MBean2、MBean3 を返します。
オブジェクトの詳細については、supported macros テーブルの MBeanの検出 セクションを参照してください。
属性を含まない MBean を収集するディスカバリルールの設定は、次のようになります。

ここで使用されるキー:
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
属性を持たないすべてのガベージコレクターが検出されます。ガベージコレクターは同じ属性セットを持つため、アイテムのプロトタイプで必要な属性を次のように使用できます。

ここで使用されるキー:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
LLDディスカバリルールの結果は、次のようになります(2つのガベージコレクターに対してアイテムが検出されています)。

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

ここで使用されるキー:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
単一のアイテム属性を持つすべてのガベージコレクターがディスカバリされます。

この特定のケースでは、各MBean属性ごとにプロトタイプからアイテムが作成されます。この設定の主な欠点は、すべての属性に対してアイテムプロトタイプが1つしかないため、トリガープロトタイプからトリガーを作成できないことです。そのため、この設定はデータ収集には使用できますが、自動監視には推奨されません。
jmx.get の使用
jmx.get[] は jmx.discovery[] アイテムに似ていますが、Java オブジェクトのプロパティをローレベルディスカバリのマクロ名に変換しないため、ハイフンや非ASCII文字など、LLD マクロ名の生成に関連する制限を受けずに値を返すことができます。
ディスカバリに jmx.get[] を使用する場合、ローレベルディスカバリのマクロは、ディスカバリルール設定のカスタム LLD
マクロ タブで別途定義でき、JSONPath を使用して必要な値を指定できます。
MBeansの検出
検出アイテム: 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"
}
}
]
MBean 属性の検出
検出アイテム: 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
}
}
]