IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 - Konfiguračnej databázy (CMDB)
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.

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 - Konfiguračnej databázy (CMDB)

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)
Preskočiť článok
(neodporúčame)
Konfiguračnej položky CMDB
Článok pre vás napísal Pavel Carvan
Avatar
Užívateľské hodnotenie:
1 hlasov
Aktivity