리소스 로그를 사용하여 문제를 해결하는 방법

이 방법 가이드에서는 Azure Web PubSub 리소스 로그에 대한 개요와 로그를 사용하여 특정 문제를 해결하기 위한 몇 가지 팁을 제공합니다. 로그는 문제 식별, 연결 추적, 메시지 추적, HTTP 요청 추적 및 분석에 사용할 수 있습니다.

리소스 로그란?

리소스 로그에는 연결, 메시징HTTP 요청의 세 가지 유형이 있습니다.

  • 연결 로그는 Azure Web PubSub 허브 연결에 대한 자세한 정보를 제공합니다. 예를 들어 기본 정보(사용자 ID, 연결 ID 등) 및 이벤트 정보(연결, 연결 끊기 등)입니다.
  • 메시징 로그는 Azure Web PubSub 서비스를 통해 받거나 보낸 Azure Web PubSub 허브 메시지에 대한 추적 정보를 제공합니다. 예를 들어 메시지의 추적 ID와 메시지 유형이 있습니다.
  • HTTP 요청 로그는 Azure Web PubSub 서비스의 HTTP 요청에 대한 추적 정보를 제공합니다. 예를 들어 HTTP 메서드 및 상태 코드입니다. 일반적으로 HTTP 요청은 서비스에서 도착하거나 나갈 때 기록됩니다.

라이브 추적 도구를 사용하여 리소스 로그 캡처

Azure Web PubSub 서비스 라이브 추적 도구에는 리소스 로그를 실시간으로 수집하는 기능이 있으며, 이는 개발 환경의 문제를 해결하는 데 유용합니다. 라이브 추적 도구는 연결 로그, 메시징 로그 및 HTTP 요청 로그를 캡처할 수 있습니다.

참고 항목

라이브 추적 도구를 사용하는 경우 다음과 같은 고려 사항이 적용됩니다.

  • 라이브 추적 도구에서 캡처하는 실시간 리소스 로그는 메시지(아웃바운드 트래픽)로 간주됩니다.
  • 라이브 추적 도구는 현재 Microsoft Entra 권한 부여를 지원하지 않습니다. 라이브 추적을 사용하려면 액세스 키를 사용하도록 설정해야 합니다. 설정 아래에서 를 선택한 다음, 액세스 키를 사용하도록 설정합니다.
  • Azure Web PubSub 서비스 무료 계층 인스턴스의 일일 제한은 20,000개 메시지(아웃바운드 트래픽)입니다. 라이브 추적으로 인해 예기치 않게 일일 제한에 도달할 수 있습니다.

라이브 추적 도구 시작

참고 항목

액세스 키를 사용하는 경우 액세스 토큰을 사용하여 라이브 추적 도구를 인증합니다. 그렇지 않으면 Microsoft Entra ID를 사용하여 라이브 추적 도구를 인증합니다. Azure Portal의 SignalR Service 키 페이지에서 액세스 키를 사용할 것인지 여부를 확인할 수 있습니다.

액세스 키 사용 시 단계

  1. Azure Portal 및 SignalR Service 페이지로 이동합니다.

  2. 왼쪽 메뉴의 모니터링에서 실시간 추적 설정을 선택합니다.

  3. 실시간 추적 사용을 선택합니다.

  4. 저장 단추를 선택합니다. 변경 내용이 적용되려면 잠시 시간이 걸립니다.

  5. 업데이트가 완료되면 라이브 추적 도구 열기를 선택합니다.

    Screenshot of launching the live trace tool.

액세스 키 미사용 시 단계

자신에게 실시간 추적 도구 API 권한 할당

  1. Azure Portal 및 SignalR Service 페이지로 이동합니다.
  2. 액세스 제어(IAM) 를 선택합니다.
  3. 새 페이지에서 +추가를 클릭한 다음 역할 할당을 클릭합니다.
  4. 새 페이지에서 작업 함수 역할 탭에 중점을 두고 SignalR Service 소유자 역할을 선택한 후 다음을 클릭합니다.
  5. 멤버 페이지에서 +멤버 선택을 클릭합니다.
  6. 새 패널에서 멤버를 검색하여 선택한 후 선택을 클릭합니다.
  7. 검토 + 할당을 클릭하고 완료 알림을 기다립니다.

