Linee guida per la progettazione di asset e elementi di configurazione | Inventario, CMDB ed EAM

Linee guida per design di asset e configurazioni

Una solida base per iniziative relative a inventario, CMDB ed EAM

 
Fabian Klose, Roman Bauer e Matthias Scholze - 24 luglio 2020
Versio.io è una soluzione software che salva i dati provenienti da applicazioni e fonti di dati di terze parti come asset o elementi di configurazione. I dati originali di terze parti devono essere ottimizzati per facilitarne l'ulteriore elaborazione, migliorandone la leggibilità, la pertinenza e l'automazione.
Creando importatori di dati, il nostro team Versio.io ha imparato lezioni preziose sull'ottimizzazione dei dati che abbiamo tradotto in linee guida di progettazione per voi. In Versio.io utilizziamo l'oggetto JSON come formato dati interno. Tutte le raccomandazioni di progettazione si basano sull'ottimizzazione degli oggetti JSON per i singoli asset e CI.
 

Regole generali di progettazione

 

§1 Normalizzazione dei valori degli attributi

§1 Normalizzazione dei valori degli attributi
X

§1 Normalizzazione dei valori degli attributi

I valori degli attributi devono essere salvati in un formato standardizzato per facilitare la lettura e migliorare la post-elaborazione. In questo caso può essere utile anche annotare l'unità di misura nel nome dell'attributo. L'interfaccia utente di Versio.io offre una funzione di ottimizzazione che consente di convertire le unità di misura in un formato leggibile.

