JDBC アクティブ ディスカバリ

最終更新日: 25 年 2020 月 XNUMX 日

JDBC Active Discoveryメソッドは、データベースが特定のポートで実行されているかどうかを検出し、SQLクエリへの応答に基づいてデータベースをフィルタリングするために使用されます。 また、任意のSQLクエリに基づいてインスタンスを作成するために使用することもできます。これを使用して、オブジェクトに関する詳細を収集できます。

計測パラメータ

Active DiscoveryメソッドをJDBCに設定したら、次のパラメーターを構成する必要があります。

  • JDBC URL: このフィールドには、データベースエンジンのタイプまたは完全に定義されたURLのいずれかを入力できます。 接続するデータベースエンジンのタイプ(つまり、mysql、oracle、postgresql、またはmssql)のみを指定した場合、LogicMonitorは定義済みを使用してJDBCURLを構築しようとします。 デバイスプロパティ。 完全に定義されたURLは、次のいずれかの形式で指定できます。
  • これらの例のように、トークンを使用します。
    • jdbc:postgresql:// ## HOSTNAME ##:5432 / ## DBNAME ##?user = ## jdbc.postgres.user ##&password = ## jdbc.postgres.pass ##
    • jdbc:sybase:Tds:## hostname ##:## jdbc.sybase.port ## / ## dbname ##?user = ## jdbc.sybase.user ##&password = ## jdbc.sybase.pass ##
      • 注意:SyBase URLでは、ホスト名の前にスラッシュを付ける必要はありません。
  • または、次の例のように、イタリック体の変数をデータベース固有の情報に置き換える文字列を完全に宣言します。
    • jdbc:mysql://ホスト名:ポート?user =ユーザ名&password =password
    • jdbc:sqlserver://ホスト名:ポート; user =ユーザ名;パスワード=password
    • jdbc:oracle:thin:ユーザ名/password@ //ホスト名:ポート
    • jdbc:postgresql://ホスト名:ポート/ database?user =ユーザ名&password =password
  • MySQLデータベースを使用している場合は、パスワードに円記号(\)文字が含まれていないことを確認してください。
  • SQLステートメント: インスタンスの検出に使用されるデータベースエンジンでサポートされるSQLクエリ。 たとえば、次のクエリを実行できます。 information_schema.tables から * を選択します。 or スレーブステータスを表示 mysqlの場合。
  • ディスカバリータイプ: XNUMXつの検出タイプがあります。列の属性| 行の属性| データベースリスト| インスタンスリスト
  • 列の属性: SQLステートメントは、複数の列のうちXNUMX行のみを返す必要があります。 列名が属性名として使用され、その列の最初の行のエントリが属性値です。 これらの属性 インスタンスとして検出されません、ではなく、フィルタリングのみを目的としています。 属性と値がフィルター基準を満たしている場合、 XNUMXつ インスタンスはポートごとに検出されます。
  • 行の属性: SQLステートメントは、行数が異なるXNUMXつの列を返す必要があります。 最初の列は属性名として使用され、XNUMX番目の列は属性値として使用されます。 これらの属性 インスタンスとして検出されません、ではなく、フィルタリングのみを目的としています。 属性と値がフィルター基準を満たしている場合、 XNUMXつ インスタンスはポートごとに検出されます。
  • データベースリスト: このオプションは、監視対象の他のデータベースについてグローバルデータベースにクエリを実行することを目的としています。 SQLステートメントは、使用されるポートと連結されたデータベースのリストを返すことを期待しています。 この値は、JDBCURLで使用できます。 リストされた各データベースは、インスタンスとして返されます。
  • インスタンスリスト: SQLステートメントの結果がインスタンスとして使用されます。 クエリは、さまざまな行数の単一の列のみを返す必要があります(たとえば、「顧客から名前を選択」)。
  • Oracle SID: Oracleデータベースへの接続に使用するSID。
  • ポート番号リスト: ActiveDiscoveryがチェックする必要のあるポートのコンマ区切りリスト。 これらのポートで検出されたデータベースサービスは、指定された検出タイプに従ってインスタンスとして返されます。

ポート番号リストパラメータが定義されていない場合、ポート番号はデバイスプロパティから取得されます

jdbc。XXXX。ポート

(どこで XXXX mysql、mssqlなどです)。 このデバイスプロパティも定義されていない場合、ActiveDiscoveryは次のデフォルトポートを使用します。

3306 / MYSQLの場合。 対応するプロパティはjdbc.mysql.portです。
1433、1434 / MSSQLの場合。 対応するプロパティはjdbc.mssql.portです。
1521、1526 / ORACLEの場合。 対応するプロパティはjdbc.oracle.portです。
5432 / POSTGREの場合。 対応するプロパティはjdbc.postgres.portです。

注: データベースインスタンスにデフォルトのポートを使用していない場合は、このフィールドでポートを宣言する必要があります。

  • セパレータ: このフィールドは、検出タイプがに設定されている場合にのみ有効です。 データベースリスト。 ここで指定する区切り文字は、次の方法でポート番号とデータベース名を連結してインスタンス名を作成するために使用されます。 ポート番号セパレーターdatabaseName.

