16.2. 로그를 사용하여 문제 해결


AMQ Interconnect 로그 항목을 사용하여 네트워크의 라우터에서 오류 및 성능 문제를 진단할 수 있습니다.

예 16.1. 연결 및 링크 문제 해결

이 예에서 ROUTER 로그에는 연결의 라이프사이클과 연결된 링크가 표시됩니다.

2019-04-05 14:54:38.037248 -0400 ROUTER (info) [C1] Connection Opened: dir=in host=127.0.0.1:55440 vhost= encrypted=no auth=no user=anonymous container_id=95e55424-6c0a-4a5c-8848-65a3ea5cc25a props= 1
2019-04-05 14:54:38.038137 -0400 ROUTER (info) [C1][L6] Link attached: dir=in source={<none> expire:sess} target={$management expire:sess} 2
2019-04-05 14:54:38.041103 -0400 ROUTER (info) [C1][L6] Link lost: del=1 presett=0 psdrop=0 acc=1 rej=0 rel=0 mod=0 delay1=0 delay10=0 3
2019-04-05 14:54:38.041154 -0400 ROUTER (info) [C1] Connection Closed 4
1
연결이 열려 있습니다. 각 연결에는 고유 ID (C1)가 있습니다. 로그에는 연결에 대한 일부 정보도 표시됩니다.
2
연결을 통해 링크가 연결되어 있습니다. 링크는 고유 ID(L6)로 식별됩니다. 로그에는 링크의 방향과 소스 및 대상 주소도 표시됩니다.
3
링크가 분리되었습니다. 로그에 링크의 터미널 통계가 표시됩니다.
4
연결이 닫힙니다.
참고

필요한 경우 qdmanage 를 사용하여 특정 연결에 대해 프로토콜 수준 추적 로깅을 활성화할 수 있습니다. 이 값을 사용하여 AMQP 프레임을 추적할 수 있습니다. 예를 들면 다음과 같습니다.

$ qdmanage update --type=connection --id=C1 enableProtocolTrace=true

예 16.2. 네트워크 토폴로지 문제 해결

이 예에서 Router.A 에서 ROUTER_HELLO 로그에 해당 로그가 Router.B 에 연결되고 Router.A 및 Router.C:

Tue Jun  7 13:50:21 2016 ROUTER_HELLO (trace) RCVD: HELLO(id=Router.B area=0 inst=1465307413 seen=['Router.A', 'Router.C']) 1
Tue Jun  7 13:50:21 2016 ROUTER_HELLO (trace) SENT: HELLO(id=Router.A area=0 inst=1465307416 seen=['Router.B']) 2
Tue Jun  7 13:50:22 2016 ROUTER_HELLO (trace) RCVD: HELLO(id=Router.B area=0 inst=1465307413 seen=['Router.A', 'Router.C'])
Tue Jun  7 13:50:22 2016 ROUTER_HELLO (trace) SENT: HELLO(id=Router.A area=0 inst=1465307416 seen=['Router.B'])
1
router.A는 Router. ARouter.C.를 볼 수 있는 Router. B 에서 Hello 메시지를 수신했습니다.
2
router .A 는 확인할 수 있는 유일한 라우터인 Router.B 에 Hello 메시지를 전송했습니다.

Router.B 에서 ROUTER_HELLO 로그에 다른 관점에서 동일한 라우터 토폴로지가 표시됩니다.

Tue Jun  7 13:50:18 2016 ROUTER_HELLO (trace) SENT: HELLO(id=Router.B area=0 inst=1465307413 seen=['Router.A', 'Router.C']) 1
Tue Jun  7 13:50:18 2016 ROUTER_HELLO (trace) RCVD: HELLO(id=Router.A area=0 inst=1465307416 seen=['Router.B']) 2
Tue Jun  7 13:50:19 2016 ROUTER_HELLO (trace) RCVD: HELLO(id=Router.C area=0 inst=1465307411 seen=['Router.B']) 3
1
router.B는 Router. ARouter.C 에 Hello 메시지를 전송했습니다.
2
router.BRouter.B 만 볼 수 있는 Router.A 에서 Hello 메시지를 수신했습니다.
3
router.BRouter.C 에서만 볼 수 있는 Router.C에서 Hello 메시지를 수신했습니다.

