Groovyのヒントとコツ

LogicMonitorの 埋め込まれたGroovyスクリプト engineは、システムおよびデバイスからインストルメンテーションデータを取得するために特別に選択された多数のヘルパークラスを提供します。 次のヒントとコツをご覧ください。

単純なHTTPAPIの呼び出し

多くのデバイスには独自のHTTPAPIがあり、デバイスのパフォーマンスデータを取得するためにアクセスする必要があります。 簡単な例については、次の例を参照してください。ここでは、NetAppEシリーズRESTAPIにフラッシュキャッシュの詳細を照会します。

 
// logicmonitorhttpおよびjsonslurperクラスをインポートしますimportcom.santaba.agent.groovyapi.http。*; import groovy.json.JsonSlurper; //デバイスプロパティテーブルからホスト、資格情報、および管理ステーションbaseurlを取得しますhostname = hostProps.get( "system.hostname"); userid = hostProps.get( "netapp.rest.user"); passwd = hostProps.get( "netapp.rest.pass"); base_url = hostProps.get( "netapp.rest.url"); //完全なエンドポイントURLを作成しますendpoint_url = base_url + "/ devmgr / v2 / storage-systems /" +ホスト名+ "/ flash-cache"; // APIからデータをフェッチしますhttp_body = HTTP.body(endpoint_url、userid、passwd); //この場合、http本体はjsonデータ構造です// jsonslurperを使用して、jsonテキストをGroovyオブジェクトに変換しましょうjson_slurper = new JsonSlurper(); response_obj = json_slurper.parseText(http_body); //応答オブジェクトを反復処理し、キーと値のペアを割り当てますresponse_obj.each(){key、value-> //各キーと値のペアを出力しますprintlnkey + "=" + value; } //正常に実行されたことを示す応答コードで戻りますreturn(0);

この場合、必要に応じてキーと値のポストプロセッサを使用して値を分離し、関心のあるキーと値のペアごとにデータポイントを作成する必要があります。

外部プロセスの実行

一部のデバイスでは、データを抽出するためにCLIツールまたはコンパイル済みバイナリを実行する必要があります。 Groovyでこれを行うには、次のようにします。

// get the device hostname and cli credentials
hostname = hostProps.get("system.hostname");
cli_user = hostProps.get("cli.user");
cli_pass = hostProps.get("cli.pass");

// define the external commmand you want to run
command = "/usr/local/bin/ipmiutil sensor -c -N " + hostname + " -U " + cli_user + " -P " + cli_pass;

// setup some buffers to hold process stdout & stderr
process_output = new StringBuffer();
process_errors = new StringBuffer();

// execute the command
process = command.execute();
// collect the stdout & stderr from the process
process.waitForProcessOutput(process_output, process_errors);

// kill the process if it runs for longer than we expect (30 seconds)
process.waitForOrKill(30000);

// did the process exit with a successful return code?
if (process.exitValue() == 0)
{
    // yes, the process ran successfully -- process the output as necessary and print it out 
    println process_output;

    // return with a response code that indicates we ran successfully
    return(0);
}
else
{
    // no, the process failed -- print some diagnostics and stderr
    println 'Execution of Process: "' + command + '" failed with an exit code of "' + process.exitValue() + '"';
    println process_errors;

    // return with a response code that indicates some failure
    return(1);
}

DNSとの相互作用

コレクターには、DNSオブジェクトのスクリプトを許可する機能が含まれています。 これは、ローカルDNSリゾルバーの動作を確認する必要がある場合に便利です。

特定のDNSレコードの解決を確認できる簡単な例を次に示します。

 
// xbilldnsヘルパークラスをインポートしますimportorg.xbill.DNS。*; // DNSルックアップを実行し、records = new Lookup( "gmail.com"、Type.MX).run()//レコードリストを反復処理しますrecords.each(){address-> //アドレスレコードを出力しますprintlnaddress ; } //正常に実行されたことを示す応答コードで戻りますreturn(0);

これをデータポイントポストプロセッサと組み合わせて使用​​すると、特定のアドレスの存在を検索し、見つからない場合はアラートをトリガーできます。

見る http://dnsjava.org/dnsjava-current/doc/ このクラスの完全なドキュメントについては。

記事上で