Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 30% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP
Discount week - April - 30

2. diel - Aktualizácie CMDB z mnohých zdrojov dát

V predchádzajúcej lekcii, Prečo a ako začať s Konfiguračný databázou (CMDB) , sme si ukázali, prečo a ako začať s Konfiguračný databáz, s čím nám pomôže a ako sa vyhneme možným problémom pri implementácii.

V prípade aktualizácie CMDB čelíme výzve dát prichádzajúcich z mnohých zdrojov. Nižšie si ukážeme, ako k danej veci pristúpiť z praktického pohľadu.

Import dát

V našom príklade budeme pracovať s entitou serverov ( Machine, OS server). V CMDB budeme chcieť udržiavať zoznam všetkých serverov, pretože ide o zásadnú konfiguračné položku. Jedná sa ale o všeobecný prístup, ktorý môžeme uplatniť pri akýchkoľvek aktualizáciách dát.

V ideálnom svete by sme zaistili jeden aktuálny súbor, ktorý by sme importovali a potom vykonali nasledujúce:

  • Založili nové záznamy pre servery, ktoré sa objavili v súbore, ale ešte neboli v CMDB.
  • Aktualizovali hodnoty serverov, ktoré boli v súbore aj v CMDB.
  • Zmazali záznamy serverov, ktoré sú v CMDB, ale nie sú v súbore importu.

Všetky tieto tri operácie možno jednoducho nastaviť zaškrtnutím zodpovedajúcich vlastností v definícii importu. Importné súbor v CMDB ObjectGears získame použitím infraštruktúrne funkcie OG_Servers. Obdobné funkcionality automatického zistenia konfiguračných položiek majú aj iné CMDB. Môžeme však mať akokoľvek vynikajúce CMDB softvér, ale rovnako vždy narazíme na jeden problém.

V skutočnosti vyššie popísaný postup importu a aktualizácie dát takto jednoduchý nebýva. Servery sa nachádzajú v rôznych sieťach, pri ktorých nie sú nastavené prístupy pre zaistenie skenovanie infraštruktúry. Môžeme používať viac domén Active Directory, servery v rôznych DMZ, vysoko zabezpečené segmenty, cloud alebo siete sesterských spoločností, do ktorých nemáme vôbec prístup. Takáto infraštruktúra siete môže vyzerať takto:

Network segments
V takom prípade budeme mať pravdepodobne viac vstupných súborov a u niektorých serverov sa rozhodneme pre manuálne aktualizáciu dát.

Vytvoríme si preto viac importov a v každom z nich nastavíme filter okruhu záznamov, ktoré budú aktualizované. Ak napríklad vieme, že v určitom súbore sú všetky servery z testovacej domény, nastavíme filter importu na vlastnosť serveri definujúci testovacie doménu. Pri vyhodnotení, ktoré servery majú byť zmazané, sa vezmú do úvahy iba servery z tejto domény. Bez nastavenia tohto filtra by sa zmazali všetky ostatné servery (aj tie mimo testovacie doménu), pretože neboli v importnom súbore.

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Automatické zmazanie serverov, ktoré neboli v importnom súboru môže byť problematické. Môže sa stať, že súbor nie je vyplnený správne z dôvodu chyby v skripte alebo daný server neodpovedal na otázku ohľadom svoju konfigurácie. V prvom prípade môžeme využiť nastavenia importu. Import sa nevykoná, ak import obsahuje odchýlku od očakávaného množstva záznamov. Druhý typ problému je vhodné riešiť skôr označením záznamov, ktoré neboli v poslednom importe a uvedením dátumu a času posledného importu, v ktorom bol server nájdený. Takto možno identifikovať záznamy, u ktorých by sme mali overiť, či nemajú byť zmazané.

Ďalším vhodným prvkom je zavedenie indikátora, či sa daný server aktualizuje manuálne. O týchto serveroch budeme vedieť, že sa v importoch nikdy neobjaví a budeme teda musieť zabezpečiť ich ručnú aktualizáciu.

Riešenie problému importu z viacerých zdrojov

Entitu serverov (alebo inú entitu, ktorú budeme chcieť importovať) rozšírime o nasledujúce vlastnosti:

kód Názov Typ stĺpca popis
manual_update Manuálna aktualizácia Áno / Nie Vlastnosť je nastavovaná ručne.
present_in_las­t_import Nájdený v poslednom importe Áno / Nie Vlastnosť nastavuje skript bežiaci po dokončení importu. Pre užívateľov je len na čítanie.
last_import_da­tetime Dátum a čas posledného importu Dátum a čas Vlastnosť nastavuje skript bežiaci po dokončení importu. Pre užívateľov je len na čítanie.
Označenie záznamov importom

Označenie záznamov v stĺpcoch present_in_las­t_import a last_import_da­tetime zaistí skript importu (záložka Spustiť po dokončení importu):