Tutti gli attributi con valori unitari di base devono essere convertiti in queste unità.

  • Dati temporali: convertire in tempo universale coordinato (UTC) in millisecondi
  • Volume dei dati: convertire in byte
  • Distanza: convertire in millimetri o metri (a seconda dell'uso)
  • Peso: convertire in grammi o chilogrammi (a seconda dell'uso)

L'esempio seguente mostra come trasformare l'oggetto JSON dal formato originale della fonte dati in un formato ottimizzato per Versio.io:
# Data format of the original data source
	{
		"myDate": "Fri, 08-11-19, 3:47 PM",
		"myVolume": "4 GB",
		"myDistance": "42,195 km"
	}
# Optimized data format for Versio.io
	{
		"myDateUtc":  1573224441820,
		"myVolumeBytes": 4294967296,
		"myDistanceMeter": 42195
	}
 

§2 Arricchire e dividere i valori degli attributi

§2 Arricchire e dividere i valori degli attributi
X

§2 Arricchire e dividere i valori degli attributi

Gli attributi singoli con più di un'informazione devono essere suddivisi in più attributi. Ogni valore di attributo deve contenere esattamente un'informazione.

La valutazione dei dati è più semplice quando ogni informazione è associata a un attributo. Ciò è utile per l'analisi dell'inventario e la definizione delle regole di verifica nella governance e nella conformità.

Gli importatori possono anche arricchire i dati aggiungendo attributi che risultano evidenti in base ad altri attributi.

L'esempio seguente mostra come l'oggetto JSON proveniente dalla fonte dati originale può essere arricchito e ottimizzato per Versio.io:
# Data format of the original data source
	{
    	"osInfo": "Ubuntu 18.04.06 OS-Kernel 4.5.4"
	}
# Optimized data format for Versio.io
	{
		"osType": "Linux", // enrichment
		"osName": "Ubuntu",
		"osVersion": "18.04.06",
		"kernelVersion": "4.5.3"
	}
 

§3 Definire un attributo nome visualizzato

§3 Definire un attributo nome visualizzato
X

§3 Definire un attributo nome visualizzato

In Versio.io è possibile selezionare il nome visualizzato di un asset o di un elemento di configurazione. Viene visualizzato come titolo di una singola istanza e in qualsiasi riferimento o elenco specificato nell'interfaccia web. Ciò rende più facile per l'utente capire di quale istanza si tratta.

A volte non è disponibile alcun attributo adeguato nella fonte dati originale per il nome visualizzato. In questo caso è utile aggiungere un nuovo attributo nell'importatore, in cui viene creato un nome breve significativo a partire da diversi altri attributi.

L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data format of the original data source
	{
		"firstName": "John",
		"lastName": "Doe"
	}
# Optimized data format for Versio.io
	{
		"displayName": "John Doe",
		"firstName": "John",
		"lastName": "Doe"
	}
 

§4 Sicurezza delle maschere valori rilevanti o ad alto volume

§4 Sicurezza delle maschere valori rilevanti o ad alto volume
X

§4 Sicurezza delle maschere valori rilevanti o ad alto volume

I valori degli attributi rilevanti per la sicurezza (ad es. password, token) devono essere mascherati mediante conversione in valori hash al momento dell'importazione in Versio.io. Ciò impedisce la visualizzazione dei valori rilevanti per la sicurezza e ne impedisce l'uso improprio. Tuttavia, la conversione in valore hash consente comunque di riconoscere la modifica del valore.

Utilizziamo la stessa procedura per memorizzare in Versio.io i valori degli attributi che non sono leggibili dall'uomo e che sono di grandi dimensioni. Ciò riduce il volume dei dati da memorizzare e ne facilita la visualizzazione nell'interfaccia utente.

L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data format of the original data source
	{
		"password": "MySecretPassword",
		"rawNumericList": [10,45,23,67,98, ...] # a really long series of values that are not readable by humans
	}
# Optimized data format for Versio.io
	{
		"passwordHash": "952729c61cab7e01e4b5f5ba7b95830d2075f74b",
		"rawNumericListHash": "77c6211491dd37154e42004266f7a6c6b12b4e48"
	}
 

§5 Elimina attributi inappropriati

Esistono attributi che generano modifiche in Versio.io in base a valori degli attributi in continua evoluzione. Se tali modifiche sono irrilevanti o se si desidera evitare un numero elevato di modifiche, questi attributi devono essere rimossi o modificati di conseguenza.
Inoltre, esistono attributi che non forniscono alcuna informazione rilevante. Questi dovrebbero essere rimossi.
L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data format of the original data source
	{
		"actualTime": "Fri, 08-11-19, 3:47 PM", # changed continuously
		"dynamicMeasure": 10,  # changed continuously
		"constantAttribute": "CONSTANT-VALUE" # constant for every instance and change
		"otherAttribute": "myValue"
	}
# Optimized data format for Versio.io
	{
		"dynamicMeasureLevel": "ok", # level defined by treshold
		"otherAttribute": "myValue"
	}
 

§6 Dividere e combinare istanze di dati

§6 Dividere e combinare istanze di dati
X

§6 Dividere e combinare istanze di dati

Durante l'importazione dei dati, le istanze provenienti da una fonte dati possono essere suddivise e combinate per strutturare o condensare le informazioni in Versio.io in modo più significativo.

Il termine "dividere" si riferisce alla suddivisione di un asset o di un elemento di configurazione in più istanze. Ad esempio, è possibile suddividere le informazioni relative a uno schema di database in un'istanza di database e nelle relative istanze di tabella.

Il termine "combina" è l'opposto. Durante l'importazione, si crea un'istanza in Versio.io in cui gli attributi si basano su diverse istanze provenienti da diverse fonti di dati. Ad esempio, è possibile creare un host in cui i valori degli attributi provenienti da diversi prodotti di monitoraggio vengono combinati in un unico elemento di configurazione.

La figura a destra mostra un esempio di schema di database che è stato separato nel database e nelle tabelle associate in Versio.io. Questa struttura più dettagliata facilita il riconoscimento e l'elaborazione dei dettagli.

L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data instances from different data sources
	#  Dynatrace
	{
		"host": "prod-qdocker",
		"cpuCores": 4,
		....
	}
	# Check_MK
	{
		"host": "prod-qdocker",
		"maxRAM": "4 GB",
		....
	}
	
# Optimized data instance for Versio.io
	{
		"host": "prod-qdocker",
		"cpuCores": 4,
		"maxRAM": "4 GB",
		....
	}
 

§7 Evitare oggetti JSON negli array

Questa politica si basa su una ragione puramente tecnica. Le funzioni di confronto degli oggetti JSON non sono in grado di distinguere se gli oggetti all'interno degli array sono stati modificati o se è stato modificato solo il loro ordine all'interno dell'array. Poiché il rilevamento delle modifiche è il cuore di versio.io, ciò dovrebbe essere evitato, se possibile.
Nella maggior parte dei casi è possibile effettuare facilmente una trasformazione corrispondente dell'array e degli oggetti JSON contenuti, garantendo così un rilevamento pulito delle modifiche.
L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data format of the original data source
	{
		"managementZones": [
			{
			"id": "6a98d7bc-abb9-44f8-ae6a-73e68e71812a",
			"name": "MyName-1",
			"description": "MyDescription-1"
			}
		]	
	}
# Optimized data format for Versio.io
	{
		"managementZones": {
			"6a98d7bc-abb9-44f8-ae6a-73e68e71812a": {
				"name": "MyName-1",
				"description": "MyDescription-1"
			}
		}	
	}
 

§8 Estendere Asset e CI per includere le relazioni reciproche e creare una topologia

§8 Estendere Asset e CI per includere le relazioni reciproche e creare una topologia
X

§8 Estendere Asset e CI per includere le relazioni reciproche e creare una topologia

La mappatura delle relazioni tra asset o elementi di configurazione durante il processo di importazione in Versio.io aumenta notevolmente la qualità delle informazioni e le possibilità di elaborazione a valle.

Ti consigliamo vivamente di verificare ogni volta che importi dei dati in che misura questi possano essere correlati ai dati esistenti in Versio.io.

È buona norma estendere l'oggetto dati JSON originale nella forma seguente (vedere anche l'esempio riportato di seguito):

  • 'relation': crea un attributo root separato all'interno di un oggetto JSON per memorizzare tutte le relazioni
  • '<nome-entità>': crea un attributo con il nome dell'entità e inseriscilo sotto 'relazione'
  • ['<instance-id>']: crea tutte le relazioni sotto forma di ID in un array dell'attributo dell'entità corrispondente

L'esempio seguente mostra come l'oggetto JSON dalla fonte dati originale può essere ottimizzato per Versio.io:
# Data format of the original data source
	{
		"myAttribute": "myValue"
	}
		
# Optimized data instance for Versio.io
	{
		"myAttribute": "myValue",
		"relation": {
			"host": ["HOST-EFF871BC6C2DAA1E", "HOST-BC6C2DAA1EFEF871"]
		}
	}