예 16.3. 라우터 간 링크 상태 추적

각 라우터는 주기적으로 LSR(링크 상태 요청)을 다른 라우터로 전송하고 요청된 정보와 함께 LSU(Link State Update)를 수신합니다. 위의 정보를 변경하면 각 라우터가 토폴로지의 다음 홉과 관련 비용을 계산할 수 있습니다.

이 예에서 ROUTER_LS 로그에는 세 라우터 간에 전송된 RA, LSR 및 LSU 메시지가 표시됩니다.

Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: LSR(id=Router.A area=0) to: Router.C
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: LSR(id=Router.A area=0) to: Router.B
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: RA(id=Router.A area=0 inst=1465308600 ls_seq=1 mobile_seq=1) 1
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) RCVD: LSU(id=Router.B area=0 inst=1465308595 ls_seq=2 ls=LS(id=Router.B area=0 ls_seq=2 peers={'Router.A': 1L, 'Router.C': 1L})) 2
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) RCVD: LSR(id=Router.B area=0)
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: LSU(id=Router.A area=0 inst=1465308600 ls_seq=1 ls=LS(id=Router.A area=0 ls_seq=1 peers={'Router.B': 1}))
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) RCVD: RA(id=Router.C area=0 inst=1465308592 ls_seq=1 mobile_seq=0)
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: LSR(id=Router.A area=0) to: Router.C
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) RCVD: LSR(id=Router.C area=0) 3
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) SENT: LSU(id=Router.A area=0 inst=1465308600 ls_seq=1 ls=LS(id=Router.A area=0 ls_seq=1 peers={'Router.B': 1}))
Tue Jun  7 14:10:02 2016 ROUTER_LS (trace) RCVD: LSU(id=Router.C area=0 inst=1465308592 ls_seq=1 ls=LS(id=Router.C area=0 ls_seq=1 peers={'Router.B': 1L})) 4
Tue Jun  7 14:10:03 2016 ROUTER_LS (trace) Computed next hops: {'Router.C': 'Router.B', 'Router.B': 'Router.B'} 5
Tue Jun  7 14:10:03 2016 ROUTER_LS (trace) Computed costs: {'Router.C': 2L, 'Router.B': 1}
Tue Jun  7 14:10:03 2016 ROUTER_LS (trace) Computed valid origins: {'Router.C': [], 'Router.B': []}
1
router.A 는 LSR 요청을 전송하고 네트워크의 다른 라우터에 RA 알림을 전송했습니다.
2
router.A는 Router.B 에서 LSU를 수신했습니다. 두 개의 피어가 있습니다. Router.A, Router.ARouter.C (비용 1).
3
router.A는 Router. BRouter.C 에서 LSR을 수신했으며 LSU와 함께 불만족을 받았습니다.
4
router.ARouter.C 에서 LSU를 수신했습니다. 이 LSU에는 하나의 피어만 있습니다. Router.B ( 1의 비용).
5
LSR 및 LSU 메시지가 교환된 후 Router.A 는 라우터 토폴로지를 관련 비용으로 계산했습니다.

예 16.4. 라우터에 연결된 모바일 주소의 상태 추적

이 예에서 ROUTER_MA 로그에는 세 라우터 간에 전송된 MAR(Mobile Address Request) 및 MAU(Mobile Address Update) 메시지가 표시됩니다.

