Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

5 JMXオブジェクトの検出

概要

すべての JMX MBean または MBean 属性を 検出 したり、これらのオブジェクトの検出パターンを指定したりできます。

ディスカバリ ルールを設定するには、MBean と MBean 属性の違いを理解しておく必要があります。 MBean は、管理が必要なデバイス、アプリケーション、または任意のリソースを表すことができるオブジェクトです。

たとえば、Web サーバーを表す MBean があります。 その属性は、接続数、スレッド数、リクエスト タイムアウト、http ファイル キャッシュ、メモリ使用量などです。 この考えを人間の包括的な言語で表現すると、コーヒー マシンを豆と水の補充時間などを監視対象の属性として持つ MBean として定義できます。

アイテムキー

ディスカバリルール 設定のタイプ フィールドで JMX エージェント を選択します。

JMX オブジェクトの検出では、jmx.discovery[] と jmx.get[] の 2 つのアイテム キーがサポートされています。

アイテムキー
戻り値 パラメータ コメント
jmx.discovery[<discovery mode>,<object name>,<unique short description>]
この項目は、MBean オブジェクトまたはその属性を記述する LLD マクロを含む JSON 配列を返します。 discovery mode - 次のいずれか: attributes (JMX MBean 属性の取得、デフォルト) or beans (JMX MBean を取得)
object name - 取得する MBean 名を識別するオブジェクト名パターン (ドキュメント を参照) (デフォルトでは空で、登録されているすべての Bean を取得します)
unique short description - ホスト上で同じ検出モードとオブジェクト名を持つ複数の 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[] を使用する必要があります。

Zabbix Java ゲートウェイ 3.4 以降でサポートされています。
jmx.get[<discovery mode>,<object name>,<unique short description>]
この項目は、MBean オブジェクトまたはその属性を含む JSON 配列を返します。

jmx.discovery[] との違いはLLD マクロを定義しないことです。
discovery mode - 次のいずれか: attributes (JMX MBean 属性を取得、デフォルト) または beans (JMX MBean を取得)
object name - 取得する MBean 名を識別するオブジェクト名パターン (ドキュメント を参照) (デフォルトでは空で、登録されているすべての Bean を取得します)
unique short description - ホスト上で同じ検出モードとオブジェクト名を持つ複数の JMX アイテムを許可する一意の説明 (オプション)
このアイテムを使用する場合、JSONPath を使用して返された JSON から抽出された値を指す、カスタムの低レベル検出マクロを定義する必要があります。 .

Zabbix Java ゲートウェイ 4.4 以降でサポートされています。

パラメータが渡されない場合、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} (Zabbix 3.4.3 以降でサポート) の値と重複するため、それらは無視されます。

次の jmx.discovery ("beans"モードを使用) の例を確認してください。 MBean には次のプロパティが定義されています。

name=test
       тип=Type
       attributes []=1,2,3
       Name=NameOfTheTest
       domAin=some

JMX 検出の結果、次の LLD マクロが生成されます。

  • {#JMXDOMAIN} - Zabbix 内部、MBean のドメインを記述
  • {#JMXOBJ} - Zabbix 内部、MBean オブジェクトについて説明
  • {#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: Mbeansの検出

このルールは 3 つのオブジェクトを返します: 列の一番上の行: MBean1, MBean2, MBean3.

オブジェクトの詳細については、サポートされているマクロ 表の MBean の検出 セクションを参照してください。

Mbean (属性なし) を収集するディスカバリー・ルール構成は、次のようになります。

lld_rule_mbean.png

ここで使用されるキー:

jmx.discovery[beans,"*:type=GarbageCollector,name=*"]

属性のないすべてのガベージ コレクターが検出されます。 ガベージ コレクターには同じ属性セットがあるため、アイテム プロトタイプで必要な属性を次のように使用できます。

lld_rule_mbean_prototypes.png

ここで使用されるキー:

jmx[{#JMXOBJ},CollectionCount] 
       jmx[{#JMXOBJ},CollectionTime] 
       jmx[{#JMXOBJ},Valid] 

LLD ディスカバリルールは、これに近い結果になります (アイテムは 2 つのガベージ コレクターで検出されます)。

discovery_rule_mbean_3.png

例2: Mbean 属性の検出

このルールは、次のフィールドを持つ 9 つのオブジェクトを返します:MBean1Attribute1, MBean2Attribute1, Mbean3Attribute1,MBean1Attribute2,MBean2Attribute2, Mbean3Attribute2, MBean1Attribute3, MBean2Attribute3, Mbean3Attribute3.

オブジェクトの詳細については、サポートされているマクロ 表の MBean 属性の検出 セクションを参照してください。

Mbean 属性を収集する検出ルールの構成は、次のようになります。

lld_rule_mbean_attr.png

ここで使用されるキー:

jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]

単一の項目属性を持つすべてのガベージ コレクターが検出されます。

lld_rule_mbean_attr_prototypes.png

この特定のケースでは、すべての 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
               }
           }
       ]