라이브 추적 도구 방문

  1. Azure Portal 및 SignalR Service 페이지로 이동합니다.

  2. 왼쪽 메뉴의 모니터링에서 실시간 추적 설정을 선택합니다.

  3. 실시간 추적 사용을 선택합니다.

  4. 저장 단추를 선택합니다. 변경 내용이 적용되려면 잠시 시간이 걸립니다.

  5. 업데이트가 완료되면 라이브 추적 도구 열기를 선택합니다.

    Screenshot of launching the live trace tool.

Microsoft 계정으로 로그인

  1. 라이브 추적 도구에서 Microsoft 로그인 창을 표시합니다. 팝업 창이 없으면 브라우저에서 팝업 창을 확인하고 허용합니다.
  2. 상태 표시줄에 준비 상태가 표시되기를 기다립니다.

리소스 로그 캡처

라이브 추적 도구는 문제 해결을 위해 리소스 로그를 캡처하는 데 도움이 되는 기능을 제공합니다.

  • 캡처: Azure Web PubSub에서 실시간 리소스 로그 캡처를 시작합니다.
  • 지우기: 캡처된 실시간 리소스 로그를 지웁니다.
  • 로그 필터: 라이브 추적 도구를 사용하면 하나의 특정 키워드를 사용하여 캡처된 실시간 리소스 로그를 필터링할 수 있습니다. 일반적인 구분 기호(예: 공백, 쉼표, 세미콜론 등)는 키워드의 일부로 처리됩니다.
  • 상태: 상태는 라이브 추적 도구가 특정 인스턴스와 연결되어 있는지 또는 연결이 끊겼는지를 보여 줍니다.

Screenshot of capturing resource logs with live trace tool.

라이브 추적 도구로 캡처한 실시간 리소스 로그에는 문제 해결을 위한 자세한 정보가 포함되어 있습니다.

이름 설명
Time 로그 이벤트 시간
로그 수준 로그 이벤트 수준은 [추적 | 디버그 | 정보 | 경고 | 오류]일 수 있습니다.
이벤트 이름 이벤트의 작업 이름
메시지 이벤트에 대한 자세한 메시지
예외 Azure Web PubSub 서비스의 런타임 예외
허브 사용자 정의 허브 이름
연결 ID 연결의 ID
사용자 ID 사용자 ID
IP 클라이언트 IP 주소
경로 템플릿 API의 경로 템플릿
Http 메서드 Http 메서드(POST/GET/PUT/DELETE)
URL Uniform Resource Locator
추적 ID 호출에 대한 고유 식별자
상태 코드 Http 응답 코드
기간 요청이 수신되고 처리되는 기간
헤더 클라이언트와 서버에서 HTTP 요청 또는 응답으로 전달한 추가 정보

Azure Monitor를 사용하여 리소스 로그 캡처

리소스 로그를 사용하도록 설정하는 방법

현재 Azure Web PubSub는 Azure Storage와의 통합을 지원합니다.

  1. Azure Portal로 이동합니다.

  2. Azure Web PubSub 서비스 인스턴스의 진단 설정 페이지에서 + 진단 설정 추가를 선택합니다. Screenshot of viewing diagnostic settings and create a new one

  3. 진단 설정 이름에서 설정 이름을 입력합니다.

  4. 범주 세부 정보에서 필요한 로그 범주를 선택합니다.

  5. 대상 세부 정보에서 스토리지 계정에 보관을 선택합니다.

    Screenshot of configuring diagnostic setting detail

  6. 저장을 선택하여 진단 설정을 저장합니다.

    참고 항목

    스토리지 계정은 Azure Web PubSub 서비스와 동일한 지역에 있어야 합니다.

Azure Storage 계정에 보관