Tue Jun  7 14:27:20 2016 ROUTER_MA (trace) SENT: MAU(id=Router.A area=0 mobile_seq=1 add=['Cmy_queue', 'Dmy_queue', 'M0my_queue_wp'] del=[]) 1
Tue Jun  7 14:27:21 2016 ROUTER_MA (trace) RCVD: MAR(id=Router.C area=0 have_seq=0) 2
Tue Jun  7 14:27:21 2016 ROUTER_MA (trace) SENT: MAU(id=Router.A area=0 mobile_seq=1 add=['Cmy_queue', 'Dmy_queue', 'M0my_queue_wp'] del=[])
Tue Jun  7 14:27:22 2016 ROUTER_MA (trace) RCVD: MAR(id=Router.B area=0 have_seq=0) 3
Tue Jun  7 14:27:22 2016 ROUTER_MA (trace) SENT: MAU(id=Router.A area=0 mobile_seq=1 add=['Cmy_queue', 'Dmy_queue', 'M0my_queue_wp'] del=[])
Tue Jun  7 14:27:39 2016 ROUTER_MA (trace) RCVD: MAU(id=Router.C area=0 mobile_seq=1 add=['M0my_test'] del=[]) 4
Tue Jun  7 14:27:51 2016 ROUTER_MA (trace) RCVD: MAU(id=Router.C area=0 mobile_seq=2 add=[] del=['M0my_test']) 5
1
router.A 는 MAU 메시지를 네트워크의 다른 라우터로 전송하여 my_queuemy_queue_wp 에 추가된 주소에 대해 알립니다.
2
router.A는 Router. C 로부터 응답으로 MAR 메시지를 수신했습니다.
3
router.A는 Router. B 의 응답으로 다른 MAR 메시지를 수신했습니다.
4
router. c는 MAU 메시지를 전송하여 다른 라우터에 my_test 가 추가되었음을 알립니다.
5
router. c는 다른 라우터에 my_test 의 주소를 삭제했음을 알리기 위해 다른 MAU 메시지를 전송했습니다( receiver가 분리되기 때문에).

예 16.5. 라우터에서 수신 및 수신한 메시지에 대한 정보 검색

이 예에서 MESSAGE 로그에 Router.A 가 Hello 프로토콜과 관련된 일부 메시지를 전송 및 수신했으며 모바일 주소 링크의 다른 메시지를 전송 및 수신했습니다.

