Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Ferramentas de linha de comando

Ferramentas de banco de dados

Introduction

Este documento descreve como usar as ferramentas de solução de problemas disponíveis como parte da implantação do Field Network Diretor (FND).A solução FND tem um escopo amplo e abrange diversas tecnologias e especializações. Devido a isso, há vários scripts e ferramentas de linha de comando que podem ajudar a verificar o comportamento em uma determinada situação ou diagnosticar um problema complexo.

Contribuído por Ryan Bowman, engenheiro do TAC da Cisco.

Prerequisites

Requirements

A Cisco recomenda que você tenha um ambiente de produção ou laboratório totalmente operacional com o Head End Router (HER) registrado, o Field Area Router e o Connected Grid Endpoint (CGE). Para verificar as estatísticas do Protocolo de Gerenciamento Simples (CSMP - CoAP Simple Management Protocol) com getStats.sh, você deve ter pelo menos um CGE que gera tráfego CSMP.

Para utilizar os arquivos localizados no diretório /opt/cgms-tools/, o pacote cgms-tools RPM deve ser instalado no servidor de aplicativos.

Componentes Utilizados

As informações neste documento foram reunidas com o uso do FND versão 3.0.1-36 com todos os servidores Linux instalados em máquinas virtuais executando o RHEL 6.5.

The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.

Ferramentas de linha de comando

Esta seção aborda os utilitários CLI disponíveis como parte dos pacotes cgms e cgms-tools. O caminho de instalação padrão para o cgms RPM é /opt/cgms/e o caminho de instalação padrão para cgms-tools é /opt/cgms-tools/.

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

Após a primeira instalação do FND, este script deve ser executado para configurar as variáveis de aplicativo necessárias. Depois que a produção tiver sido iniciada, você ainda poderá usar este utilitário para alterar os parâmetros críticos de configuração. Antes de executar este script, você deve interromper o serviço cgms, navegar para o diretório /opt/cgms/bin/ e executar o 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):

Este script deve ser executado enquanto o aplicativo estiver ativo e em execução. Ele é extremamente útil quando você analisa o desempenho com clusters com balanceamento de carga e pares de DB ativo/standby. Cada métrica de desempenho está além do escopo deste artigo, mas aqui está um exemplo de saída quando executamos o script.

Ao solucionar problemas de implantações de FND em um cluster, execute este script em cada servidor para verificar se o balanceamento de carga funciona corretamente. Se um dos servidores de aplicativos tiver uma taxa de processamento CSMP muito maior do que os outros, o balanceamento de carga provavelmente não está configurado incorretamente. Além disso, ao analisar essa saída, se você vir o tamanho da fila aumentar, saberá que há um processo de gargalo em algum lugar.

[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 ]

ferramenta-chave (/opt/cgms/jre/bin/keytool):

É importante saber que a instalação do FND vem com Java. Você precisa usar o utilitário keytool para criar e gerenciar o cgms_keystore que precisa ser configurado adequadamente no FND e no TPS (Tunnel Provisioning Server, servidor de provisionamento de túnel).

Em alguns ambientes, o servidor já tem Java instalado e o comando keytool estará disponível para qualquer usuário por meio do uso da variável de ambiente $PATH. Se você usar o comando keytool e encontrar este erro, então há outra solução para você:

[root@fnd]# keytool

-bash: keytool: command not found

Você pode navegar para o /opt/cgms/jre/bin/diretory e invocar o utilitário keytool neste diretório, por exemplo:

[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):

Note: Este script e outros scripts no diretório /opt/cgms-tools/ são incluídos no pacote RPM cgms-tools.

O FND usa Netconf sobre HTTPS para acessar e se comunicar com o Field Area Router (FAR). O Netconf usa mensagens formatadas em XML para fornecer um serviço que não só é confiável e confiável, como também pode ser facilmente desfeito e enviado a um banco de dados. Há uma ferramenta CLI chamada cgdm-client que abrirá uma sessão manual do Connected Grid Device Manager (CGDM) a um FAR de sua escolha, executará um comando remoto e enviará o XML recebido em resposta de FAR para stdout na BASH.

Se você executar o script sem opções, serão apresentadas as diretrizes de uso:

