App Service 애플리케이션 로깅 사용 및 구성
이 단원에서는 앱 로깅이 웹앱에 어떻게 도움이 되는지 살펴보고 이러한 로그를 활성화하는 방법을 보여줍니다.
앱 로그란?
Azure는 앱 로깅에 대해 기본 제공 진단을 제공합니다. 앱 로그는 앱 코드의 런타임 추적 문 출력입니다. 예를 들어 특정 함수가 처리되는 시기를 표시하는 추적을 추가하여 코드의 일부 논리를 확인하고자 할 수 있습니다. 또는 특정 수준의 오류가 발생한 경우에만 기록된 메시지를 보고 싶을 수도 있습니다. 과도한 로그는 성능에 영향을 미치고 스토리지를 빠르게 소모할 수 있으므로 앱 로깅은 기본적으로 사전 프로덕션 단계의 앱과 문제가 되는 문제에 사용됩니다. 이러한 이유로 파일 시스템에 대한 로깅은 12시간 후에 자동으로 비활성화됩니다.
앱 로깅은 스케일링에 제한에 있는데, 파일이 로그된 출력을 저장하는 데 사용되는 것이 주 원인입니다. 앱의 인스턴스가 여러 개 있고 동일한 스토리지가 모든 인스턴스에서 공유되는 경우 다른 인스턴스의 메시지가 인터리브되어 문제 해결이 어려울 수 있습니다. 각 인스턴스에 자체 로그 파일이 있는 경우 로그가 여러 개 있으므로 다시 인스턴스 관련 문제를 해결하기 어렵습니다.
Azure App Service를 통해 사용할 수 있는 로깅 유형은 앱의 코드 프레임워크, 그리고 앱이 Windows 또는 Linux 앱 호스트 중 어디에서 실행되는지 여부에 따라 달라집니다.
ASP.NET
ASP.NET 앱은 Windows 앱 서비스에서만 실행됩니다. 앱 진단 로그에 정보를 기록하려면 System.Diagnostics.Trace
클래스를 사용합니다. Azure portal에 표시된 error
, warning
, information
및 verbose
로깅 수준과 상관관계가 있는 네 가지 추적 수준을 사용할 수 있습니다.
- 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을 사용하여 로깅을 사용하도록 설정
포털에서 앱 로깅은 웹앱의 진단 로그 창을 통해 관리합니다.
웹앱의 파일 시스템에 대한 앱 로깅을 사용하려면 애플리케이션 로깅(파일 시스템)을 켜기로 설정한 다음, 수준을 오류, 경고, 정보 또는 자세한 정보로 설정합니다. 파일 시스템에 대한 로깅은 12시간 후에 자동으로 끄기로 다시 설정됩니다.
Blob 스토리지 컨테이너에 대한 앱 로깅을 사용하려면 애플리케이션 로깅(Blob)을 켜기로 설정한 다음 스토리지 계정과 컨테이너를 선택합니다. 스토리지 계정 및 웹앱은 동일한 Azure 지역에 만들어야 합니다. 그런 다음, 수준을 오류, 경고, 정보 또는 자세한 정보로 설정합니다.
참고
Linux 앱 로그는 Blob Storage에 저장할 수 없습니다.
Blob 스토리지에 로깅하는 경우 보존 기간도 설정해야 합니다. 파일 시스템 로그와 달리 Blob 로그는 기본적으로 삭제되지 않습니다. 보존 기간 옵션은 지정된 일 수보다 오래된 모든 로그가 삭제됨을 의미합니다.
로그를 구성했으면 저장을 선택합니다.
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>