2011-12-01

Überwachungsvorlagen im Enterprise Manager Grid Control 11g: Quellcode zum Vergleich der Metrik-Werte aus den Überwachungsvorlagen und den Zielsystemen

Im Enterprise Manager Grid Control kann die Konfiguration von Metriken und deren Schwellwerten über alle Datenbanken und anderen Ziele hinweg mit Überwachungsvorlagen vereinfacht und vereinheitlicht werden. Was ist jedoch, wenn in einer gewachsenen Oracle-Infrastruktur nachträglich die Überwachung vereinheitlicht werden soll?

Dann ist ein aufwändiger Abgleich bereits vorhandener Metrikeinstellungen zwischen einer Vorlage und dem Zielsystem bzw. zwischen den Zielsystemen untereinander nötig. Im Enterprise Manager Grid Control kann immer nur ein Zielsystem mit einer Vorlage verglichen werden. Das ist somit sehr mühselig.

Mit Hilfe des folgenden Codes kann eine komplette Ansicht der Metrikwerte der gewünschten Vorlagen und der gewünschten Zielsysteme generiert werden.

Code:

1. Anlegen der Tabellen:

-- Tabelle anlegen
create table TEAM_METRIC_VERGLEICH
(
  ZEILE            NUMBER,
  TYP              VARCHAR2(7),
  TEMPLATE_NAME    VARCHAR2(64),
  TARGET_NAME      VARCHAR2(256),
  TARGET_TYPE      VARCHAR2(64),
  METRIC_NAME      VARCHAR2(64),
  COLUMN_LABEL     VARCHAR2(323),
  SPALTEN_LABEL    VARCHAR2(323),
  COLLECTION_NAME  VARCHAR2(64),
  KEY_VALUE        VARCHAR2(256),
  WARN             VARCHAR2(4000),
  CRIT             VARCHAR2(4000),
  DIFF             CHAR(1),
  VATER            NUMBER,
  GRUPPE           NUMBER,
  OCCURRENCE_COUNT NUMBER,
  METRIC_GUID      RAW(16),
  TARGET_GUID      RAW(16),
  TEMPLATE_GUID    RAW(16)

);

-- Create table
create table TEAM_TARGETS_METRIC
(
  TARGET_NAME     VARCHAR2(256) not null,
  TARGET_TYPE     VARCHAR2(64) not null,
  TYPE_QUALIFIER1 VARCHAR2(64),
  HOST_NAME       VARCHAR2(256),
  GRUPPE          VARCHAR2(256),
  DATENBANK       VARCHAR2(256),
  METRIC_KNZ      NUMBER,
  RULES_KNZ       NUMBER,
  TARGET_GUID     RAW(16) not null
);

Bsp.:

insert into TEAM_TARGETS_METRIC
select    target_name, target_type, t.type_qualifier1, t.host_name,
  decode(target_type, 'host', '------------------', target_name) gruppe,
  decode(target_type, 'host', '------------------', target_name) datenbank,
            -1 metric_knz,
            0 rules_knz,           
      target_guid
from MGMT$TARGET t
where  t.target_type in ( 'host' ,'oracle_database','rac_database');

2. Skript zur Vergleichsberechnung:

declare
/*
Kurzbeschreibung:
Innerhalb dieses Skripts wird die Tabelle TEAM_METRIC_VERGLEICH mit den Metrik-Daten der Vorlagen und der Zielsystem (Datenbankinstanzen, Host, ..) gefüllt. Danach werden die Werte der Metriken zwischen der Vorlage und der Ziele miteinander verglichen.

Voraussetzung:
1) Der Name der Vorlagen, deren Metriken mit den Ziel-Metriken verglichen werden sollen, haben einen eindeutigen Präfix. Bsp.: „Vorlage_“.
Der Präfix muss in das nachfolgende Skript eingetragen werden.
2) Es werden für den Vergleich nur die Ziele verwendet, die in der Spalte METRIC_KNZ der Tabelle TEAM_TARGET_METRIC eine 1 stehen haben.
  
select target_name from team_targets_metric where metric_knz = 1
*/

