Sommario

Introduzione

Prerequisiti

Requisiti

Componenti usati

Strumenti della riga di comando

Strumenti database

Introduzione

In questo documento viene descritto come utilizzare gli strumenti di risoluzione dei problemi disponibili nell'ambito dell'installazione di Field Network Director (FND).La soluzione FND è di ampia portata e include numerose tecnologie e specializzazioni diverse. Per questo motivo, esistono numerosi script e strumenti da riga di comando che possono aiutare a verificare il comportamento in una determinata situazione o a diagnosticare un problema complesso.

Contributo di Ryan Bowman, Cisco TAC Engineer.

Prerequisiti

Requisiti

Cisco consiglia di avere un ambiente di produzione o lab completamente operativo con headend router (HER), router per area operativa e Connected Grid Endpoint (CGE) registrati. Per verificare le statistiche di CoAP Simple Management Protocol (CSMP) con getStats.sh, è necessario disporre almeno di un GME che generi traffico CSMP.

Per utilizzare i file presenti nella directory /opt/cgms-tools/, è necessario installare il pacchetto RPM cgms-tools sul server applicazioni.

Componenti usati

Le informazioni di questo documento sono state raccolte utilizzando FND versione 3.0.1-36 con tutti i server Linux installati su macchine virtuali che eseguono RHEL 6.5.

Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.

Strumenti della riga di comando

In questa sezione vengono descritte le utilità CLI disponibili come parte dei pacchetti cgms e cgms-tools. Il percorso di installazione predefinito per cgms RPM è /opt/cgms/e il percorso di installazione predefinito per cgms-tools è /opt/cgms-tools/.

setupCgms.sh (/opt/cgms/bin/setupCgms.sh):

Dopo la prima installazione di FND questo script deve essere eseguito per configurare le variabili dell'applicazione necessarie. Una volta avviata la produzione, è comunque possibile utilizzare questa utility per modificare i parametri di configurazione critici. Prima di eseguire questo script, è necessario arrestare il servizio cgms, passare alla directory /opt/cgms/bin/ ed eseguire il comando ./setupCgms.

[root@fnd bin]#./setupCgms.sh

Are you sure you want to setup IoT-FND (y/n)? n

Do you wish to configure another database server for this IoT-FND ? (y/n)? n

Do you want to change the database password (y/n)? n

Do you want to change the keystore password (y/n)? n

Do you want to change the web application 'root' user password (y/n)? n

Do you want to change the FTP settings (y/n)? n

Do you want to change router CGDM protocol settings (y/n)? n

Do you want to change log file settings)? (y/n)? n

getstats.sh (/opt/cgms/bin/getstats.sh):

Questo script è progettato per essere eseguito mentre l'applicazione è in esecuzione. È estremamente utile quando si analizzano le prestazioni con cluster con carico bilanciato e coppie di database attivo/standby. Ogni metrica delle prestazioni esula dall'ambito di questo articolo, ma di seguito viene riportato un output di esempio quando si esegue lo script.

Quando si esegue la risoluzione dei problemi relativi alle distribuzioni FND in un cluster, eseguire questo script in ogni server per verificare che il bilanciamento del carico funzioni correttamente. Se uno dei server applicazioni presenta una velocità di elaborazione CSMP molto più elevata rispetto agli altri, è probabile che il bilanciamento del carico non sia configurato in modo errato. Inoltre, analizzando questo output, se si nota che le dimensioni delle code aumentano, si sa che da qualche parte si verifica un processo collo di bottiglia.

[root@fnd bin]# ./getstats.sh

Current Time: 2017-03-08 01:06

============ events statistics ==============

ElapsedTimePrepareForRules (ms):...........................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeBatchCommit (ms):...............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Events request rate:.......................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeSendToSyslog (ms):..............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Batch Commit Size :........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

==============================================

============ metric statistics ==============

ElapsedTimePersistBatch (ms):..............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimePersistNetElementMetrics (ms):..................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeBatchCommit (ms):...............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Incoming message rate to Metric Server:....................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeFindCurrentMetric (ms):.........................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimefindCurrentMetricsForNetObject (ms):............................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

sendMetricEvents:..........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimePersistNetElementMetric (ms):...................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeAddMetricWithoutPropagation (ms):...............................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Rate of message drop at the metric server:.................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Batch Commit Size :........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeAddMetricsInBulkWithoutPropagation (ms):........................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

==============================================

============ issues statistics ==============

Issues Incoming Rate:......................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

UpdateEventAndIssues (ms):.................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeBatchCommit (ms):...............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Batch Commit Size :........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Issues Processing Rate:....................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

==============================================

============ label statistics ==============

Label drop rate:...........................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimePersistBatch (ms):..............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Label processing rate:.....................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ElapsedTimeBatchCommit (ms):...............................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Label request rate:........................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

Batch Commit Size :........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

==============================================

============ csmp statistics ==============

