W przypadku, gdy agent oczekujący zgłoszeń klientów poprzez sieć komputerową
otrzymuje nowy komunikat UDP, to dokonuje autoryzacji klienta na podstawie jego
adresu IP. W tym celu przetwarzane są informacje zawarte w pliku .known.hosts.
Jeśli nie można otworzyć pliku .known.hosts
do czytania lub adres IP klienta nie pasuje do żadnego z wpisów w tym pliku, to
pakiet UDP jest odrzucany. Dla klientów lokalnych nie jest dokonywana żadna autoryzacja.
Przetwarzanie kolejnego zaakceptowanego komunikatu rozpoczyna się od sprawdzenia,
czy przetwarzana dana już istnieje w Bazie Danych Analizatora Danych SNMP Data. Zakłada
się, że dwie dowolne dane są takie same wtedy i tylko wtedy, gdy ich identyfikatory
(identyfikator taki dostaje np. program damsnmpdi
w postaci argumentu opcji -I) są
sobie równe. Jeżeli nie istnieje to zostaje wpisana do Bazy Danych ze startowymi
wartościami takimi jak: czas utworzenia i modyfikacji, liczby wystąpień itp.
Jeśli dana występowała już wcześniej w Bazie Danych to uaktualniany jest czas
modyfikacji i licznik wystąpień. Jeśli przetwarzana dana jest typu error lub
timeout to zwiększany jest odpowiedni licznik wystąpień, a następnie dana jest
przekazywana procedurze, która wysyła dane na wyjście Analizatora Danych SNMP Data.
W przypadku, gdy dana jest typu counter to obliczany jest przyrost wartości od momentu
ostatniej aktualizacji tej danej. Przyrost ten staje się wartością badaną w dalszym
procesie obróbki tej wiadomości. Kiedy zaś dana jest typu gauge to wartością badaną
jest rzeczywista wielkość tej danej. Następnie jeśli wystąpią określone warunki
informacja o tej danej może zostać przesłana na wyjście Analizatora Danych SNMP Data.
Należy zauważyć, że komunikat jeszcze przed aktualizacją danej istniejącej
w Bazie może zostać odrzucony, kiedy wystąpią pewne, specyficzne warunki. Kiedy
mianowicie identyfikator nadawcy komunikatu jest różny od dotychczasowego nadawcy,
to komunikat nie zostanie uwzględniony. Dopiero po wystąpieniu pewnej
(argument opcji --snmpdf-sender-delay-max)
ilości takich komunikatów, podczas gdy dotychczasowy nadawca nic nie przesyła, zostanie przyznany
tej danej identyfikator nowego nadawcy.
W następnym etapie przetwarzania danej wartość badana jest porównywana z oknem przeciętnych
wartości dla tej danej. Jeśli wartość badana jest mniejsza od dolnej krawędzi tego okna lub
większa od jego górnej krawędzi to jest przekazywana procedurze, która wysyła dane
na wyjście Analizatora Danych SNMP Data.
Procedura balansująca uruchamiana jest niezależnie od otrzymywanych i
przetwarzanych danych. Sprawdza ona najpierw, czy dla wskazanej danej jest
dozwolony proces balansowania (dla dowolnej danej można bowiem ustawić sztywne
granice okna przeciętnych, tzn. akceptowalnych wartości, które nie będą ulegać
zmianie). Jeśli minął ustawiony wcześniej czas od momentu ostatniego balansowania
dla tej danej to proces ten może zostać znów powtórzony. Przy pierwszym balansowaniu
granice (window_min, window_max) okna przeciętnych wartości są obliczane według wzoru:
delta = (max - min) * (1.0 - len) / 2.0 * factor
window_min = min + delta
window_max = max - delta
gdzie max oznacza maksymalną wartość z dotychczas występujących dla
badanej danej, zaś min wartość minimalną. Parametr len odpowiada argumentowi opcji
--snmpdf-average-len
programu damsnmpdaud, zaś factor argumentowi opcji
--snmpdf-balance-factor programu
damsnmpdaud. Przy kolejnych balansowaniach granice okna
przeciętnych wartości są wyliczane następująco:
delta1 = (window_max - window_min) * ((1.0 - len) / 2.0 - hits_min / hits_after_balance) * factor
delta2 = (window_max - window_min) * ((1.0 - len) / 2.0 - hits_max / hits_after_balance) * factor
window_min = window_min + delta1
window_max = window_max + delta2
gdzie hits_min oznacza ilość wystąpień wartości poniżej dolnej granicy okna od
czasu ostatniego balansowania, zaś hits_max oznacza analogicznie ilość wystąpień
powyżej górnej granicy okna. Parametr hits_after_balance oznacza ilość wszystkich
wystąpień tej danej od czasu ostatniego balansowania. Po aktualizacji granic okna
zerowane są liczniki trafień w poszczególne przedziały, a także licznik wszystkich
trafień po balansowaniu.
Procedura, która wysyła dane na wyjście Analizatora Danych SNMP Data,
sprawdza najpierw (w przypadku, gdy wysyłana dana jest innego typu niż timeout
lub error), czy dla tej danej wystąpiła już odpowiednią ilość razy procedura
balansowania (jeśli dana ta podlega automatycznemu balansowaniu). Jeżeli ta
wstępna weryfikacja przebiegła pomyślnie to w przypadku, gdy dana ta podlega
automatycznemu balansowaniu i nie jest typu timeout ani error to sprawdzane
jest, czy przekroczenie którejś z granicy okna przeciętnych wartości jest
"istotnie duże". Przez zwrot, że jej wartości są poniżej wyznaczonego dla
niej poziomu, rozumie się, że identyfikator tej danej pasuje do pewnego
zdefiniowanego obiektu typu level (tzn. wszystkie łańcuchy znaków pól
name zdefiniowanych w tym obiekcie są zawarte w identyfikatorze tej danej)
oraz średnia arytmetyczna granic okna przeciętnych wartości tej danej i
wartość bezwzględna jej wartości są mniejsze od wartości tego obiektu.
W celu stwierdzenia, czy nastąpiło "istotnie duże" przekroczenie granicy
okna przeciętnych wartości obliczana jest wartość według wzoru:
window_min * min_severity_factor
gdy wartość danej jest poniżej dolnej granicy okna oraz jest ona typu counter lub:
window_min - (window_min - min) * min_severity_factor
gdy wartość danej jest poniżej dolnej granicy okna oraz jest ona typu gauge, zaś według wzoru:
window_max + (window_max - window_min) * max_severity_factor
gdy wartość danej jest powyżej górnej granicy okna. Parametr
min_severity_factor odpowiada argumentowi opcji
--snmpdf-min-severity-factor
programu damsnmpdaud, zaś max_severity_factor odpowiada argumentowi
--snmpdf-max-severity-factor.
W pierwszych dwóch przypadkach, gdy wartość jest większa lub równa
obliczonej wielkości, dana nie jest wysyłana, zaś w ostatnim przypadku
dana nie jest wysyłana, gdy jej wartość jest mniejsza bądź równa obliczonej wielkości.
W przypadku, gdy dana nie została odrzucona przez procedurę wysyłającą obliczana
jest jej ważność, a następnie jest ona przesyłana na wyjście Analizatora Danych SNMP Data.
Typowym odbiorcą tych wiadomości jest Baza Danych Skojarzeń.
W procesie oceny ważności komunikatu brany jest pod uwagę tylko identyfikator
wiadomości (identyfikator ten dostaje np. program
damsnmpdi w postaci argumentu
opcji -I).
Jednoznacznie identyfikuje on wiadomość w Operation Manager.
Początkowa ważność komunikatu wynosi zero. Następnie dla każdego elementu
z pliku konfiguracyjnego jest sprawdzane, czy łańcuch znaków występujący
po słowie kluczowym string= jest zawarty w identyfikatorze badanego
komunikatu. Jeśli tak to brana jest pod uwagę maksymalna wartość
przyporządkowana elementowi string. Wartość ta następnie jest dodawana
do dotychczas obliczonej ważności komunikatu. Na końcu obliczona ważność
komuniatu jest dzielona przez ilość obiektów typu group zdefiniowanych w
pliku konfiguracyjnym. W przypadu gdy komunikat nie jest ani typu timeout
ani error to obliczane jest o ile procent został przekroczony poziom
krawędzi okna średnich wartości w stosunku do wartości krańcowych.
Dolny kraniec stanowi minimum dwóch liczb: najmniejszej wartości
jaka wystąpiła dla tej danej lub zero.
Dla wartości poniżej okna ważność jest liczona następująco:
factor * (1.0 - (x - min) / (window_min - min))
lub
factor * (1.0 - (x - min) / (max - min))
gdzie x jest przetwarzaną wartością, window_min jest dolną
krawędzią okna średnich wartości, zaś min jest dolnym, a max
górnym krańcem wartości. Parametr factor jest argumentem
opcji --snmpdf-severity-growing-factor-4min.
Wartość jest liczona według drugiego wzoru, gdy odległość między
window_max a window_min
jest mniejsza od 1% odległości pomiędzy max a min.
Dla wartości powyżej okna ważność jest liczona następująco:
factor * (1.0 - (max - x) / (max - window_max))
lub
factor * (1.0 - (x - min) / (max - min))
gdzie x jest przetwarzaną wartością, window_max jest
górną krawędzią okna średnich wartości, zaś max jest górnym,
a min dolnym krańcem wartości. Parametr factor jest argumentem
opcji --snmpdf-severity-growing-factor-4max.
Wartość jest liczona według drugiego wzoru w przypadku analogicznym jak dla wartości poniżej okna.
Pilnowany jest także fakt, aby ważność nie przekroczyła jedynki. Na końcu ważność przyjmuje znak ujemny.
Procedura serwisowania Bazy Danych uruchamiana jest co pewien okres czasu i
polega na usuwaniu danych, które już od pewnego czasu (argument opcji
--snmpdf-ttl seconds)
nie zostały zaktualizowane (zmodyfikowane). Tylko te dane zostaną usunięte z Bazy Danych,
które posiadają atrybut pozwalający na tą operację.