k_vorlage_praefix   varchar2(80) := 'Vorlage_';

begin
-- Alten Daten löschen
delete from TEAM_METRIC_VERGLEICH;

-- Fülle die Tabelle mit den Vorlagen-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, template_guid, metric_guid )
select   'VORLAGE' typ,  t.template_name, '- Vorl.' target_name, t.target_type, t.metric_name,
            t.column_label,  t.column_label spalten_label,     t.collection_name, t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit,
            null , '-' diff, 0 vater, template_guid, metric_guid
from MGMT$TEMPLATE_METRIC_SETTINGS t
where  template_name like k_vorlage_praefix||'%'
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Fülle die Tabelle mit den Ziel-Metrik-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, target_guid, metric_guid )
 select  'TARGET' typ, '' ,  t.target_name, t.target_type, t.metric_name,
            t.column_label, t.column_label spalten_label, t.collection_name , t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit        
           ,occurrence_count ,'-' diff  , -1 vater, target_guid, metric_guid
     from MGMT$TARGET_METRIC_SETTINGS t
     where target_name in (select target_name from team_targets_metric where metric_knz = 1  )
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Berechnung

--    Vorbereitung
update TEAM_METRIC_VERGLEICH set key_value = ' '
where key_value is null ;

update TEAM_METRIC_VERGLEICH set spalten_label = replace(spalten_label,' - '||key_value),
      vater = zeile,
      diff = '.'
where typ = 'VORLAGE';

-- Sonderbehandlung für User Defind Metriken
update TEAM_METRIC_VERGLEICH set spalten_label = collection_name
where typ = 'TARGET'
  and metric_name in ( 'SQLUDM', 'SQLUDMNUM', 'SQLUDMSTR');
  

update TEAM_METRIC_VERGLEICH set key_value = ''
where spalten_label = key_value;

-- Template-Name zu den Ziel-Zeilen hinzufügen
update TEAM_METRIC_VERGLEICH t set (template_name, template_guid) =
   (  select distinct template_name, template_guid
         from TEAM_METRIC_VERGLEICH v
      where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
   )
where typ = 'TARGET';

-- Differenz berechnen: für Metriken mit einem KEY_VALUE- Wert
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and t.key_value  = v.key_value
              and t.spalten_label  = v.spalten_label        
   )
where typ = 'TARGET'
  and template_name is not null
  ;

-- Differenz berechnen: für die restlichen Metriken
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and v.key_value  = ' '
              and t.spalten_label  = v.spalten_label
   )
where typ = 'TARGET'
  and template_name is not null
  and diff is null
  ;

commit;

end;

3. Anzeige:

select nvl(p.gruppe,'X') nr, nvl(p.nr,999) nr, m.*
from   team_pruefungen  p,
(     select  v.template_name,  v.target_name,  v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
               v.spalten_label sortierung, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and typ = 'VORLAGE'
      union all
      select  v.template_name, v.target_name, v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
            v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and  typ = 'TARGET'
      union all
      select  distinct v.template_name,  '***************','********','********','********','********','********', 
              metric_guid gruppe,  null, '********', v.target_type, 
              v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where typ = 'VORLAGE'
)    m
where m.gruppe = p.metric_guid(+)
order by 1, 2, 10, 4, 6
;

Den Artikel zu diesem Code finden Sie in der DOAG News Ausgabe 6/Dezember 2011
Thema: „Überwachungsvorlagen im Enterprise Manager Grid Control 11g,
Vergleich und Vereinheitlichung von überwachten Metriken“
Autoren: Claudia Gabriel und Ralf Appelbaum, TEAM GmbH

Keine Kommentare:

Kommentar veröffentlichen