로그는 진단 설정 창에서 구성된 스토리지 계정에 저장됩니다. insights-logs-<CATEGORY_NAME>이라는 컨테이너는 리소스 로그를 저장하기 위해 자동으로 만들어집니다. 컨테이너 내에서 로그는 resourceId=/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/XXXX/PROVIDERS/MICROSOFT.SIGNALRSERVICE/SIGNALR/XXX/y=YYYY/m=MM/d=DD/h=HH/m=00/PT1H.json 파일에 저장됩니다. 경로는 resource IDDate Time로 결합됩니다. 로그 파일은 hour로 분할됩니다. 분 값은 항상 m=00입니다.

모든 로그는 JSON(JavaScript Object Notation) 형식으로 저장됩니다. 각 항목에는 다음 섹션에 설명된 형식을 사용하는 문자열 필드가 있습니다.

보관 로그 JSON 문자열에는 다음 표에 나열된 요소가 포함되어 있습니다.

형식

이름 설명
time 로그 이벤트 시간
level 로그 이벤트 수준
resourceId Azure SignalR Service의 리소스 ID
location Azure SignalR Service의 위치
category 로그 이벤트 범주
operationName 이벤트의 작업 이름
callerIpAddress 서버 또는 클라이언트의 IP 주소
속성 해당 로그 이벤트와 관련된 자세한 속성입니다. 더 자세히 알아보려면 아래 속성 표를 참조하세요.

속성 표

이름 설명
컬렉션 로그 이벤트의 컬렉션입니다. 허용되는 값은 Connection, AuthorizationThrottling입니다.
connectionId 연결의 ID
userId 사용자의 ID
message 로그 이벤트의 세부 메시지
hub 사용자 정의 허브 이름
routeTemplate API의 경로 템플릿
httpMethod Http 메서드(POST/GET/PUT/DELETE)
URL Uniform Resource Locator
traceId 호출에 대한 고유 식별자
statusCode Http 응답 코드
duration 요청이 수신되고 처리되는 기간
헤더 클라이언트와 서버에서 HTTP 요청 또는 응답으로 전달한 추가 정보

다음 코드는 보관 로그 JSON 문자열에 대한 예입니다.

{
  "properties": {
    "message": "Connection started",
    "collection": "Connection",
    "connectionId": "LW61bMG2VQLIMYIVBMmyXgb3c418200",
    "userId": null
  },
  "operationName": "ConnectionStarted",
  "category": "ConnectivityLogs",
  "level": "Informational",
  "callerIpAddress": "167.220.255.79",
  "resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/MYGROUP/PROVIDERS/MICROSOFT.SIGNALRSERVICE/WEBPUBSUB/MYWEBPUBSUB",
  "time": "2021-09-17T05:25:05Z",
  "location": "westus"
}

Azure Log Analytics에 보관

로그를 Log Analytics 작업 영역에 보내려면 다음을 수행합니다.

  1. 진단 설정 페이지의 대상 세부 정보 아래에서 **[Log Analytics 작업 영역으로 보내기]를 선택합니다.
  2. 사용할 구독을 선택합니다.
  3. 로그의 대상으로 사용할 Log Analytics 작업 영역을 선택합니다.

리소스 로그를 보려면 다음 단계를 수행합니다.

  1. 대상 Log Analytics에서 Logs를 선택합니다.

    Log Analytics menu item

  2. WebPubSubConnectivity, WebPubSubMessaging 또는 WebPubSubHttpRequest를 입력한 다음, 로그를 쿼리할 시간 범위를 선택합니다. 고급 쿼리는 Azure Monitor에서 Log Analytics 시작을 참조하세요.

    Query log in Log Analytics

SignalR Service에 대한 샘플 쿼리를 사용하려면 아래 단계를 수행합니다.

  1. 대상 Log Analytics에서 Logs를 선택합니다.
  2. Queries를 선택하여 쿼리 탐색기를 엽니다.
  3. Resource type을 선택하여 샘플 쿼리를 리소스 종류로 그룹화합니다.
  4. 스크립트를 실행하려면 Run을 선택합니다. Sample query in Log Analytics

보관 로그 열에는 다음 표에 나열된 요소가 포함됩니다.

