목차

소개

사전 요구 사항

요구 사항

사용되는 구성 요소

명령줄 도구

데이터베이스 도구

소개

이 문서에서는 FND(Field Network Director) 구축의 일부로 제공되는 문제 해결 툴을 사용하는 방법에 대해 설명합니다.FND 솔루션은 광범위한 범위를 제공하며 다양한 기술과 전문화를 포괄합니다.이로 인해 특정 상황에서 동작을 확인하거나 복잡한 문제를 진단하는 데 도움이 되는 다양한 스크립트 및 명령줄 도구가 있습니다.

기고자: Cisco TAC 엔지니어 Ryan Bowman

사전 요구 사항

요구 사항

Cisco는 등록된 HER(Head End Router), Field Area Router 및 CGE(Connected Grid Endpoint)를 사용하는 프로덕션 또는 랩 환경을 완벽하게 운영할 것을 권장합니다. getStats.sh를 사용하여 CoAP CSMP(Simple Management Protocol) 통계를 확인하려면 CSMP 트래픽을 생성하는 CGE를 하나 이상 보유해야 합니다.

/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의 기본 설치 경로는 /opt/cgms-tools/입니다.

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

FND를 처음 설치한 후에는 이 스크립트를 실행하여 필요한 애플리케이션 변수를 구성해야 합니다.프로덕션이 시작된 후에도 이 유틸리티를 사용하여 중요한 컨피그레이션 매개변수를 변경할 수 있습니다.이 스크립트를 실행하기 전에 cgms 서비스를 중지하고, /opt/cgms/bin/directory로 이동하여./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 구축을 트러블슈팅할 때 로드 밸런싱이 올바르게 작동하는지 확인하기 위해 각 서버에서 이 스크립트를 실행합니다.앱 서버 중 하나가 다른 서버보다 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와 함께 제공된다는 것을 알아야 합니다.FND와 TPS(Tunnel Provisioning Server)에서 적절하게 구성해야 하는 cgms_keystore를 생성하고 관리하려면 keytool 유틸리티를 사용해야 합니다.

일부 환경에서는 서버에 이미 Java가 설치되어 있으며 $PATH 환경 변수를 사용하여 모든 사용자가 keytool 명령을 사용할 수 있습니다.keytool 명령을 사용하여 이 오류를 찾으면 다른 해결 방법이 있습니다.

[root@fnd]# keytool

-bash: keytool: command not found

/opt/cgms/jre/bin/directory로 이동하여 이 디렉토리에서 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(Field Area Router)에 액세스하고 통신하기 위해 HTTPS를 통해 Netconf를 사용합니다. Netconf는 XML 형식의 메시지를 사용하여 안정적이고 신뢰할 수 있을 뿐만 아니라 쉽게 분류되어 데이터베이스로 전송할 수 있는 서비스를 제공합니다.cgdm 클라이언트라는 CLI 툴이 있습니다. 이 툴은 선택한 영역에 대한 수동 CGDM(Connected Grid Device Manager) 세션을 열고, 원격 명령을 실행하고, FAR에서 수신한 XML을 BASH에서 stout으로 전송합니다.

옵션 없이 스크립트를 실행하면 사용 지침이 표시됩니다.

[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 및 Cisco 소프트웨어 프로세스 및 구문에서 가져옵니다.이 출력에는 추가 네트워크 또는 디바이스 정보가 표시되지 않습니다.

[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 스크립트와 마찬가지로 이 스크립트를 사용하면 CSMP를 사용하여 CGE에서 정보를 쿼리할 수 있습니다.메시 엔드포인트의 IPv6 주소와 디바이스에서 쿼리하는 TLV(Type Length Value)만 지정하면 됩니다.TLV 코드의 전체 목록은 이 문서에서 범위를 벗어났지만, 아래에 잘 알려진 몇 가지 예가 나와 있습니다.스크립트 구문은 다음과 같습니다.

./smp-request -r [] TLV-값

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

서명 도구(/opt/cgms-tools/bin/signature-tool):

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 파일의 정확한 경로와 방금 생성한 파일의 이름에 일반 텍스트 비밀번호가 포함된 이름을 지정합니다.별칭을 묻는 메시지가 나타나면 FND 애플리케이션에서 CA를 인증하기 위해 'cgms' 별칭이 있는 cgms_keystore 파일의 인증서만 'cgms'를 사용합니다.

[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/directory에 새 .txt 파일을 생성합니다.

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

2.decrypt 옵션을 사용하여 Signature Tool을 실행하고, 암호화된 비밀번호가 저장된 .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을 붙여 넣으십시오.

이 영역에는 세 개의 탭이 있습니다.DB 쿼리, DB 정보 및 로그 뷰어입니다.DB Query(DB 쿼리) 탭에서는 사용자 지정 쿼리를 실행할 수 있으며 Query(쿼리) 버튼 오른쪽에 있는 Show All Tables(모든 테이블 표시)를 클릭하면 모든 테이블 목록이 제공됩니다.예를 들어, 모든 디바이스 인터페이스의 레이어 1 및 레이어 2 상태를 보려면 SQL 쿼리 상자에 SELECT * FROM NET_INTERFACES를 입력하고 Query 버튼을 클릭합니다.모든 HER 및 FAR 인터페이스, 해당 MAC 주소, 각 인터페이스의 관리 레이어 1 상태 및 레이어 2 링크 상태 목록이 제공됩니다.

데이터베이스 연결 설정을 확인하려면 db.seam 페이지의 DB Info 탭을 클릭합니다.여기서는 접속 URL, 데이터베이스 사용자 이름, Oracle 버전, 포트 번호, SID 및 각 테이블의 크기와 같은 다양한 데이터베이스 변수에 대한 읽기 전용 액세스를 제공합니다.FRA에 저장된 각 파일 유형에서 사용하는 공간 및 회수할 수 있는 공간의 양과 같은 FRA(Flash Recovery Area) 정보도 이 페이지에 나열됩니다.