行の属性

使い方 行の属性 検出タイプ、ポートリスト内のポートで検出されたデータベースサービスは、SQLステートメントをそれらに対して実行できる場合、インスタンスとして返されます。 フィルタが定義されている場合、フィルタを通過したインスタンスのみがインスタンスとして検出されます。

この検出方法を使用する場合、返されるActiveDiscoveryワイルド値はポート番号です。

次の例では、このデータベースがポート3306で検出されていると想定します。

mysql> desc robin_test;
フィールド ヌル キー デフォルト 余分
id int(11) NO PRI NULL 自動増加
データソースID int(11) NO NULL
varchar(64) NO NULL
varchar(16384) NO NULL
コメント varchar(1024) NO NULL
mysql> select * from robin_test;
id データソースID コメント
1 1 テスト-1 テスト-1 コメント-1
2 2 テスト-2 テスト-2 コメント-2

JDBC ActiveDiscoveryパラメーターが次のように構成されている場合:

例

SQLステートメントは、XNUMX列のテーブルになります。

id
テスト-1 1
テスト-2 2

ワイルド値が3306のインスタンスがXNUMXつ検出されます。

XNUMXつのフィルターが定義されており、ActiveDiscoveryパラメーターが次のように指定されていると想定します。

例

SQLステートメントは、XNUMX列のテーブルになります。

id
テスト-1 1
テスト-2 2

最初の属性はフィルター基準を満たしているため、3306つのインスタンスがワイルド値XNUMXで返されます。

XNUMXつのフィルターが定義されており、ActiveDiscoveryパラメーターが次のように指定されていると想定します。

例

SQLステートメントは、XNUMX列のテーブルになります。

id
テスト-1 1
テスト-2 2

返される属性はフィルター基準を満たしていないため、インスタンスは返されません。

列の属性

使い方 列の属性 検出タイプの場合、ポートリスト内のポートで実行されているデータベースサービスは、SQLステートメントを実行できる場合、インスタンスとして検出されます。 フィルタが定義されている場合、フィルタ条件を満たすインスタンスのみがインスタンスとして検出されます。

[列の属性]検出タイプを使用する場合、返されるActiveDiscoveryワイルド値はポート番号です。

前のサンプルデータベースを続行し、フィルターがなく、ActiveDiscoveryパラメーターが次のように指定されていると仮定します。

例

SQLステートメントは、XNUMX列のテーブルになります。

id
1
2

ワイルド値が3306のインスタンスがXNUMXつ検出されます。

フィルタがXNUMXつあり、ActiveDiscoveryパラメータが次のように指定されていると仮定します。

例

SQLステートメントは、XNUMX列のテーブルになります。

id
1
2

属性がフィルター基準を満たしているため、ワイルド値3306のインスタンスがXNUMXつ検出されます。

XNUMXつのフィルターが定義されており、ActiveDiscoveryパラメーターが次のように指定されていると想定します。

例

SQLステートメントは、XNUMX列のテーブルになります。

id
1
2

属性がフィルターに適合しないため、インスタンスは検出されません。

データベースリスト

使用している場合 データベースリスト ディスカバリータイプ、アクティブディスカバリーワイルドバリューは次のとおりです。

ポートセパレータSQLstatementRowResult

データベースにXNUMXつのテーブルがあると仮定します。

+ --------------------- + | Tables_in_test | + --------------------- + | robin_test | + --------------------- + | robin_test_1 | + --------------------- +

また、次のActiveDiscoveryパラメーターを構成しました。

次のテーブルはインスタンスとして検出され、次のように名前が付けられます。

  • 3306:robin_test
  • 
3306:robin_test_1

インスタンスリスト

使用している場合 インスタンスリスト ディスカバリー・タイプであるActive Discoveryワイルド値は、SQLステートメントの結果です。

このメソッドは、データベースリストメソッドと同様に、SQLクエリから返された情報を使用してインスタンスを作成し、クエリは各行の値がインスタンスと等しい単一の列テーブルを返す必要があります。

次のSQLクエリについて考えてみます。

mysql> select * from robin_test;
id データソースID コメント
1 1 テスト-1 テスト-1 コメント-1
2 2 テスト-2 テスト-2 コメント-2

そして、次のActiveDiscovery構成:

検出されるインスタンスは1と2になります。

インスタンスリスト検出タイプを使用して、データベース内のオブジェクトを検索し、データソースからさらにクエリを実行できます。

例

これにより、データソースが適用される各ホストで、デフォルトのmysqlポート3306でクエリに応答するcustomersテーブルの各エントリのインスタンスが返されます。

データソースは、メインのJDBCコレクターで、接続文字列(各顧客が独自のデータベースを持っている場合)またはクエリでこのインスタンスを使用できます。

Customers.name = '## WILDVALUE ##'の顧客からcount(orders)を選択します
記事上で