이름 설명
TimeGenerated 로그 이벤트 시간
컬렉션 로그 이벤트의 컬렉션입니다. 허용되는 값은 Connection, AuthorizationThrottling입니다.
OperationName 이벤트의 작업 이름
위치 Azure SignalR Service의 위치
수준 로그 이벤트 수준
callerIpAddress 서버/클라이언트의 IP 주소
메시지 로그 이벤트의 세부 메시지
사용자 ID 사용자의 ID
ConnectionId 연결의 ID
ConnectionType 연결 형식. 허용되는 값: Server | Client. Server: 서버 쪽에서 연결, Client: 클라이언트 쪽에서 연결
TransportType 연결의 전송 유형입니다. 허용되는 값: Websockets | ServerSentEvents | LongPolling

리소스 로그 문제 해결

연결 수가 예기치 않게 증가하거나 감소하는 변경을 확인한 경우 리소스 로그를 활용하여 문제를 해결할 수 있습니다. 일반적인 문제는 연결 수의 예기치 않은 변경, 연결의 연결 제한 도달 및 권한 부여 오류와 관련된 경우가 많습니다.

연결 수의 예기치 않은 변경

예기치 않은 연결 끊김

연결이 끊어지면 리소스 로그에서 operationNameConnectionAborted 또는 ConnectionEnded를 사용하여 연결 끊기 이벤트를 기록합니다.

ConnectionAbortedConnectionEnded의 차이점은 ConnectionEnded가 클라이언트 또는 서버 쪽에서 트리거되는 예상된 연결 끊기라는 점입니다. 반면 ConnectionAborted는 일반적으로 예기치 않은 연결 삭제 이벤트이며, 연결 끊기에 대한 이유는 message에 제공됩니다.

중단 이유는 다음 표에 나열되어 있습니다.

이유 설명
연결 수가 제한에 도달 연결 수가 현재 가격 계층의 제한에 도달했습니다. 서비스 단위를 스케일 업하는 것이 좋습니다.
서비스 다시 로드, 다시 연결 Azure Web PubSub 서비스를 다시 로드하는 중입니다. 고유한 다시 연결 메커니즘을 구현하거나 Azure Web PubSub 서비스에 수동으로 다시 연결해야 합니다.
내부 서버의 일시적인 오류 Azure Web PubSub 서비스에서 일시적인 오류가 발생하며, 자동으로 복구되어야 함

예기치 않은 연결 수 증가

클라이언트 연결 수가 예기치 않게 증가하면 가장 먼저 수행해야 하는 작업은 불필요한 연결을 필터링하는 것입니다. 고유한 테스트 사용자 ID를 테스트 클라이언트 연결에 추가합니다. 그런 다음, 리소스 로그를 확인합니다. 둘 이상의 클라이언트 연결에 동일한 테스트 사용자 ID 또는 IP가 있는 경우 클라이언트에서 예상보다 많은 연결을 만들고 있을 수 있습니다. 클라이언트 코드를 확인하여 추가 연결의 원본을 찾습니다.

권한 부여 실패

클라이언트 요청에 대해 인증되지 않은 401이 반환되는 경우 리소스 로그를 확인합니다. Failed to validate audience. Expected Audiences: <valid audience>. Actual Audiences: <actual audience>가 확인되면 액세스 토큰의 모든 대상 그룹이 잘못된 것입니다. 로그에 제안된 유효한 대상 그룹을 사용하세요.

제한

Azure Web PubSub 서비스에 대한 클라이언트 연결을 설정할 수 없는 경우 리소스 로그를 확인합니다. 리소스 로그에 Connection count reaches limit가 표시되면 Azure Web PubSub 서비스에 대한 연결을 너무 많이 설정하여 연결 수 제한에 도달한 것입니다. Azure Web PubSub 서비스 인스턴스를 스케일 업하는 것이 좋습니다. 리소스 로그에 Message count reaches limit가 표시되고 무료 계층을 사용하는 경우 메시지 할당량을 모두 사용한 것입니다. 더 많은 메시지를 보내려면 Azure Web PubSub 서비스 인스턴스를 표준 계층으로 변경하는 것이 좋습니다. 자세한 내용은 Azure Web PubSub 서비스 가격 책정을 참조하세요.