Red Hat Training

A Red Hat training course is available for Red Hat JBoss Operations Network

12.7. 監視

12.7.1. リソースの可用性

新しい Web アプリケーションのデプロイなど、ターゲットリソースが実行している場合にのみ実行される必要があります。より大きなスクリプトに可用性チェックを含めると、状態依存操作が実行されるタイミングを制御するのに役立ちます。
スクリプトの手順は次のとおりです。
  1. リソースを検索します。この場合、スクリプトはリソースタイプ(Linux プラットフォーム)に一致するリソースのみを検索し、可用性スキャンに最初に一致します。
  2. 現在の可用性ステータスを取得します。

例12.23 現在の可用性

// get the resource ID
criteria = new ResourceCriteria();
criteria.addFilterResourceTypeName('Linux')

var res = ResourceManager.findResourcesByCriteria(criteria);

// check the current availability
AvailabilityManager.getCurrentAvailabilityForResource(res.get(0).id)
JBoss ON サーバーは、リソース情報、現在のステータス、および現在のステータスの開始時間を返します(サーバーが稼働している場合、サーバーが起動した時間)。
Availability:
        availabilityType: UP
                 endTime:
                      id: 10192
                resource: Resource[id=10001, uuid=null, type=<null>, key=null, name=null, parent=<null>]
	       startTime: 1335974397214

12.7.2. 特定のメトリクスの取得

JBoss ON のモニタリング情報はライブ読み取りではありません。スキャンには、ストリーミングではなく定期的にスキャンがあり、ベースラインと平均の情報は(集計)されるという 2 つの理由があります。
The findLiveData method は、現在の、対象外の、指定のメトリクスのライブ読み取りをプルする方法です。
スクリプトの手順は次のとおりです。
  1. リソースタイプに基づいて利用可能なメトリクス定義を検索し、単一のメトリクスに絞り込みます。この例では、Linux プラットフォームの空きメモリーメトリックを取得します。
  2. リソースを検索します。
  3. メトリックの現在の読み取りを取得します。
  4. ターミナルにデータを出力します。

例12.24 アノテーション付きの例

// search for the resource
criteria = new ResourceCriteria();
criteria.addFilterResourceTypeName('Linux');
var resources = ResourceManager.findResourcesByCriteria(criteria);

// search for the resource type to use in the metrics definition
var rt = ResourceTypeManager.getResourceTypeByNameAndPlugin("Linux", "Platforms");

// search for the metric definition
var mdc = MeasurementDefinitionCriteria();
mdc.addFilterDisplayName("Free Memory");
mdc.addFilterResourceTypeId(rt.id);
var mdefs =  MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(mdc);

//get the data
var metrics = MeasurementDataManager.findLiveData(resources.get(0).id, [mdefs.get(0).id]);

// as a nice little display, print the retrieved metrics value
if( metrics !=null ) {
        println(" Metric value for " + resources.get(0).id + " is " + metrics );
}
この例では、メトリックの現在のライブ読み取りが画面に出力されます。
 Metric value for 10001 is [MeasurementDataNumeric[value=[6.3932239872E10], MeasurementData [MeasurementDataPK: timestamp=[Tue May 08 20:10:15 EDT 2012], scheduleId=[10002]]]]

12.7.3. リソースのメトリックデータのエクスポート

raw メトリクスデータは、デフォルトで 1 週間のみデータベースに保存されます。その後、処理された(集計)データのみが保存されます。長期的な履歴データを保持できるように、raw 測定を CSV またはテキストファイルにエクスポートすると便利です。
スクリプトの手順は次のとおりです。
  1. リソースタイプに基づいて、利用可能なメトリック定義を検索します。この例では、Linux プラットフォーム用です。
  2. リソースを検索します。
  3. メトリック情報の日付範囲を設定します。これは、スクリプトが実行される時間との対比で秒単位で設定されます。
  4. データを書き込むファイル情報を設定します。
  5. リソースのすべてのメトリクス定義を繰り返し処理し、指定された CSV ファイルにデータを出力します。

例12.25 Linux サーバーのすべてのメトリクス定義のエクスポート

// search for the available metrics definitions
var rt = ResourceTypeManager.getResourceTypeByNameAndPlugin("Linux","Platforms")
var mdc = MeasurementDefinitionCriteria();
mdc.addFilterResourceTypeId(rt.id);
var mdefs =  MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(mdc);

// search for the resource
criteria = new ResourceCriteria();
criteria.addFilterResourceTypeName('Linux')
var resources = ResourceManager.findResourcesByCriteria(criteria);

// give the date range for the metrics collection
// this is in seconds
var start = new Date() - 8* 3600 * 1000;
var end = new Date()

// setup up the CSV to dump the data to
exporter.file = '/opt/myfile.csv'
exporter.format = 'csv'


// iterate through the metrics definitions for the resource
// and export all the collected metrics for all definitions
// within the given date range
if( mdefs != null ) {
  if( mdefs.size() > 1 ) {
     for( i =0; i < mdefs.size(); ++i) {
          mdef = mdefs.get(i);
          var data = MeasurementDataManager.findDataForResource(resources.get(0).id,[mdef.id],start,end,1)

	  exporter.write(data.get(0)); // write the data to the CSV file
     }
  }
  else if( mdefs.size() == 1 ) {
     mdef = mdefs.get(0);
     var data = MeasurementDataManager.findDataForResource(resources.get(0).id,[mdef.get(0).id],start,end,60)
     exporter.write(data.get(0))
  }
}

12.7.4. ベースラインの算出

ベースラインは、独自のパフォーマンスに基づく、特定リソースの通常の操作範囲です。
ベースラインの取得は非常に簡単です。必要なのはリソース ID です。
rhqadmin@localhost:7080$ MeasurementBaselineManager.findBaselinesForResource(10001)
one row
MeasurementBaseline:
        computeTime: Tue May 08 21:28:05 EDT 2012
                 id: 10001
                max: 6.4005419008E10
               mean: 6.3933904981333336E10
                min: 6.380064768E10
           schedule: [MeasurementSchedule, id=10002]
        userEntered: true