[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

Por exemplo, digamos que você queira verificar se o tempo está totalmente sincronizado em um de seus roteadores em que o IP de gerenciamento (o valor 'IP' no arquivo .csv) é 192.0.2.1. Em uma sessão de terminal no seu servidor de aplicativos FND, você pode consultar o horário em um CGR com o 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>

Opcionalmente, você pode especificar uma saída verbosa com o uso do sinalizador 'v' em seu comando. Observe que a saída verbosa vem dos processos e sintaxe do software Java e Cisco. Você não verá nenhuma informação adicional de rede ou dispositivo nesta saída:

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

< output omitted >

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

Além da ferramenta cgdm-client FAR, há uma ferramenta para endpoints chamada csmp-request. Da mesma forma que o script cgdm-client, este script permitirá que você consulte informações de seus CGEs usando CSMP. Você só precisa especificar o endereço IPv6 do endpoint de malha e o TLV (Type Length Value) que você está consultando no dispositivo. A lista completa de códigos TLV está fora do escopo neste artigo, mas alguns exemplos bem conhecidos serão mostrados abaixo. A sintaxe do script é:

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

1. Consulte a versão do firmware CGE em um medidor com IP 2001:db8::1/32

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

2. Tempo de atividade da consulta em um medidor com IP 2001:db8::1/32

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

ferramenta de assinatura (/opt/cgms-tools/bin/assinatura-tool):

A Signature Tool é um utilitário Java que permite criptografar senhas de teste claro, descriptografar senhas ou sequências criptografadas e imprimir os certificados SSM_CSMP em texto claro. Esta ferramenta deve ser usada para gerar strings de senha criptografadas para seus arquivos .csv, de modo que não contenham senhas de administrador em texto claro.

Para exibir a sintaxe do comando, execute o script sem opções:

[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>

Para imprimir o certificado SSM_CSMP, use:

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

Para criptografar uma senha de administrador de texto claro:

1. Navegue até o diretório /opt/cgms-tools/bin:

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

[root@fnd bin]# pwd

/opt/cgms-tools/bin

2. Crie um novo arquivo de texto que contenha somente a string/senha relevante em texto claro:

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

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

AdminPassword

2. Execute o script Signature Tool com o uso da opção 'encrypt' e especifique o caminho exato do arquivo cgms_keystore e o nome do arquivo que você acabou de criar, que tem a senha de texto claro. Quando solicitado para o alias, use 'cgms' como apenas o certificado no arquivo cgms_keystore com o alias 'cgms' é usado pelo aplicativo FND para autenticar com sua 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==

Para descriptografar uma string criptografada:

1. Crie um novo arquivo .txt no /opt/cgms-tools/bin/diretório usando a string criptografada:

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

2.Execute a ferramenta de assinatura com o uso da opção descriptografar e especifique novamente o caminho exato do arquivo keystore, bem como o nome do arquivo .txt que tem a senha criptografada armazenada nela.

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

Enter alias: cgms

Enter password:

AdminPassword

Ferramentas de banco de dados

Assim como o conjunto robusto de ferramentas/utilitários de linha de comando, o FND contém um conjunto interessante de ferramentas baseadas em GUI que podem ajudá-lo a analisar e diagnosticar problemas com o banco de dados. Para acessar as ferramentas do banco de dados, faça login no painel principal da implantação do FND e cole /pages/diag/db.seam após a parte .com do URL.

Esta área tem três guias: DB Query, DB Info e Log Viewer. A guia Consulta de banco de dados permitirá que você execute consultas personalizadas e fornecerá uma lista de todas as tabelas se clicar em Mostrar todas as tabelas à direita do botão Consulta. Por exemplo, para exibir o status das camadas 1 e 2 para todas as interfaces do dispositivo, digite SELECT * FROM NET_INTERFACES na caixa de consulta SQL e clique no botão Consulta. Você receberá uma lista de todas as interfaces HER e FAR, seus endereços MAC, status da camada 1 administrativa e status do link da camada 2 para cada interface.

Se quiser verificar as configurações de conexão do banco de dados, clique na guia DB Info da página db.seam. Aqui, você terá acesso somente leitura a várias variáveis de banco de dados, como URL de conexão, nome de usuário do banco de dados, versão Oracle, número da porta, SID e tamanho de cada tabela. Também listado nesta página Informações de FRA (Flash Recovery Area, área de recuperação em flash), como o espaço usado por cada tipo de arquivo armazenado em FRA e quanto espaço é recuperável.