App Service 애플리케이션 로깅 사용 및 구성

완료됨

이 단원에서는 앱 로깅이 웹앱에 어떻게 도움이 되는지 살펴보고 이러한 로그를 활성화하는 방법을 보여줍니다.

앱 로그란?

Azure는 앱 로깅에 대해 기본 제공 진단을 제공합니다. 앱 로그는 앱 코드의 런타임 추적 문 출력입니다. 예를 들어 특정 함수가 처리되는 시기를 표시하는 추적을 추가하여 코드의 일부 논리를 확인하고자 할 수 있습니다. 또는 특정 수준의 오류가 발생한 경우에만 기록된 메시지를 보고 싶을 수도 있습니다. 과도한 로그는 성능에 영향을 미치고 스토리지를 빠르게 소모할 수 있으므로 앱 로깅은 기본적으로 사전 프로덕션 단계의 앱과 문제가 되는 문제에 사용됩니다. 이러한 이유로 파일 시스템에 대한 로깅은 12시간 후에 자동으로 비활성화됩니다.

앱 로깅은 스케일링에 제한에 있는데, 파일이 로그된 출력을 저장하는 데 사용되는 것이 주 원인입니다. 앱의 인스턴스가 여러 개 있고 동일한 스토리지가 모든 인스턴스에서 공유되는 경우 다른 인스턴스의 메시지가 인터리브되어 문제 해결이 어려울 수 있습니다. 각 인스턴스에 자체 로그 파일이 있는 경우 로그가 여러 개 있으므로 다시 인스턴스 관련 문제를 해결하기 어렵습니다.

Azure App Service를 통해 사용할 수 있는 로깅 유형은 앱의 코드 프레임워크, 그리고 앱이 Windows 또는 Linux 앱 호스트 중 어디에서 실행되는지 여부에 따라 달라집니다.

ASP.NET

ASP.NET 앱은 Windows 앱 서비스에서만 실행됩니다. 앱 진단 로그에 정보를 기록하려면 System.Diagnostics.Trace 클래스를 사용합니다. Azure portal에 표시된 error, warning, informationverbose 로깅 수준과 상관관계가 있는 네 가지 추적 수준을 사용할 수 있습니다.

  • Trace.TraceError("Message"); // 오류 메시지 작성
  • Trace.TraceWarning("Message"); // 경고 메시지 작성
  • Trace.TraceInformation("Message"); // 정보 메시지 작성
  • Trace.WriteLine("Message"); // 자세한 정보 메시지 작성

ASP.NET Core 앱

ASP.NET Core 앱은 Windows 또는 Linux에서 실행할 수 있습니다. Azure 앱 로그에 정보를 기록하려면 로거 팩터리 클래스와 다음 6개 로그 수준 중 하나를 사용합니다.

  • logger.LogCritical("Message"); // 로그 수준 5에서 중요한 메시지 작성
  • logger.LogError("Message"); // 로그 수준 4에서 오류 메시지 작성
  • logger.LogWarning("Message"); // 로그 수준 3에서 경고 메시지 작성
  • logger.LogInformation("Message"); // 로그 수준 2에서 정보 메시지 작성
  • logger.LogDebug("Message"); // 로그 수준 1에서 디버그 메시지 작성
  • logger.LogTrace("Message"); // 로그 수준 0에서 자세한 추적 메시지 작성

Windows 기반의 ASP.NET Core 앱의 경우 이러한 메시지가 다음과 같은 방식으로 Azure Portal의 필터와 관련되어 있습니다.

  • 수준 4와 5는 오류 메시지입니다.
  • 수준 3은 경고 메시지입니다.
  • 수준 2는 정보 메시지입니다.
  • 수준 0과 1은 자세한 메시지입니다.

Linux의 ASP.NET Core 앱의 경우 오류 메시지(수준 4 및 5)만 기록됩니다.

Node.js 앱

Windows 또는 Linux의 Node.js 앱과 같은 스크립트 기반 웹앱의 경우 console() 메서드를 통해 앱 로깅을 사용할 수 있습니다.

  • console.error("메시지"); // STDERR에 메시지를 씁니다.
  • console.log("메시지"); // STDOUT에 메시지를 씁니다.

두 유형의 메시지 모두 Azure 앱 서비스 오류 수준 로그에 기록됩니다.

Windows 및 Linux 호스트의 로깅 차이점

메시지를 로그 파일로 라우팅하기 위해 Azure 웹앱은 웹 서버(IIS 프로세스)를 사용합니다. Windows 기반 웹앱은 확고하게 자리를 잡은 Azure 서비스이고 ASP.NET 앱에 대한 메시지가 기본 IIS 서비스와 긴밀하게 통합되므로 Windows 앱이 풍부한 로깅 인프라의 이점을 누릴 수 있습니다. 다른 앱의 경우 로깅 옵션은 Windows 앱 서비스에서 실행되는 경우에도 개발 플랫폼에 의해 제한됩니다.