csmpConNotificationRate:...................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpNonNotificationRate:...................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpNonQueueSize:..........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpNotificationRate:......................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpDropRate:..............................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpProcessingRate:........................................................[ val: 0/s over 1 min ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

csmpConQueueSize:..........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

==============================================

============ database connection pool statistics ==============

dbConFlushCount:...........................................................[ val: 0 ] [ avg: 0.0 ] [ counter: 0 ] [ lastUpdate: never ]

ActiveCount:...............................................................[ val: 13 ]

InUseCount:................................................................[ val: 7 ]

AvailableCount:............................................................[ val: 243 ]

CreatedCount:..............................................................[ val: 13 ]

DestroyedCount:............................................................[ val: 0 ]

keytool (/opt/cgms/jre/bin/keytool):

È importante sapere che l'installazione FND è fornita con Java. È necessario utilizzare l'utility keytool per creare e gestire cgms_keystore che deve essere configurato correttamente sia su FND che su Tunnel Provisioning Server (TPS).

In alcuni ambienti, nel server è già installato Java e il comando keytool sarà disponibile per tutti gli utenti tramite la variabile di ambiente $PATH. Se si utilizza il comando keytool e si verifica questo errore, è possibile utilizzare un'altra soluzione:

[root@fnd]# keytool

-bash: keytool: command not found

Potete passare alla directory /opt/cgms/jre/bin/ e richiamare l'utility keytool in questa directory, ad esempio:

[root@fnd ~]# keytool -v -list -keystore /opt/cgms/server/cgms/conf/cgms_keystore

-bash: keytool: command not found

[root@fnd ~]# cd /opt/cgms/jre/bin/

[root@fnd bin]# ./keytool -v -list -keystore /opt/cgms/server/cgms/conf/cgms_keystore

Enter keystore password:

cgdm-client.sh (/opt/cgms-tools/bin/cgdm-client.sh):

Nota: Questo script e altri script nella directory /opt/cgms-tools/ sono inclusi nel pacchetto RPM cgms-tools.

FND utilizza Netconf su HTTPS per accedere e comunicare con il router di area operativa (FAR). Netconf utilizza messaggi in formato XML per fornire un servizio non solo affidabile e affidabile, ma che può anche essere facilmente suddiviso e inviato a un database. È disponibile uno strumento CLI denominato cgdm-client che consente di aprire una sessione manuale di Connected Grid Device Manager (CGDM) in un ambiente FAR di propria scelta, eseguire un comando remoto e inviare il codice XML ricevuto in risposta da FAR a stdout in BASH.

Se si esegue lo script senza opzioni, verranno visualizzate le linee guida per l'utilizzo:

[root@fnd bin]# ./cgdm-client

ERROR: Please specify an IP address and a command

usage: cgdm-client <cgr ip address> <cgdm CLI command>

-c <arg> Conf and keystore directory path, default =

/opt/cgms/server/cgms/conf

-v Verbose mode

Si supponga, ad esempio, che si desideri verificare che l'ora sia completamente sincronizzata su uno dei router in cui l'IP di gestione (il valore 'IP' nel file con estensione csv) è 192.0.2.1. Da una sessione terminale sul server applicazioni FND, è possibile eseguire una query sull'ora in un CGR con il comando show clock:

[root@fnd bin]# ./cgdm-client 192.0.2.1 show clock

<?xml version="1.0" encoding="ISO-8859-1"?>

<nf:rpc-reply xmlns:nf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="http://www.cisco.com/nxos:1.0" message-id="1">

<nf:data>15:44:58.092 CST Mon Mar 13 2017

</nf:data>

</nf:rpc-reply>

Facoltativamente, è possibile specificare un output dettagliato utilizzando il flag 'v' nel comando. L'output dettagliato viene generato in base ai processi e alla sintassi del software Java e Cisco. Non verranno visualizzate ulteriori informazioni sulla rete o sul dispositivo in questo output:

[root@fnd bin]# ./cgdm-client -v 192.0.2.1 show clock

< output omitted >

csmp-request.sh (/opt/cgms-tools/bin/csmp-request.sh):

Oltre allo strumento cgdm-client FAR, è disponibile uno strumento per gli endpoint denominato csmp-request. In modo analogo allo script cgdm-client, questo script consente di eseguire query sulle informazioni dai CGE utilizzando CSMP. È sufficiente specificare l'indirizzo IPv6 dell'endpoint mesh e il valore TLV (Type Length Value) su cui eseguire la query nel dispositivo. L'elenco completo dei codici TLV non rientra nell'ambito di questo articolo, ma di seguito sono riportati alcuni esempi noti. La sintassi dello script è:

./csmp-request -r [] Valore-TLV

1. Query versione firmware CGE su un misuratore con IP 2001:db8::1/32

[root@fnd bin]# ./csmp-request -r [2001:db8:0:0:0:0:0:1] 75

2. Tempo di attività della query su un misuratore con IP 2001:db8::1/32

[root@fnd bin]# ./csmp-request -r [2001:db8:0:0:0:0:0:1] 22

signature-tool (/opt/cgms-tools/bin/signature-tool):

Lo strumento Firma è un'utilità Java che consente di crittografare le password di test non crittografate, decrittografare le password o le stringhe crittografate e stampare i certificati SSM_CSMP in testo non crittografato. È consigliabile utilizzare questo strumento per generare stringhe di password crittografate per i file con estensione csv in modo che non contengano password di amministratore in formato non crittografato.

Per visualizzare la sintassi dei comandi, eseguire lo script senza opzioni:

[root@fnd bin]# ./signature-tool

usage:

signature-tool print

signature-tool export <binary|base64> <filename>

signature-tool decrypt <keystore> <filename>

signature-tool encrypt <keystore> <filename>

Per stampare il certificato SSM_CSMP, utilizzare:

[root@fnd bin]# ./signature-tool print

Per crittografare una password amministratore non crittografata:

1. Passare alla directory /opt/cgms-tools/bin:

[root@fnd ~]# cd /opt/cgms-tools/bin

[root@fnd bin]# pwd

/opt/cgms-tools/bin

2. Creare un nuovo file di testo contenente solo la stringa o la password rilevante in testo non crittografato:

1. [root@fnd bin]# echo AdminPassword > clear-text-password.txt

[root@fnd bin]# cat clear-text-password.txt

AdminPassword

2. Eseguire lo script dello strumento Firma utilizzando l'opzione 'encrypt' e specificare il percorso esatto del file cgms_keystore e il nome del file appena creato contenente la password non crittografata. Quando viene richiesto l'alias, utilizzare 'cgms' poiché solo il certificato nel file cgms_keystore con l'alias 'cgms' viene utilizzato dall'applicazione FND per l'autenticazione con la CA:

[root@fnd bin]# ./signature-tool encrypt /opt/cgms/server/cgms/conf/cgms_keystore clear-text-password.txt

Enter alias: cgms

Enter password:

pXHcF+YxyoJarz4YAqvFVMrLT2I//caHLddiJfrb7k65RmceIJUNlDd2dUPhGyGZTeEfz8beh8tWSGZ4lc66rhAQ9mYNaw2XSPaL8psoK+U0wzHgY068tnc7q17t05CZ5HQh8tWSGZ4lc66rhAQ9mOivj1B3XRKFmkpSXo4ZubeKRJ4NNaGAKFV8cjBJQDWsh7NAXL3x5D62/7w4Mhmftf2XiGlqeWlc66rhAQF+YxyoJarz4YAqvFVMrLT2I//caHLIDYoKoeTVB2SLQXtSZR+dwxYjQsE0hCmBpHv0lDD/l4gg==

Per decrittografare una stringa crittografata:

1. Creare un nuovo file .txt nella directory /opt/cgms-tools/bin/ utilizzando la stringa crittografata:

[root@fnd bin]# echo pXHcF+YxyoJarz4YAqvFVMrLT2I//caHLddiJfrb7k65RmceIJUNlDd2dUPhGyGZTeEfz8beh8tWSGZ4lc66rhAQ9mYNaw2XSPaL8psoK+U0wzHgY068tnc7q17t05CZ5HQh8tWSGZ4lc66rhAQ9mOivj1B3XRKFmkpSXo4ZubeKRJ4NNaGAKFV8cjBJQDWsh7NAXL3x5D62/7w4Mhmftf2XiGlqeWlc66rhAQF+YxyoJarz4YAqvFVMrLT2I//caHLIDYoKoeTVB2SLQXtSZR+dwxYjQsE0hCmBpHv0lDD/l4gg== > encrypted-password.txt

2.Eseguire lo strumento Firma con l'uso dell'opzione decrypt, e ancora una volta specificare il percorso esatto del file keystore e il nome del file .txt in cui è memorizzata la password crittografata.

[root@fnd bin]# ./signature-tool decrypt /opt/cgms/server/cgms/conf/cgms_keystore encrypted-password.txt

Enter alias: cgms

Enter password:

AdminPassword

Strumenti database

Analogamente all'insieme completo di strumenti/utilità della riga di comando, FND contiene una suite di strumenti basati su GUI che consentono di analizzare e diagnosticare i problemi del database. Per accedere agli strumenti di database, accedere al dashboard principale della distribuzione FND e incollare /pages/diag/db.seam dopo la parte .com dell'URL.

Questa area contiene tre schede: DB Query, DB Info e Log Viewer. La scheda Query DB consente di eseguire query personalizzate e fornisce un elenco di tutte le tabelle facendo clic su Mostra tutte le tabelle a destra del pulsante Query. Ad esempio, per visualizzare lo stato di layer 1 e 2 per tutte le interfacce dispositivo, digitare SELECT * FROM NET_INTERFACES nella casella Query SQL e quindi fare clic sul pulsante Query. Viene fornito un elenco di tutte le interfacce HER e FAR, dei relativi indirizzi MAC, dello stato amministrativo di livello 1 e dello stato del collegamento di livello 2 per ciascuna interfaccia.

Per verificare le impostazioni di connessione al database, fare clic sulla scheda DB Info della pagina db.seam. In questa pagina è possibile accedere in sola lettura a numerose variabili del database, quali l'URL di connessione, il nome utente del database, la versione Oracle, il numero di porta, il SID e le dimensioni di ciascuna tabella. In questa pagina sono inoltre elencate informazioni quali lo spazio utilizzato da ogni tipo di file archiviato su FRA e la quantità di spazio recuperabile.