Príklad JavaScriptu, ktorý rieši vyššie uvedené označenie záznamov:

/* U serverov, ktoré boli v importnom súboru (matchování stĺpce triedy name a stĺpce súboru Name) označiť pole present_in_last_import ako Áno (u ostatných serverov nastaviť Nie). U týchto serverov z importného súboru tiež nastaviť last_import_datetime na aktuálny dátum a čas.*/

 var cl = OG.ClassDef.GetById(OGActualImport.ClassDefId);
 var colPres = cl.Columns['present_in_last_import'];
 var colLast = cl.Columns['last_import_datetime'];

 /* present_in_last_import = Nie */
 var sql = 'update datarow' + cl.Id + ' set ' + colPres.DBColumnName + ' = 0' +
 ' where Id not in (select LastChildDataRowId from ' + OGActualImportDbTable + ' where IsError = 0)';
 OG.Sql.RunSql(sql);

 /* present_in_last_import = Áno, last_import_datetime = sysdate */
 var sql = 'update datarow' + cl.Id +
 ' set ' + colPres.DBColumnName + ' = 1, ' + colLast.DBColumnName + ' = getdate() ' +
 ' where Id in (select LastChildDataRowId from ' + OGActualImportDbTable + ' where IsError = 0)';
 OG.Sql.RunSql(sql);

Otázky mapujúci kvalitu CMDB

Nižšie uvedené dva otázky môžeme vložiť do stránky mapujúci kvalitu dát v CMDB.

Otázka pre identifikáciu novo založených záznamov:

SELECT m.name, d.Name AS Datasource, m.created, '53-' + convert( varchar, m.id) AS FullId
 FROM {{:class.machine:}} m
 INNER JOIN DataSource d ON m.createddatasourceid = d.id
 WHERE d.referenceid IS NOT NULL and m.status IS NULL

Otázka pre identifikáciu záznamov, u ktorých by malo byť preverené, či nemajú byť zmazané:

SELECT m.name, m.created, m.last_import_datetime, '53-' + convert( varchar, m.id) AS FullId
 FROM {{:class.machine:}} m
 WHERE (m.present_in_last_import IS NULL OR m.present_in_last_import = 0) AND (m.manual_update IS NULL OR m.manual_update = 0) AND m.deleted IS NULL

Notifikácia o novo založených serveroch

Pokiaľ budú identifikované nové servery a založené zodpovedajúce záznamy v CMDB, budeme chcieť odoslať notifikáciu s uvedením serverov, ktoré boli zriadené.

Vytvoríme si notifikáciu, ktorú nastavíme na odoslanie po úspešnom spustení importu:

notifikácia

V notifikáciu na záložke Skript uvedieme nasledujúci kód:

var data = OG.GetItem('server-notif-data');
 if ( OG.IsNull(data))
 {
 // nacistov id datasource
 var sql = OG.TextUtils.Format( "select max(id) from DataSource where ReferenceId = {0} and Name like 'Import {0}: %'", OGImport.Id);
 var dsId = OG.Sql.RunScalarSql(sql);

 // nacistov z cl nove zaznamy - maju createddatasourceid, boli vytvorené po ir.start
 var drf = OG.DataRow.GetDataRowFilter(OGImport.ClassDefId);
 drf['createddatasourceid'] = dsId;
 drf.AddAndCon( OG.DataRow.CreateConLe(OGImport.ClassDef.Columns['created'], OGImportRun.DateTimeStart.AddMinutes(-1)));
 //drf.WriteSqlToLog = true;

 // prejsť a vytvorit odkazy na dr
 data = 'V importe nebol nájdený žiadny nový server.';
 var drl = OG.DataRow.GetDataByFilter(drf);
 if ( drl != null && drl.Count > 0)
 {
 data = '';
 for( var i = 0; i < drl.Count; ++i)
 {
 var dr = drl[i];
 data += OG.TextUtils.Format( '<a href="{2}{1}">{0}</a><br />', dr.ShortDescriptionOrFullIdEnvelope, dr.DetailUrl, OG.GetWebUrl()); }
 }
 OG.SetItem('server-notif-data', data);
 }
 OGMessage.Body = OGMessage.Body.Replace( '#SERVERY#', data);

Výsledkom bude email so zoznamom serverov, ktoré sa novo objavili v importe s preklikom na príslušný záznam v CMDB.

V ďalšej lekcii, Konfiguračnej položky CMDB , sa pozrieme na konfiguračnej položky na konkrétnom príklade serverov a hardware.


 

Predchádzajúci článok
Prečo a ako začať s Konfiguračný databázou (CMDB)
Všetky články v sekcii
Konfiguračnej databázy (CMDB)
Článok pre vás napísal Pavel Carvan
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Aktivity (1)

 

 

Komentáre

Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!