컨테이너용 Application Gateway에 대한 진단 로그
컨테이너용 Application Gateway에서 발생하는 일반적인 문제를 해결하는 방법을 알아봅니다.
다음과 같은 방법으로 컨테이너용 Azure Application Gateway 리소스를 모니터링할 수 있습니다.
로그: 로그를 사용하면 모니터링하기 위해 리소스에서 성능, 액세스 및 기타 데이터를 저장하거나 사용할 수 있습니다.
메트릭: 컨테이너용 Application Gateway에는 시스템이 예상대로 작동하고 있는지 확인하는 데 도움이 되는 몇 가지 메트릭이 있습니다.
진단 로그
Azure에서 다양한 형식의 로그를 사용하여 컨테이너용 Application Gateway를 관리하고 문제를 해결할 수 있습니다. 이러한 로그 중 일부는 포털을 통해 액세스할 수 있습니다. Azure Blob Storage에서 모든 로그를 추출하여 다양한 도구(예: Azure Monitor 로그,Excel 및 Power BI)에서 볼 수 있습니다. 다음 목록에서 다른 종류의 로그에 대해 자세히 알아볼 수 있습니다.
- 활동 로그 - Azure 활동 로그(이전의 작업 로그 및 감사 로그)를 사용하여 Azure 구독에 제출된 모든 작업과 상태를 확인할 수 있습니다. 활동 로그 항목은 기본적으로 수집되고 Azure Portal에서 볼 수 있습니다.
- 액세스 로그: 이 로그를 사용하여 컨테이너용 Application Gateway 액세스 패턴을 보고 중요한 정보를 분석할 수 있습니다. 여기에는 호출자의 IP, 요청된 URL, 응답 대기 시간, 반환 코드, 바이트 입출력이 포함됩니다. 액세스 로그는 60초마다 수집됩니다. 데이터는 로깅을 사용하도록 설정할 때 지정한 스토리지 계정에 저장될 수 있습니다.
액세스 로그 구성
활동 로깅은 모든 Resource Manager 리소스에 대해 사용하도록 설정됩니다. 이러한 로그를 통해 사용할 수 있는 데이터를 수집하려면 액세스 로깅을 사용하도록 설정해야 합니다. 로깅을 사용하도록 설정하려면 Azure Monitor에서 진단 설정을 구성할 수도 있습니다.
다음 단계를 수행하여 Azure Portal을 사용해 컨테이너용 Application Gateway의 스토리지 계정에 대한 모든 로깅을 사용하도록 설정합니다. 컨테이너용 Application Gateway와 동일한 지역에 사용 가능한 스토리지 계정이 있어야 합니다.
Azure 계정을 사용하여 Azure Portal 에 로그인합니다.
리소스, 서비스 및 설명서 검색에서 컨테이너용 Application Gateway를 입력하고 컨테이너용 Application Gateway 이름을 선택합니다.
모니터링 아래에서 진단 설정을 선택합니다.
진단 설정 추가를 선택합니다.
진단 설정 이름(예: agfc-logs)을 입력하고 저장할 로그와 메트릭을 선택한 다음, 대상(예: 스토리지 계정에 보관)을 선택합니다. 모든 로그를 저장하려면 allLogs 및 AllMetrics를 선택합니다.
저장을 선택하여 설정을 저장합니다. 다음 예제를 참조하십시오.
참고 항목
처음에 진단 로그를 사용하도록 설정한 후에는 선택한 대상에서 로그를 사용할 수 있는 데 최대 1시간이 걸릴 수 있습니다.
자세한 내용과 Azure Monitor 배포 자습서는 Azure Monitor의 진단 설정을 참조하세요.
액세스 로그 형식
컨테이너용 Application Gateway의 각 액세스 로그 항목에는 다음 정보가 포함됩니다.
값 | 설명 |
---|---|
backendHost | 추가된 포트가 있는 백 엔드 대상 주소입니다. 예를 들면<ip>:<포트>입니다. |
backendIp | 요청을 프록시하는 벡 엔드 대상 컨테이너용 Application Gateway IP 주소입니다. |
backendPort | 백 엔드 대상의 포트 번호입니다. |
backendResponseLatency | 컨테이너용 Application Gateway에서 백 엔드 대상으로 첫 번째 바이트를 수신하는 데 걸리는 시간(밀리초)입니다. |
backendTimeTaken | 백 엔드 대상에서 컨테이너용 Application Gateway로 응답을 전송하는 데 걸리는 시간(밀리초)입니다. |
clientIp | 컨테이너용 Application Gateway의 프런트 엔드에 대한 요청을 시작하는 클라이언트의 IP 주소입니다. |
frontendName | 클라이언트에서 요청을 수신하는 컨테이너용 Application Gateway 프런트 엔드의 이름입니다. |
frontendPort | 컨테이너용 Application Gateway에서 요청을 수신 대기한 포트 번호입니다. |
frontendTLSFailureReason | TLS 협상이 실패한 이유에 대한 정보를 포함합니다. 일반적으로 클라이언트 상호 인증에 대한 실패한 인증 요청을 이해하는 데 사용됨 |
frontendTLSPeerFingerprint | 컨테이너용 Application Gateway 프런트 엔드에 클라이언트가 제시한 인증서의 지문(지문) |
hostName | 컨테이너용 Application Gateway가 클라이언트에서 수신한 호스트 헤더 값입니다. |
httpMethod | RFC 7231에 따라 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 HTTP 메서드입니다. |
httpStatusCode | 컨테이너용 Application Gateway에서 클라이언트로 반환된 HTTP 상태 코드입니다. |
httpVersion | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 HTTP 버전입니다. |
referrer | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 참조 페이지 헤더입니다. |
requestBodyBytes | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 본문 페이로드 크기(바이트)입니다. |
requestHeaderBytes | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 헤더 크기(바이트)입니다. |
requestUri | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 URI입니다(URL의 <프로토콜>://<호스트> 이후의 모든 항목). |
responseBodyBytes | 컨테이너용 Application Gateway에서 클라이언트로 반환한 응답의 본문 페이로드 크기(바이트)입니다. |
responseHeaderBytes | 컨테이너용 Application Gateway에서 클라이언트로 반환한 응답의 헤더 크기(바이트)입니다. |
timeTaken | 컨테이너용 Application Gateway에서 수신한 클라이언트 요청의 시간(밀리초)과 컨테이너용 Application Gateway에서 클라이언트로 반환된 마지막 바이트입니다. |
tlsCipher | 클라이언트와 컨테이너용 Application Gateway 프런트 엔드 간에 협상된 TLS 암호 도구 모음입니다. |
tlsProtocol | 클라이언트와 컨테이너용 Application Gateway 프런트 엔드 간에 협상된 TLS 버전입니다. |
trackingId | 추적 및 디버깅에 도움이 되는 컨테이너용 Application Gateway에서 생성한 GUID입니다. 이 값은 컨테이너용 Application Gateway에서 클라이언트로 반환된 x-request-id 헤더와 상관 관계가 있습니다. |
userAgent | 컨테이너용 Application Gateway가 클라이언트에서 수신한 요청의 사용자-에이전트 헤더입니다. |
참고 항목
requestUri 필드에 기록된 "secret", "password", "pwd", "passwd", "key", "token", "pat", "accesskey", "accesstoken", "credential", "sas", "personalAccessToken" 및 "personal.access.token"와 같은 쿼리 문자열 매개 변수 값은 중요한 정보가 기록되지 않도록 <redacted> 값으로 바뀝니다. 이는 구성할 수 없습니다.
다음은 스토리지 계정에 JSON 형식으로 내보내는 액세스 로그의 예제입니다.
{
"category": "TrafficControllerAccessLog",
"operationName": "ReqRespLogs",
"properties": {
"backendHost": "10.1.0.15:80",
"backendIp": "10.1.0.15",
"backendPort": "80",
"backendResponseLatency": "2",
"backendTimeTaken": "-",
"clientIp": "xxx.xxx.xxx.xxx:52526",
"frontendName": "frontend-primary",
"frontendPort": "443",
"frontendTLSFailureReason": "-",
"frontendTLSPeerFingerprint": "2c01bbc93009ad1fc977fe9115fae7ad298b665f",
"hostName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzXX.alb.azure.com",
"httpMethod": "GET",
"httpStatusCode": "200",
"httpVersion": "HTTP\/1.1",
"referer": "-",
"requestBodyBytes": "0",
"requestHeaderBytes": "223",
"requestUri": "\/index.php",
"responseBodyBytes": "91",
"responseHeaderBytes": "190",
"timeTaken": "2",
"tlsCipher": "TLS_AES_256_GCM_SHA384",
"tlsProtocol": "-",
"trackingId": "0ef125db-7fb7-48a0-b3fe-03fe0ffed873",
"userAgent": "curl\/7.81.0"
},
"resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/YYYYYY/PROVIDERS/MICROSOFT.SERVICENETWORKING/TRAFFICCONTROLLERS/ZZZZZZZ",
"time": "2023-07-22T06:26:58.895Z",
"location": "northcentralus"
}