内容

概要

前提条件

要件

使用するコンポーネント

コマンドラインツール

データベースツール

概要

このドキュメントでは、Field Network Director(FND)の導入の一部として使用できるトラブルシューティングツールの使用方法について説明します。FNDソリューションは範囲が広く、多様なテクノロジーとスペシャライゼーションを網羅しています。このため、特定の状況での動作の確認や複雑な問題の診断に役立つスクリプトやコマンドラインツールが多数あります。

著者：Cisco TAC エンジニア、Ryan Bowman

前提条件

要件

シスコでは、登録済みのヘッドエンドルータ(HER)、フィールドエリアルータ、およびConnected Gridエンドポイント(CGE)を使用して、完全に動作する実稼働またはラボ環境を構築することを推奨します。 getStats.shを使用してCoAP Simple Management Protocol(CSMP)統計情報を確認するには、CSMPトラフィックを生成するCGEが少なくとも1つ必要です。

/opt/cgms-tools/ディレクトリにあるファイルを利用するには、アプリケーションサーバにcgms-tools RPMパッケージをインストールする必要があります。

使用するコンポーネント

このドキュメントの情報はすべて、RHEL 6.5を実行する仮想マシンにインストールされているすべてのLinuxサーバでFNDバージョン3.0.1-36を使用して収集されたものです。

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期（デフォルト）設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。

コマンドラインツール

このセクションでは、cgmsパッケージとcgms-toolsパッケージの両方の一部として利用可能なCLIユーティリティについて説明します。cgms RPMのデフォルトのインストールパスは/opt/cgms/cgms-tools/です。

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

FNDを初めてインストールした後、このスクリプトを実行して、必要なアプリケーション変数を設定する必要があります。実稼働開始後も、このユーティリティを使用して重要な構成パラメータを変更できます。このスクリプトを実行する前に、cgmsサービスを停止し、/opt/cgms/bin/ディレクトリに移動して./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):

このスクリプトは、アプリケーションの稼働中に実行することを目的としています。ロードバランシングされたクラスタとアクティブ/スタンバイDBペアを使用してパフォーマンスを分析する場合に非常に役立ちます。各パフォーマンスメトリックはこの記事の範囲外ですが、スクリプトを実行したときの出力例を次に示します。

クラスタ内のFNDの導入をトラブルシューティングする場合は、ロードバランシングが正しく動作していることを確認するために、各サーバでこのスクリプトを実行します。アプリケーションサーバの1つのCSMP処理速度が他のサーバよりも大きい場合、ロードバランシングが正しく設定されていない可能性があります。さらに、この出力を分析すると、キューサイズの増加が確認された場合は、ボトルネックのプロセスが存在することがわかります。

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

FNDのインストールにはJavaが含まれていることを知っておくことが重要です。keytoolユーティリティを使用して、FNDとTunnel Provisioning Server(TPS)の両方で適切に設定する必要があるcgms_keystoreを作成および管理する必要があります。

一部の環境では、サーバに既にJavaがインストールされており、keytoolコマンドは$PATH環境変数を使用して任意のユーザが使用できます。keytoolコマンドを使用して次のエラーが見つかった場合は、別の解決策があります。

[root@fnd]# keytool

-bash: keytool: command not found

/opt/cgms/jre/bin/ディレクトリに移動し、次のディレクトリでkeytoolユーティリティを呼び出すことができます。

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

注：このスクリプトと/opt/cgms-tools/ディレクトリ内の他のスクリプトは、cgms-tools RPMパッケージにバンドルされています。

FNDは、フィールドエリアルータ(FAR)にアクセスして通信するために、HTTPS経由でNetconfを使用します。 NetconfはXML形式のメッセージを使用して、信頼性が高く信頼性の高いサービスを提供するだけでなく、簡単に分割してデータベースに送信できるサービスを提供します。cgdm-clientというCLIツールがあり、任意のFARに対して手動のConnected Grid Device Manager(CGDM)セッションを開き、リモートコマンドを実行し、FARからBASHのstdoutに応答してXMLを送信します。

オプションを指定せずにスクリプトを実行すると、使用ガイドラインが表示されます。