Tue Jun  7 14:36:54 2016 MESSAGE (trace) Sending Message{to='amqp:/_topo/0/Router.B/qdrouter' body='\d1\00\00\00\1b\00\00\00\04\a1\02id\a1\08R'} on link qdlink.p9XmBm19uDqx50R
Tue Jun  7 14:36:54 2016 MESSAGE (trace) Received Message{to='amqp:/_topo/0/Router.A/qdrouter' body='\d1\00\00\00\8e\00\00\00
\a1\06ls_se'} on link qdlink.phMsJOq7YaFsGAG
Tue Jun  7 14:36:54 2016 MESSAGE (trace) Received Message{ body='\d1\00\00\00\10\00\00\00\02\a1\08seque'} on link qdlink.FYHqBX+TtwXZHfV
Tue Jun  7 14:36:54 2016 MESSAGE (trace) Sending Message{ body='\d1\00\00\00\10\00\00\00\02\a1\08seque'} on link qdlink.yU1tnPs5KbMlieM
Tue Jun  7 14:36:54 2016 MESSAGE (trace) Sending Message{to='amqp:/_local/qdhello' body='\d1\00\00\00G\00\00\00\08\a1\04seen\d0'} on link qdlink.p9XmBm19uDqx50R
Tue Jun  7 14:36:54 2016 MESSAGE (trace) Sending Message{to='amqp:/_topo/0/Router.C/qdrouter' body='\d1\00\00\00\1b\00\00\00\04\a1\02id\a1\08R'} on link qdlink.p9XmBm19uDqx50R

예 16.6. 라우터의 구성 변경 추적

이 예에서 AGENT 로그는 Router.A,address,linkRoute, autoLink 엔티티가 라우터의 구성 파일에 추가되었음을 보여줍니다. 라우터가 시작되면 AGENT 모듈은 이러한 변경 사항을 적용했으며 이제 로그에서 볼 수 있습니다.

Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: ConnectorEntity(addr=127.0.0.1, allowRedirect=True, cost=1, host=127.0.0.1, identity=connector/127.0.0.1:5672:BROKER, idleTimeoutSeconds=16, maxFrameSize=65536, name=BROKER, port=5672, role=route-container, stripAnnotations=both, type=org.apache.qpid.dispatch.connector, verifyHostname=True)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigAddressEntity(distribution=closest, identity=router.config.address/0, name=router.config.address/0, prefix=my_address, type=org.apache.qpid.dispatch.router.config.address, waypoint=False)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigAddressEntity(distribution=balanced, identity=router.config.address/1, name=router.config.address/1, prefix=my_queue_wp, type=org.apache.qpid.dispatch.router.config.address, waypoint=True)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigLinkrouteEntity(connection=BROKER, direction=in, distribution=linkBalanced, identity=router.config.linkRoute/0, name=router.config.linkRoute/0, prefix=my_queue, type=org.apache.qpid.dispatch.router.config.linkRoute)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigLinkrouteEntity(connection=BROKER, direction=out, distribution=linkBalanced, identity=router.config.linkRoute/1, name=router.config.linkRoute/1, prefix=my_queue, type=org.apache.qpid.dispatch.router.config.linkRoute)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigAutolinkEntity(address=my_queue_wp, connection=BROKER, direction=in, identity=router.config.autoLink/0, name=router.config.autoLink/0, type=org.apache.qpid.dispatch.router.config.autoLink)
Tue Jun  7 15:07:32 2016 AGENT (debug) Add entity: RouterConfigAutolinkEntity(address=my_queue_wp, connection=BROKER, direction=out, identity=router.config.autoLink/1, name=router.config.autoLink/1, type=org.apache.qpid.dispatch.router.config.autoLink)

예 16.7. 정책 및 vhost 액세스 규칙 문제 해결

이 예에서 POLICY 로그는 이 라우터에 최대 연결에 제한이 없으며 기본 애플리케이션 정책이 비활성화되어 있음을 보여줍니다.

Tue Jun  7 15:07:32 2016 POLICY (info) Policy configured maximumConnections: 0, policyFolder: '', access rules enabled: 'false'
Tue Jun  7 15:07:32 2016 POLICY (info) Policy fallback defaultApplication is disabled

예 16.8. 오류 진단

이 예에서 ERROR 로그에 라우터 구성 파일에 잘못된 경로가 지정되었을 때 라우터가 시작되지 않는 것으로 표시됩니다.

$ qdrouterd --conf my_config
Wed Jun 15 09:53:28 2016 ERROR (error) Python: Exception: Cannot load configuration file my_config: [Errno 2] No such file or directory: 'my_config'
Wed Jun 15 09:53:28 2016 ERROR (error) Traceback (most recent call last):
  File "/usr/lib/qpid-dispatch/python/qpid_dispatch_internal/management/config.py", line 155, in configure_dispatch
    config = Config(filename)
  File "/usr/lib/qpid-dispatch/python/qpid_dispatch_internal/management/config.py", line 41, in __init__
    self.load(filename, raw_json)
  File "/usr/lib/qpid-dispatch/python/qpid_dispatch_internal/management/config.py", line 123, in load
    with open(source) as f:
Exception: Cannot load configuration file my_config: [Errno 2] No such file or directory: 'my_config'

Wed Jun 15 09:53:28 2016 MAIN (critical) Router start-up failed: Python: Exception: Cannot load configuration file my_config: [Errno 2] No such file or directory: 'my_config'
qdrouterd: Python: Exception: Cannot load configuration file my_config: [Errno 2] No such file or directory: 'my_config'

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.