앱의 컨테이너에 사용되는 Docker 이미지는 Linux 기반 스크립트 앱(예: Node.js)에서 사용할 수 있는 로깅 기능을 결정합니다. STDERR 또는 STDOUT에 대한 리디렉션 사용과 같은 기본 로깅은 Docker 로그를 사용합니다. 풍부한 로깅 기능은 기본 이미지와 PHP, Perl, Ruby 등을 실행하는지 여부에 따라 달라집니다. Windows 앱 IIS에서 제공하는 것과 동등한 웹 애플리케이션 로깅을 다운로드하려면 SSH를 사용하여 컨테이너에 연결해야 할 수도 있습니다.

다음 표에는 일반적인 앱 환경 및 호스트에 대한 로깅 지원이 요약되어 있습니다.

앱 환경 호스트 로그 수준 위치 저장
ASP.NET Windows 오류, 경고, 정보, 자세한 정보 파일 시스템, Blob 스토리지
ASP.NET Core Windows 오류, 경고, 정보, 자세한 정보 파일 시스템, Blob 스토리지
ASP.NET Core Linux 오류 파일 시스템
Node.js Windows 오류(STDERR), 정보(STDOUT), 경고, 자세한 정보 파일 시스템, Blob 스토리지
Node.js Linux 오류 파일 시스템
Java Linux 오류 파일 시스템

앱 진단의 대안

Azure Application Insights는 자세한 사용량 및 성능 데이터와 같은 더 많은 성능 모니터링 기능을 제공하는 사이트 확장입니다. 프로덕션 앱 배포용으로 설계되었으며 잠재적으로 유용한 개발 도구입니다. Application Insights는 다양한 앱 개발 환경과 호환되며, 앱이 ASP.NET이든 아니면 Node이든 상관 없이 풍부한 원격 분석 및 성능 데이터를 제공합니다. 그러나 Application Insights를 사용하려면 App Insights SDK를 사용하여 앱 내에 특정 코드를 포함해야 합니다. Application Insights는 청구 가능한 서비스이기도 합니다. 따라서 앱 배포 및 수집된 데이터의 규모에 따라 정기적인 비용을 계획해야 할 수 있습니다.

또한 앱의 작동 방식을 프로파일링하는 데 도움이 되는 앱의 메트릭을 볼 수 있습니다. 이러한 카운터는 생산 및 개발에 유용합니다. 카운터가 특정 임계값에 도달할 때 CPU, 메모리, 네트워크 및 파일 시스템 사용량을 볼 수 있습니다. 메트릭 비용 청구는 앱 서비스 플랜 계층에서 다룹니다.

Azure Portal을 사용하여 로깅을 사용하도록 설정

포털에서 앱 로깅은 웹앱의 진단 로그 창을 통해 관리합니다.

Screenshot of Diagnostics logs pane in the Azure portal.

웹앱의 파일 시스템에 대한 앱 로깅을 사용하려면 애플리케이션 로깅(파일 시스템)켜기로 설정한 다음, 수준을 오류, 경고, 정보 또는 자세한 정보로 설정합니다. 파일 시스템에 대한 로깅은 12시간 후에 자동으로 끄기로 다시 설정됩니다.

Blob 스토리지 컨테이너에 대한 앱 로깅을 사용하려면 애플리케이션 로깅(Blob)켜기로 설정한 다음 스토리지 계정과 컨테이너를 선택합니다. 스토리지 계정 및 웹앱은 동일한 Azure 지역에 만들어야 합니다. 그런 다음, 수준을 오류, 경고, 정보 또는 자세한 정보로 설정합니다.

참고

Linux 앱 로그는 Blob Storage에 저장할 수 없습니다.

Blob 스토리지에 로깅하는 경우 보존 기간도 설정해야 합니다. 파일 시스템 로그와 달리 Blob 로그는 기본적으로 삭제되지 않습니다. 보존 기간 옵션은 지정된 일 수보다 오래된 모든 로그가 삭제됨을 의미합니다.

Screenshot of configuring application logs in the Azure portal with Save highlighted.

로그를 구성했으면 저장을 선택합니다.

Azure CLI를 사용하여 로깅 활성화

파일 시스템에 대한 앱 로깅을 사용하도록 설정하려면 다음 명령을 실행합니다.

az webapp log config --application-logging filesystem --level verbose --name <app-name> --resource-group <resource-group-name>

예를 들어 contosofashions123이라는 앱의 파일 시스템에 대한 로깅을 사용하도록 설정하고 모든 메시지를 캡처하려면 다음 명령을 실행합니다.

az webapp log config --application-logging filesystem --level verbose --name contosofashions123 --resource-group contosofashionsRG

현재 Azure CLI 명령을 사용하여 애플리케이션 로깅을 사용하지 않도록 설정할 수 있는 방법은 없습니다. 그러나 다음 명령은 파일 시스템 로깅을 오류 수준으로만 다시 설정합니다.

az webapp log config --application-logging off --name <app-name> --resource-group <resource-group-name>

앱의 현재 로깅 상태를 보려면 다음 명령을 사용합니다.

az webapp log show --name <app-name> --resource-group <resource-group-name>

지식 점검

1.

Azure Blob 스토리지에 로그를 저장할 수 있는 웹앱 형식은 무엇입니까?

2.

파일 시스템 로깅이 12시간 후에 자동으로 꺼지는 이유는 무엇입니까?