Oracle Enterprise Manager アドバンスト構成 10gリリース5(10.2.0.5.0) B53907-01 |
|
ユーザー定義メトリックを使用すると、カスタム・スクリプトまたはSQL問合せおよびファンクション・コールを介して、特定の環境での固有の条件に対応できるようにEnterprise Managerの監視対象範囲を拡張できます。定義したユーザー定義メトリックは通常のメトリックと同様に、監視され、リポジトリ内に集計され、アラートをトリガーします。
この章では次のトピックについて説明します。
次の2種類のユーザー定義メトリックがあります。
特定の条件(たとえば、毎月のシステム・メンテナンス・ルーチンの正常完了のチェックなど)を監視するには、その条件を監視するカスタム・スクリプトを作成してから、カスタム・スクリプトを使用するOSベースのユーザー定義メトリックを作成します。Enterprise Managerでメトリックが評価されるたびに、指定したスクリプトが使用され、そのスクリプトに基づいて条件の値が返されます。
SQLベースのユーザー定義メトリックでは、外部スクリプトを使用しません。メトリック作成時に、Enterprise Managerユーザー・インタフェースにSQLを直接入力します。
ユーザー定義メトリックを作成した後は、その他すべての監視機能(アラート、通知、履歴収集、修正処理など)が、そのメトリックに対して自動的に使用可能になります。
カスタム監視スクリプトの固有ライブラリをすでに持っている管理者は、ユーザー定義メトリックを介してそれらのスクリプトとEnterprise Managerを統合することで、これらの監視機能を強化できます。同様に、SQLベースのユーザー定義メトリックを使用すると、現在データベース条件の監視に使用されている既存のSQL問合せまたはファンクション・コールを、Enterprise Managerの監視フレームワーク内に簡単に統合できます。
OSベースのユーザー定義メトリックを作成するには、次の2つの手順を実行します。
任意のスクリプト作成言語を使用して、監視対象条件をチェックするためのロジックを含むスクリプトを作成します。たとえば、ディスク領域やメモリー使用量をチェックするスクリプトを作成します。ユーザー定義メトリックを介して実行するスクリプトはすべて、管理エージェントが完全アクセス権限を持つディレクトリ内に配置する必要があります。管理エージェントがスクリプトを実行できるように、スクリプトそのものに必要な権限セットを含める必要があります。また、スクリプトの実行時環境も構成する必要があります。スクリプトで(Perlインタプリタのような)インタプリタを必要とする場合、インタプリタもそのホストにインストールする必要があります。
すべての監視スクリプトには、次のような基本機能を実行するコードを記述する必要があります。
特定のファイル・システムの空き領域の判別や、メモリー使用量のレベルの判別など、監視対象の条件をチェックするロジックをコード内に定義します。
スクリプトは、監視対象の条件をチェックした後、監視対象オブジェクトと関連付けられた値を返す必要があります。
監視対象オブジェクト(たとえば、現在のディスク領域使用量など)から特定の値を返すスクリプトを作成することにした場合、オブジェクトの現行値が特定の警告およびクリティカルのしきい値と比較して評価されるようにEnterprise Managerを設定することもできます。これらの警告およびクリティカルのしきい値は、ユーザー定義メトリックの作成時にGrid Controlコンソールから指定します。しきい値に対するメトリックの値の評価に基づいて、次のいずれかの重大度レベルでアラートをトリガーできます。
重大度レベル | ステータス |
---|---|
スクリプトの失敗 |
スクリプトが正常に実行されなかった。 |
消去 |
監視対象オブジェクトに関する問題はない。ステータスは「消去」です。メトリックにしきい値が指定されていた場合は、しきい値に達していないということです。 |
警告 |
監視対象オブジェクトの値が警告のしきい値に達した。 |
クリティカル |
監視対象オブジェクトの値がクリティカルのしきい値に達した。 |
スクリプトは、監視対象の条件をチェックした後、監視対象オブジェクトと関連付けられた値を返す必要があります。スクリプトは、スクリプト言語に対応する構文(たとえば、Perlではprint文)を使用して標準出力(stdout)に書式設定済情報を送ることにより、Enterprise Managerに値を返します。次にEnterprise Managerが、スクリプトの標準出力でこの書式設定済情報をチェックします。特に、em_resultおよびem_messageと、これらのタグに割り当てられた値をチェックします。
スクリプトでは、監視対象オブジェクトの値をタグem_resultに割り当てる必要があります。出力は、文字列を改行文字で区切って記述する必要があります。たとえば監視対象オブジェクトの値が200の場合、次のPerl文を指定すると、スクリプトはこの値をEnterprise Managerに返すことができます。
print "em_result=200¥n"
また、返された値が指定の警告およびクリティカルのしきい値と比較して評価されるようにEnterprise Managerを設定することもできます。これらの警告およびクリティカルのしきい値は、コンソールでスクリプトをユーザー定義メトリックとして登録するときに指定します。
警告またはクリティカルのしきい値の比較で条件に合致した場合は、警告またはクリティカルのアラートが生成されます。このアラートのデフォルト・メッセージは、次のとおりです。
"The value is $em_result".
使用する文字列をタグem_messageに割り当てることにより、このデフォルト・メッセージをカスタム・メッセージで上書きするように選択できます。
たとえば、「Disk usage is high」というアラート・メッセージを表示する場合、次のように記述すると、スクリプトはこのカスタム・メッセージを返すことができます。
print "em_message=Disk usage is high¥n"
スクリプトが正常に実行されるためには、スクリプト出力は、新しい行で「em_result=」という文字列で開始する必要があります。メッセージは、新しい行で「em_message=」という文字列で開始する必要があります。
次の表は、スクリプト出力タグについてまとめたものです。
ユーザー定義監視スクリプトの出力は、em_resultまたはem_messageのいずれかです。システム・エラーが発生した場合(たとえば、Perlで無効なコマンドが原因で中断したり、STDERRに情報が書き込まれた場合など)、スクリプトは次のものを返します。
このエラー状況により、このユーザー定義メトリックのメトリック・エラーが発生します。メトリック・エラーは、Enterprise Managerコンソールの「アラート」タグの「エラー」ページに表示されます。
ユーザー定義メトリックのOSスクリプトは、エージェントOracleホーム以外の場所に置くことをお薦めします。そうすることで、スクリプトは、エージェントのアップグレードに起因する変更の影響を受けることなく、常に使用可能な状態になります。Grid Controlコンソールでスクリプトを登録するときに、スクリプトのフルパスを指定する必要があります。「使用可能なプロパティ」(たとえば、%scriptsDir%や%emdRoot%など)をパス指定の一部として使用しないでください。
ユーザー定義メトリックの評価時には、Enterprise Managerコンソールでのユーザー定義メトリックの登録時に指定した資格証明(ユーザー名およびパスワード)を使用してスクリプトが実行されます。「ユーザー定義メトリックとしてのスクリプトの登録」を参照してください。ユーザー定義メトリックに指定するユーザー名およびパスワードは必ず、スクリプトの実行に必要な権限を所有する(そのマシン上で)アクティブなアカウントにしてください。
監視スクリプトを作成した後は、この監視機能をユーザー定義メトリックとしてEnterprise Managerに追加できます。
ユーザー定義メトリックを作成してから、重大度を最近更新していない場合、ユーザー定義メトリックの実行に関連するメトリック・エラーが存在している可能性があります。このような場合、「アラート」タブから「エラー」サブタブにアクセスしてチェックしてください。
「ユーザー定義メトリックの作成」ページでは、Enterprise Managerにメトリックを登録するために必要なメトリック情報を指定できます。このページは、機能別に次のカテゴリに分かれています。
次の図に、OSベースのユーザー定義メトリックの「ユーザー定義メトリックの作成」ページを示します。ホストのホームページからこのページにアクセスすると、図14-1のような「ユーザー定義メトリックの作成」ページが表示されます。
次の各表で、このページの主要な要素について説明します。
ユーザー・インタフェースの要素 | 説明 |
---|---|
ユーザー名 |
スクリプトを実行するマシン上の有効なオペレーティング・システム・アカウントのユーザー名を入力します。指定したアカウントに、必要なスクリプト・ディレクトリへのアクセス権限およびスクリプトの実行権限があることを確認してください。 |
パスワード |
ユーザー名と関連付けられたパスワードを入力します。 |
「ユーザー定義メトリック」の「スケジュール」インタフェースでは、管理エージェントが監視を開始する時刻、およびOSスクリプトを使用して条件を監視する頻度を指定できます。
この例で使用するPerlスクリプトは、システムの5分間の平均負荷を監視するものです。uptimeコマンドを使用して過去5分間の実行キューにおけるジョブの平均数を取得することによって、この機能を実行しています。
スクリプトはPerlで記述されており、監視対象ターゲット上の/usr/local/binにPerlインタプリタが存在することを想定しています。
このスクリプトはudmload.pl
という名前で、ユーザーが定義した共通管理スクリプト・ディレクトリにインストールされます。たとえば、/u1/scriptsというディレクトリにインストールされます。
スクリプトの完全テキスト:
#!/usr/local/bin/perl # Description: 5-min load average. # Sample User Defined Event monitoring script. $ENV{PATH} = "/bin:/usr/bin:/usr/sbin"; $DATA = `uptime`; $DATA =~ /average:¥s+([¥.¥d]+),¥s+([¥.¥d]+),¥s+([¥.¥d]+)¥s*$/; if (defined $2) { print "em_result=$2¥n"; } else { die "Error collecting data¥n"; }
em_result=2.1
5分間の負荷が少なくとも0.001に達した場合、メトリックがアラートをトリガーする必要があります。
Real Application Clusters(RAC)上のシングル・インスタンス・データベースおよび複数のインスタンスに対し、サポートされているカスタムSQL問合せまたはファンクション・コールを使用して新規のメトリックを定義することもできます。このタイプのユーザー定義メトリックを作成するには、データベースに対するEnterprise Managerオペレータ権限を持っている必要があります。
「テスト」をクリックして、指定した資格証明を使用してSQL問合せまたはファンクション・コールを正常に実行できることを確認します。
ユーザー定義メトリックを作成してから、重大度を最近更新していない場合、ユーザー定義メトリックの実行に関連するメトリック・エラーが存在している可能性があります。このような場合、「アラート」タブから「エラー」サブタブにアクセスしてチェックしてください。
「ユーザー定義メトリックの作成」ページでは、Enterprise Managerにメトリックを登録するために必要なメトリック情報を指定できます。このページは、機能別に次のカテゴリに分かれています。
次の図に、SQLベースのユーザー定義メトリックの「ユーザー定義メトリックの作成」ページを示します。データベースのホームページからこのページにアクセスすると、図14-2のような「ユーザー定義メトリックの作成」ページが表示されます。
次の各表で、このページの主要な要素について説明します。
ユーザー・インタフェースの要素 | 説明 |
---|---|
ユーザー名 |
SQL問合せを実行するデータベース上の有効なデータベース・アカウントのユーザー名を入力します。指定したアカウントに、SQL問合せの実行に必要な権限があることを確認してください。 |
パスワード |
ユーザー名と関連付けられたパスワードを入力します。 |
「ユーザー定義メトリック」の「スケジュール」インタフェースでは、SQL問合せまたはファンクションの実行頻度を指定できます。
バージョン9i以上のデータベースの場合、例に示す問合せは、管理エージェントのデフォルトの監視ユーザー・アカウントであるdbsnmpとして実行できます。(SELECT ANY DICTIONARYシステム権限を持たない)8.1.7データベースの場合、問合せが正常に実行されるためには、dbsnmpに対して次の権限を付与する必要があります。
例1:
grant select on sys.dba_tablespaces to dbsnmp; grant select on sys.dba_data_files to dbsnmp; grant select on sys.dba_free_space to dbsnmp;
例2:
grant select on sys.dba_extents to dbsnmp;
前述のgrant文は、「connect internal」を介してログインした後、SYSDBAとして実行できます。また、DBAロールを付与されたユーザーはこれらの問合せを実行できます。
このユーザー定義メトリックの例では、ディクショナリ管理の永続表領域に使用される領域の割合を監視します。DBAは、表領域のデータファイルを追加する時期を判断する目安としてこの値を使用できます。
ポーリングの頻度は30分間、警告のしきい値は75、クリティカルのしきい値は85に設定することをお薦めします。
SELECT d.tablespace_name, round(((a.bytes - NVL(f.bytes,0))*100/a.maxbytes),2) used_pct FROM sys.dba_tablespaces d, (select tablespace_name, sum(bytes) bytes, sum(greatest(maxbytes,bytes)) maxbytes from sys.dba_data_files group by tablespace_name) a, (select tablespace_name, sum(bytes) bytes from sys.dba_free_space group by tablespace_name) f WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) AND NOT (d.extent_management = 'LOCAL' AND d.contents = 'TEMPORARY')
このユーザー定義メトリックの例では、エクステントの数が多くなっているSYSTEM以外の表セグメントおよび索引セグメントをチェックします。エクステントの数が多い場合、セグメントが断片化されているか、パフォーマンスの問題が存在するか、あるいはその両方の可能性があります。DBAは、Enterprise Managerでセグメントの縮小または再編成ウィザードを呼び出す時期を判断する目安としてこの値を使用できます。
ポーリングの頻度は24時間、警告のしきい値は1000、クリティカルのしきい値は2000に設定することをお薦めします。
SELECT decode(nvl(partition_name, ' '), ' ', owner || '.' || segment_name || ' ' || segment_type, owner || '.' || segment_name || '.' || partition_name || ' ' ||
segment_type) as segment, count(extent_id) as extent_count FROM dba_extents WHERE (segment_type like 'TABLE%' OR segment_type like 'INDEX%') AND (owner != 'SYSTEM' AND owner != 'SYS') GROUP BY owner, segment_name, partition_name, segment_type ORDER BY EXTENT_COUNT DESC
SQLベースのユーザー定義メトリックを形成するSQL文が1024文字を超える場合は、SQL文をPL/SQLルーチンに埋め込む必要があります。その作業は、3つのステップで実行します。この例では、1つの長いSQL文を使用して表領域と表領域の中の空き領域を監視し、ユーザー指定のしきい値を空き領域が下回ったらアラートが発生します。この問合せを使用して、2列のSQLUDMが作成されます。
例14-1の長い(1024文字を超えている)SQL文は、tablespace_name
(キー)およびfree_mb
(値)という2つの値を返します。
select Tablespace, case when (MxAvail <= 15) and (MxFreeMB < 20000) then 'CRITICAL, '||MxUsed||'%' when (MxAvail <= 20) and (MxFreeMB < 20000) then 'WARNING, '||MxUsed||'%' else 'OK' end Error_Level, MxAvail,MxUsed,MxFreeMB,MxExdMB from (select nvl(b.tablespace_name, nvl(a.tablespace_name,'UNKNOWN')) as Tablespace, data_files as NumDBFs, mbytes_alloc as AllocMB, Round( mbytes_alloc-nvl(mbytes_free,0),0) as UsedMB, Round(nvl(mbytes_free,0),0) "AllocFreeMB", Round((( mbytes_alloc-nvl(mbytes_free,0))/ mbytes_alloc)*100,0) as AllocUsed, MaxSize_Mbytes as MxExdMB, Round(MaxSize_Mbytes - (mbytes_alloc-nvl(mbytes_free,0)),0) as MxFreeMB, Round((mbytes_alloc/MaxSize_ Mbytes*100),0) as MxUsed, Round((MaxSize_Mbytes - (mbytes_alloc-nvl(mbytes_ free,0)))/MaxSize_Mbytes *100,0) as MxAvail from ( select sum(bytes)/1024/1024
mbytes_free, max(bytes)/1024/1024 largest,tablespace_name from sys.dba_free_space group by tablespace_name ) a, ( select sum(bytes)/1024/1024 mbytes_alloc, sum(decode(maxbytes,0,bytes,maxbytes))/1024/1024 MaxSize_Mbytes, tablespace_ name,count(file_id) data_files from sys.dba_data_files group by tablespace_name )b where a.tablespace_name (+) = b.tablespace_name order by 1)
2列のSQL UDM(表領域、free_space_in_MB)が作成されるので、次のように、この問合せから返されるデータ用に配列を1つ作成する必要があります。
CREATE OR REPLACE TYPE tablespace_obj as OBJECT ( tablespace_name VARCHAR2(256), free_mb NUMBER ); / CREATE OR REPLACE TYPE tablespace_array AS TABLE OF tablespace_obj; /
次のステップでは、例14-1で示した長いSQL文を、例14-3で示すPL/SQLルーチンに埋め込みます。
CREATE OR REPLACE FUNCTION calc_tablespace_free_mb RETURN tablespace_array IS tablespace_data TABLESPACE_ARRAY := TABLESPACE_ARRAY(); BEGIN SELECT tablespace_obj(tablespace, mxfreemb) BULK COLLECT INTO tablespace_data FROM ( select Tablespace, case when (MxAvail <= 15) and (MxFreeMB < 20000) then 'CRITICAL, '||MxUsed||'%' when (MxAvail <= 20) and (MxFreeMB < 20000) then 'WARNING, '||MxUsed||'%' else 'OK' end Error_Level, MxAvail,MxUsed,MxFreeMB,MxExdMB from (select nvl(b.tablespace_name, nvl(a.tablespace_name,'UNKNOWN')) as Tablespace, data_files as NumDBFs, mbytes _alloc as AllocMB, Round( mbytes_alloc-nvl(mbytes_free,0),0) as UsedMB, Round(nvl(mbytes_free,0),0) "AllocFreeMB", Round((( mbytes_alloc-nvl(mbytes _free,0))/ mbytes_alloc)*100,0) as AllocUsed, MaxSize_Mbytes as MxExdMB, Round(MaxSize_Mbytes - (mbytes_alloc-nvl(mbytes_free,0)),0) as MxFreeMB, Round((mbytes_alloc/MaxSize_Mbytes*100),0) as MxUsed, Round((MaxSize_Mbytes - (mbytes_alloc-nvl(mbytes_free,0)))/MaxSize_Mbytes *100,0) as MxAvail from ( select sum(bytes)/1024/1024 mbytes_free, max(bytes)/1024/1024 largest,tablespace _name from sys.dba_free_space group by tablespace_name ) a, ( select sum(bytes)/1024/1024 mbytes_alloc, sum(decode(maxbytes,0,bytes,maxbytes))/1024/1024 MaxSize_Mbytes, tablespace _name,count(file_id) data_files from sys.dba_data_files group by tablespace_name )b where a.tablespace_name (+) = b.tablespace_name order by 1) ) CUSTOMER_QUERY; RETURN tablespace_data; END calc_tablespace_free_mb; /
このプロセスの最後のステップでは、次の項目を指定して、2列のUDMを作成します。
SELECT tablespace_name, free_mb FROM TABLE(CAST(calc_tablespace_free_mb as TABLESPACE_ARRAY))
ユーザー定義メトリックは他のメトリックと同様に扱われるため、Enterprise Managerの通知システム、修正処理および監視テンプレートを利用できます。
通常のメトリックの場合と同様に、ユーザー定義メトリックのクリティカルまたは警告のアラート重大度に達した場合、電子メール通知を受け取ることができます。電子メール・アドレスおよび通知スケジュールをすでに定義してある場合、後はユーザー定義メトリックの通知ルールを設定するだけです。
通知ルールを設定するには、次のようにします。
「選択」オプションを選択する場合は、ユーザー定義メトリックの名前を入力します。複数のユーザー定義メトリックは、カンマで区切って指定します。特定のユーザー定義メトリックのパターンに一致させる場合、ワイルドカード文字(%)を使用できます。
検索機能(懐中電灯アイコン)を使用すると、使用可能なユーザー定義メトリックを検索できます。ただし、検索結果には、少なくとも1つの収集済データ・ポイントがあるユーザー定義メトリックしか表示されません。新しく作成したユーザー定義メトリックのように、まだ1つもデータ・ポイントが収集されていないメトリックの場合は、「選択」テキスト入力フィールドでそのメトリックを指定する必要があります。
修正処理を使用すると、アラートに対する自動レスポンスを指定できるため、アラートに対するルーチン・レスポンスが自動的に実行されます。修正処理は、SQLベースおよびOSベースのユーザー定義メトリックのどちらにも定義できます。
修正処理を設定するには、次のようにします。
監視テンプレートを使用すると、監視設定を1回指定するだけでその設定を監視対象ターゲットに適用できるため、企業の監視設定の標準化が容易になります。このように、多数のターゲットにユーザー定義メトリックを伝播する方法として監視テンプレートを使用できます。
ホストまたはデータベースのターゲット上にユーザー定義メトリックをすでに作成してある場合は、監視テンプレートを使用して、他のホストまたはデータベースのターゲットにそのユーザー定義メトリックを伝播できます。
ユーザー定義メトリックの監視テンプレートを作成するには、次のようにします。
ユーザー定義メトリックを含むテンプレートを作成した後は、そのテンプレートを他のホストまたはデータベースに適用することにより、ユーザー定義メトリックを伝播できます。
監視テンプレートを適用するには、次のようにします。
重要: 監視テンプレート内に他のメトリックが存在する場合、まず、これらのメトリックに対するこのオプションの含意をEnterprise Managerのオンライン・ヘルプで調べてください。
多数のターゲットにユーザー定義メトリックをデプロイする別の方法としては、Enterprise Managerコマンドライン・インタフェース(EMCLI)を使用する方法があります。EMCLIのapply_template動詞を使用して、ユーザー定義メトリックをカスタム・スクリプト経由でデプロイできます。apply_template動詞の詳細は、『Oracle Enterprise Managerコマンドライン・インタフェース』のマニュアルを参照してください。
多数のターゲットにわたってユーザー定義メトリックをデプロイする場合と同様に、これらのメトリックが不要になったときにも、テンプレートを使用して、それらのターゲットからメトリックを削除できます。
ユーザー定義メトリックの監視テンプレートを作成するには、次のようにします。
監視テンプレートを適用するには、次のようにします。
Enterprise Managerによって、選択済ターゲットで検出されたユーザー定義メトリックのうち、次の条件と一致するメトリックがすべて削除されます。
すでに説明したように、スクリプト/SQL問合せの監視を実行するには、ユーザー定義メトリックに有効な資格情報(ユーザー名およびパスワード)が必要です。このため、監視対象のターゲットのパスワードと、ユーザー定義メトリック内で定義されているパスワードの両方が一致する必要があります。これはターゲットのパスワードが頻繁に変更される場合に問題となります。ターゲットが多数存在する環境では、Enterprise Managerコマンドライン・インタフェース(EMCLI)を使用して、スクリプトによってターゲットのパスワードとユーザー定義メトリックのパスワードを同時に変更できます。update_password動詞を使用してターゲットのパスワードを変更します。その後、特定のユーザー名を使用するEnterprise Managerの全機能にこのパスワードの変更が伝播されます。これには優先資格証明、修正処理、ジョブおよびホストとSQLベースのユーザー定義メトリックの両方が含まれます。
次の例では、OSユーザーsysUserに関するパスワードがsysUserOldPasswordからsysUserNewPasswordへ変更されます。
update_password -target_type=host -target_name=MyHost -credential_type=HostCreds -key_column=HostUserName:sysUser -non_key_column=HostPassword:sysUserOldPassword:sysUserNewPassword
次の例では、データベース・ユーザーsysに関するパスワードがsysPasswordからsysNewPasswordに変更されます。
update_password -target_type=oracle_database -target_name=ORCL
-credential_type=DBCreds -key_column=DBUserName:sys -non_key_column=DBPassword:sysPassword:sysNewPassword:DBAROLE
EMCLIの詳細は、『Oracle Enterprise Managerコマンドライン・インタフェース』のガイドを参照してください。
|
![]() Copyright © 2003, 2009 Oracle Corporation. All Rights Reserved. |
|