[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

たとえば、管理IP（.csvファイルの「IP」値）が192.0.2.1のルータで時刻が完全に同期されていることを確認するとします。FNDアプリケーションサーバのターミナルセッションから、show clockコマンドを使用してCGRの時刻を照会できます。

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

オプションで、コマンドの'v'フラグを使用して詳細出力を指定できます。詳細な出力は、Javaおよびシスコのソフトウェアプロセスと構文から得られることに注意してください。次の出力には、追加のネットワークまたはデバイス情報は表示されません。

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

< output omitted >

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

cgdm-client FARツールに加え、csmp-requestと呼ばれるエンドポイント用のツールがあります。cgdm-clientスクリプトと同様に、このスクリプトを使用してCGEから情報を照会できます。メッシュエンドポイントのIPv6アドレスと、デバイスでクエリーするTLV(Type Length Value)を指定するだけです。TLVコードの完全なリストは、この記事では範囲外ですが、次に示すいくつかの代表的な例を示します。スクリプトの構文は次のとおりです。

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

1. IP 2001:db8::1/32のメーターでCGEファームウェアバージョンを照会します

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

2. 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):

シグニチャツールは、クリアテストパスワードの暗号化、暗号化されたパスワードまたは文字列の復号化、およびSSM_CSMP証明書のクリアテキストの印刷を可能にするJavaユーティリティです。このツールを使用して、.csvファイルの暗号化されたパスワード文字列を生成し、クリアテキストの管理者パスワードを含めないようにする必要があります。

コマンド構文を表示するには、オプションなしでスクリプトを実行します。

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

SSM_CSMP証明書を印刷するには、次のコマンドを使用します。

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

クリアテキストの管理者パスワードを暗号化するには、次の手順を実行します。

1. /opt/cgms-tools/binディレクトリに移動します。

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

[root@fnd bin]# pwd

/opt/cgms-tools/bin

2. 関連する文字列/パスワードのみをクリアテキストで含む新しいテキストファイルを作成します。

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

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

AdminPassword

2. 「encrypt」オプションを使用して署名ツールスクリプトを実行し、cgms_keystoreファイルの正確なパスと、クリアテキストパスワードを含む作成したファイルの名前を指定します。エイリアスの入力を求められたら、「cgms」をcgms_keystoreファイル内の証明書として使用します。「cgms」エイリアスを持つ証明書は、FNDアプリケーションが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==

暗号化された文字列を復号化するには、次の手順に従います。

1. 暗号化された文字列を使用して/opt/cgms-tools/bin/ディレクトリに新しい.txtファイルを作成します。

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

2. decryptオプションを使用して署名ツールを実行し、キーストアファイルの正確なパスと、暗号化されたパスワードが格納されている.txtファイルの名前を再度指定します。

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

Enter alias: cgms

Enter password:

AdminPassword

データベースツール

FNDには、堅牢なコマンドラインツールやユーティリティと同様に、データベースの問題の分析や診断に役立つGUIベースのツールが含まれています。DBツールにアクセスするには、FND展開のメインダッシュボードにログインし、URLの.com部分の後に/pages/diag/db.seamを貼貼付付けます。

このエリアには、次の3つのタブがあります。DBクエリ、DB情報、およびログビューア。[DBクエリ]タブを使用すると、カスタムクエリを実行でき、[クエリ]ボタンの右にある[すべてのテーブルを表示]をクリックするとすべてのテーブルのリストが表示されます。たとえば、すべてのデバイスインターフェイスのレイヤ1および2のステータスを表示するには、SQLクエリボックスにSELECT * FROM NET_INTERFACESと入力し、[Query]ボタンをクリックします。すべてのHERおよびFARインターフェイス、それらのMACアドレス、管理レイヤ1ステータス、および各インターフェイスのレイヤ2リンクステータスのリストが表示されます。

データベース接続の設定を確認する場合は、db.seamページのDB Infoタブをクリックします。ここでは、接続URL、データベースユーザ名、Oracleバージョン、ポート番号、SID、および各テーブルのサイズなど、多数のデータベース変数に対して読み取り専用でアクセスできます。また、このページのフラッシュ回復領域(FRA)情報（FRAに保存されている各タイプのファイルで使用される領域や、再利用可能な領域など）も表示されます。