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