Share via


모니터링 및 원격 분석(Azure를 사용하여 Real-World Cloud Apps 빌드)

작성자 : Rick Anderson, Tom Dykstra

수정 프로젝트 다운로드 또는 전자책 다운로드

Azure 전자책 을 사용하여 Real World Cloud Apps 빌드 는 Scott Guthrie가 개발한 프레젠테이션을 기반으로 합니다. 클라우드용 웹앱을 성공적으로 개발하는 데 도움이 될 수 있는 13개의 패턴과 사례를 설명합니다. 전자책에 대한 자세한 내용은 첫 번째 챕터를 참조하세요.

많은 사람들이 애플리케이션이 중단되면 고객에게 알리기 위해 고객에 의존합니다. 이는 어디서나 모범 사례가 아니며, 특히 클라우드에서는 그렇지 않습니다. 빠른 알림을 보장할 수 없으며 알림을 받으면 발생한 일에 대한 최소한의 오해의 소지가 있는 데이터를 받는 경우가 많습니다. 좋은 원격 분석 및 로깅 시스템을 사용하면 앱에서 무슨 일이 일어나고 있는지 알 수 있으며 문제가 발생하면 즉시 찾아서 유용한 문제 해결 정보를 사용할 수 있습니다.

원격 분석 솔루션 구입 또는 대여

참고

이 문서는 Application Insights가 릴리스되기 전에 작성되었습니다. Application Insights는 Azure에서 원격 분석 솔루션에 선호되는 방법입니다. 자세한 내용은 ASP.NET 웹 사이트에 대한 Application Insights 설정을 참조하세요 .

클라우드 환경에 대한 좋은 점 중 하나는 승리를 위해 길을 구입하거나 임대하는 것이 정말 쉽다는 것입니다. 원격 분석이 예입니다. 많은 노력이 없다면 매우 비용 효율적으로 정말 좋은 원격 분석 시스템을 가동하고 실행할 수 있습니다. Azure와 통합되는 훌륭한 파트너가 많이 있으며, 그 중 일부는 무료 계층을 가지고 있으므로 아무 것도 기본 원격 분석을 얻을 수 없습니다. 다음은 현재 Azure에서 사용할 수 있는 몇 가지 항목입니다.

Microsoft System Center 에는 모니터링 기능도 포함되어 있습니다.

원격 분석 시스템을 사용하는 것이 얼마나 쉬운지 보여 주는 New Relic 설정을 빠르게 살펴보겠습니다.

Azure 관리 포털에서 서비스에 등록합니다. 새로 만들기를 클릭한 다음 스토어를 클릭합니다. 추가 기능 선택 대화 상자가 나타납니다. 아래로 스크롤하여 New Relic을 클릭합니다.

추가 기능 선택

오른쪽 화살표를 클릭하고 원하는 서비스 계층을 선택합니다. 이 데모에서는 무료 계층을 사용합니다.

추가 기능 개인 설정

오른쪽 화살표를 클릭하고 "구매"를 확인합니다. 이제 New Relic이 포털에서 추가 기능으로 표시됩니다.

구매 검토

관리 포털의 New Relic 추가 기능

연결 정보를 클릭하고 라이선스 키를 복사합니다.

연결 정보

포털에서 웹앱에 대한 구성 탭으로 이동하여 성능 모니터링을추가 기능으로 설정하고 추가 기능 선택 드롭다운 목록을 New Relic로 설정합니다. 그런 다음 Save를 클릭합니다.

구성 탭의 New Relic

Visual Studio에서 앱에 New Relic NuGet 패키지를 설치합니다.

구성 탭의 개발자 분석

Azure에 앱을 배포하고 사용을 시작합니다. 몇 가지 수정 작업을 만들어 New Relic이 모니터링할 수 있는 몇 가지 작업을 제공합니다.

그런 다음 포털의 추가 기능 탭에서 New Relic 페이지로 돌아가서 관리를 클릭합니다. 포털은 자격 증명을 다시 입력할 필요가 없도록 인증을 위해 Single Sign-On을 사용하여 New Relic 관리 포털로 사용자를 보냅니다. 개요 페이지에는 다양한 성능 통계가 표시됩니다. (개요 페이지 전체 크기를 보려면 이미지를 클릭합니다.)

새 Relic 모니터링 탭

다음은 볼 수 있는 몇 가지 통계입니다.

  • 하루 중 다른 시간에 대한 평균 응답 시간입니다.

    응답 시간

  • 하루 중 다른 시간에 처리량 속도(분당 요청 수)입니다.

    처리량

  • 서버 CPU 시간은 서로 다른 HTTP 요청을 처리하는 데 소요되었습니다.

    웹 트랜잭션 시간

  • 애플리케이션 코드의 여러 부분에서 소요된 CPU 시간:

    추적 세부 정보

  • 기록 성능 통계.

    기록 성능

  • Blob 서비스와 같은 외부 서비스에 대한 호출 및 서비스가 얼마나 안정적이고 응답적이었는지에 대한 통계입니다.

    외부 서비스

    외부 서비스2

    외부 서비스

  • 전 세계 위치 또는 미국 웹앱 트래픽이 어디에서 왔는지에 대한 정보입니다.

    Geography

보고서 및 이벤트를 설정할 수도 있습니다. 예를 들어 오류가 표시되면 언제든지 해당 문제에 대해 지원 직원에게 경고하는 이메일을 보낼 수 있습니다.

보고서

New Relic은 원격 분석 시스템의 한 예일 뿐입니다. 다른 서비스에서도 이 모든 것을 가져올 수 있습니다. 클라우드의 아름다움은 코드를 작성하지 않고도 최소한의 비용으로 애플리케이션이 사용되는 방식과 고객이 실제로 경험하는 것에 대한 더 많은 정보를 갑자기 얻을 수 있다는 것입니다.

인사이트에 대한 로그

원격 분석 패키지는 좋은 첫 번째 단계이지만 여전히 사용자 고유의 코드를 계측해야 합니다. 원격 분석 서비스는 문제가 있는 경우를 알려주고 고객이 발생하는 내용을 알려주지만 코드에서 발생하는 일에 대한 많은 인사이트를 제공하지는 않을 수 있습니다.

앱이 수행하는 작업을 확인하기 위해 프로덕션 서버로 원격으로 연결할 필요가 없습니다. 서버가 하나 있는 경우 실용적일 수 있지만 수백 대의 서버로 스케일링하고 원격으로 전환해야 하는 서버를 모르는 경우는 어떨까요? 로깅은 문제를 분석하고 디버그하기 위해 프로덕션 서버로 원격으로 연결할 필요가 없는 충분한 정보를 제공해야 합니다. 로그를 통해서만 문제를 격리할 수 있도록 충분한 정보를 로깅해야 합니다.

프로덕션에 로그인

많은 사람들이 문제가 있고 디버그하려는 경우에만 프로덕션에서 추적을 켭니다. 이렇게 하면 문제를 인식하는 시간과 문제에 대한 유용한 문제 해결 정보를 얻는 시간 사이에 상당한 지연이 발생할 수 있습니다. 그리고 가져오는 정보는 일시적인 오류에 유용하지 않을 수 있습니다.

스토리지가 저렴한 클라우드 환경에서 권장되는 것은 항상 프로덕션 환경에서 로그온을 그대로 두는 것입니다. 이렇게 하면 오류가 발생하면 이미 기록되고 시간이 지남에 따라 발생하거나 다른 시간에 정기적으로 발생하는 문제를 분석하는 데 도움이 되는 기록 데이터가 있습니다. 제거 프로세스를 자동화하여 이전 로그를 삭제할 수 있지만 로그를 유지하는 것보다 이러한 프로세스를 설정하는 것이 더 비싸다는 것을 알 수 있습니다.

로깅의 추가 비용은 문제가 발생할 때 필요한 모든 정보를 이미 사용할 수 있도록 하여 절감할 수 있는 문제 해결 시간과 비용의 양에 비해 간단합니다. 그런 다음 누군가가 어젯밤 8:00 경에 임의 오류가 있다고 말하지만 오류를 기억하지 못하면 문제가 무엇인지 쉽게 알 수 있습니다.

한 달에 $4 미만의 경우 50GB의 로그를 계속 사용할 수 있으며, 한 가지 사항을 염두에 두는 한 로깅의 성능 영향은 매우 간단합니다. 성능 병목 현상을 방지하기 위해 로깅 라이브러리가 비동기인지 확인합니다.

작업이 필요한 로그에서 알리는 로그 구분

로그는 INFORM(무언가를 알고 싶습니다) 또는 ACT(작업을 수행하려는 경우)를 의미합니다. 진정으로 사람이나 자동화된 프로세스가 조치를 취해야 하는 문제에 대해서만 ACT 로그를 작성해야 합니다. ACT 로그가 너무 많으면 노이즈가 발생하므로 정품 문제를 찾기 위해 모든 것을 선별하는 데 너무 많은 작업이 필요합니다. 또한 ACT 로그가 지원 직원에게 이메일을 보내는 것과 같은 일부 작업을 자동으로 트리거하는 경우 단일 문제로 인해 수천 개의 작업이 트리거되지 않도록 합니다.

.NET System.Diagnostics 추적에서 로그에 오류, 경고, 정보 및 디버그/자세한 정보 수준을 할당할 수 있습니다. ACT 로그의 오류 수준을 예약하고 INFORM 로그에 낮은 수준을 사용하여 INFORM 로그와 ACT를 구분할 수 있습니다.

로깅 수준

런타임에 로깅 수준 구성

프로덕션 환경에서 항상 로깅을 사용하는 것이 중요하지만, 또 다른 모범 사례는 애플리케이션을 다시 배포하거나 다시 시작하지 않고도 런타임에 로깅하는 세부 수준을 조정할 수 있는 로깅 프레임워크를 구현하는 것입니다. 예를 들어 에서 추적 기능을 System.Diagnostics 사용하는 경우 오류, 경고, 정보 및 디버그/자세한 정보 로그를 만들 수 있습니다. 프로덕션 환경에서 오류, 경고 및 정보 로그를 항상 기록하는 것이 좋으며, 사례별로 문제 해결을 위해 디버그/자세한 정보 로깅을 동적으로 추가할 수 있습니다.

Azure App Service Web Apps 파일 시스템, Table Storage 또는 Blob Storage에 로그를 쓰기 System.Diagnostics 위한 기본 제공 지원을 제공합니다. 각 스토리지 대상에 대해 다른 로깅 수준을 선택할 수 있으며 애플리케이션을 다시 시작하지 않고 즉시 로깅 수준을 변경할 수 있습니다. Blob Storage 지원을 사용하면 HDInsight 에서 Blob Storage를 직접 사용하는 방법을 알고 있으므로 애플리케이션 로그에서 HDInsight 분석 작업을 더 쉽게 실행할 수 있습니다.

예외 기록

예외만 두지 마세요. 로깅 코드의 ToString() 이는 컨텍스트 정보를 남깁니다. SQL 오류의 경우 SQL 오류 번호가 제외됩니다. 모든 예외의 경우 컨텍스트 정보, 예외 자체 및 내부 예외를 포함하여 문제 해결에 필요한 모든 것을 제공하고 있는지 확인합니다. 예를 들어 컨텍스트 정보에는 서버 이름, 트랜잭션 식별자 및 사용자 이름(암호 또는 비밀이 아님)이 포함될 수 있습니다.

각 개발자가 예외 로깅을 통해 올바른 작업을 수행하는 경우 그 중 일부는 그렇지 않습니다. 매번 올바른 방식으로 수행되도록 하려면 로거 인터페이스에 바로 예외 처리를 빌드합니다. 예외 개체 자체를 로거 클래스에 전달하고 로거 클래스에서 예외 데이터를 제대로 기록합니다.

서비스에 대한 호출 기록

앱이 데이터베이스 또는 REST API 또는 외부 서비스에 대해 호출할 때마다 로그를 작성하는 것이 좋습니다. 성공 또는 실패의 표시뿐만 아니라 각 요청이 걸린 기간을 로그에 포함합니다. 클라우드 환경에서는 가동 중단이 아닌 느린 중단과 관련된 문제가 자주 발생합니다. 일반적으로 10밀리초가 걸리는 항목이 갑자기 1초 정도 걸릴 수 있습니다. 누군가가 앱이 느리다는 것을 알릴 때 New Relic 또는 보유한 원격 분석 서비스를 살펴보고 해당 환경의 유효성을 검사할 수 있기를 원하며, 느린 이유에 대한 세부 정보를 자세히 알아보기 위해 고유한 로그를 볼 수 있기를 원합니다.

ILogger 인터페이스 사용

프로덕션 애플리케이션을 만들 때 수행하는 것이 좋습니다. 간단한 ILogger 인터페이스를 만들고 그 안에 몇 가지 메서드를 붙이는 것입니다. 이렇게 하면 나중에 로깅 구현을 쉽게 변경할 수 있으며 이를 위해 모든 코드를 거치지 않아도 됩니다. Fix It 앱 전체에서 클래스를 System.Diagnostics.Trace 사용할 수 있지만 대신 ILogger를 구현하는 로깅 클래스의 커버 아래에 사용하고 앱 전체에서 ILogger 메서드를 호출합니다.

이렇게 하면 로깅을 더 풍부하게 만들려는 경우 원하는 로깅 메커니즘으로 바꿀 System.Diagnostics.Trace 수 있습니다. 예를 들어 앱이 증가함에 따라 NLog 또는 엔터프라이즈 라이브러리 로깅 애플리케이션 블록과 같은 보다 포괄적인 로깅 패키지를 사용하도록 결정할 수 있습니다. (Log4Net은 또 다른 인기 있는 로깅 프레임워크이지만 비동기 로깅은 수행하지 않습니다.)

NLog와 같은 프레임워크를 사용하는 한 가지 가능한 이유는 로깅 출력을 별도의 대용량 및 고가용성 데이터 저장소로 쉽게 나눌 수 있기 때문입니다. 이렇게 하면 ACT 데이터에 대한 빠른 액세스를 유지하면서 빠른 쿼리를 실행할 필요가 없는 대량의 INFORM 데이터를 효율적으로 저장할 수 있습니다.

의미 체계 로깅

보다 유용한 진단 정보를 생성할 수 있는 로깅을 수행하는 비교적 새로운 방법은 SLAB(엔터프라이즈 라이브러리 의미 체계 로깅 애플리케이션 블록)을 참조하세요. SLAB은 .NET 4.5의 ETW( Windows용 이벤트 추적 ) 및 EventSource 지원을 사용하여 보다 구조화되고 쿼리 가능한 로그를 만들 수 있습니다. 기록하는 각 이벤트 유형에 대해 다른 메서드를 정의하여 작성하는 정보를 사용자 지정할 수 있습니다. 예를 들어 SQL Database 오류를 기록하려면 메서드를 LogSQLDatabaseError 호출할 수 있습니다. 이러한 종류의 예외의 경우 중요한 정보가 오류 번호라는 것을 알고 있으므로 메서드 서명에 오류 번호 매개 변수를 포함하고 오류 번호를 작성하는 로그 레코드에 별도의 필드로 기록할 수 있습니다. 숫자는 별도의 필드에 있으므로 오류 번호를 메시지 문자열에 연결하는 경우보다 SQL 오류 번호를 기반으로 보고서를 보다 쉽고 안정적으로 가져올 수 있습니다.

수정 앱에서 로깅

ILogger 인터페이스

수정 앱의 ILogger 인터페이스는 다음과 같습니다.

public interface ILogger
{
    void Information(string message);
    void Information(string fmt, params object[] vars);
    void Information(Exception exception, string fmt, params object[] vars);

    void Warning(string message);
    void Warning(string fmt, params object[] vars);
    void Warning(Exception exception, string fmt, params object[] vars);

    void Error(string message);
    void Error(string fmt, params object[] vars);
    void Error(Exception exception, string fmt, params object[] vars);

    void TraceApi(string componentName, string method, TimeSpan timespan);
    void TraceApi(string componentName, string method, TimeSpan timespan, string properties);
    void TraceApi(string componentName, string method, TimeSpan timespan, string fmt, params object[] vars);
}

이러한 메서드를 사용하면 System.Diagnostics에서 지원하는 동일한 네 가지 수준에서 로그를 작성할 수 있습니다. TraceApi 메서드는 대기 시간에 대한 정보를 사용하여 외부 서비스 호출을 로깅하기 위한 것입니다. 디버그/자세한 정보 표시 수준에 대한 메서드 집합을 추가할 수도 있습니다.

ILogger 인터페이스의 로거 구현

인터페이스의 구현은 매우 간단합니다. 기본적으로 표준 System.Diagnostics 메서드를 호출합니다. 다음 코드 조각은 세 가지 정보 메서드와 각각 각각을 보여 줍니다.

public class Logger : ILogger
{
    public void Information(string message)
    {
        Trace.TraceInformation(message);
    }

    public void Information(string fmt, params object[] vars)
    {
        Trace.TraceInformation(fmt, vars);
    }

    public void Information(Exception exception, string fmt, params object[] vars)
    {
        var msg = String.Format(fmt, vars);
        Trace.TraceInformation(string.Format(fmt, vars) + ";Exception Details={0}", exception.ToString());
    }

    public void Warning(string message)
    {
        Trace.TraceWarning(message);
    }

    public void Error(string message)
    {
        Trace.TraceError(message);
    }

    public void TraceApi(string componentName, string method, TimeSpan timespan, string properties)
    {
        string message = String.Concat("component:", componentName, ";method:", method, ";timespan:", timespan.ToString(), ";properties:", properties);
        Trace.TraceInformation(message);
    }
}

ILogger 메서드 호출

수정 앱의 코드가 예외를 catch할 때마다 ILogger 메서드를 호출하여 예외 세부 정보를 기록합니다. 또한 데이터베이스, Blob 서비스 또는 REST API를 호출할 때마다 호출 전에 스톱워치를 시작하고, 서비스가 반환될 때 스톱워치를 중지하고, 성공 또는 실패에 대한 정보와 함께 경과된 시간을 기록합니다.

로그 메시지에는 클래스 이름 및 메서드 이름이 포함됩니다. 로그 메시지가 애플리케이션 코드에서 작성한 부분을 식별하는 것이 좋습니다.

public class FixItTaskRepository : IFixItTaskRepository
{
    private MyFixItContext db = new MyFixItContext();
    private ILogger log = null;

    public FixItTaskRepository(ILogger logger)
    {
        log = logger;
    }

    public async Task<FixItTask> FindTaskByIdAsync(int id)
    {
        FixItTask fixItTask = null;
        Stopwatch timespan = Stopwatch.StartNew();

        try
        {
            fixItTask = await db.FixItTasks.FindAsync(id);
            
            timespan.Stop();
            log.TraceApi("SQL Database", "FixItTaskRepository.FindTaskByIdAsync", timespan.Elapsed, "id={0}", id);
        }
        catch(Exception e)
        {
            log.Error(e, "Error in FixItTaskRepository.FindTaskByIdAsynx(id={0})", id);
        }

        return fixItTask;
    }

이제 수정 앱이 SQL Database 호출할 때마다 호출, 호출을 호출한 메서드 및 정확히 얼마나 많은 시간이 걸렸는지 확인할 수 있습니다.

로그에서 쿼리 SQL Database

엔터티 속성 편집 및 성공적인 업데이트에 대해 각 속성의 모양을 보여 주는 스크린샷.

로그를 탐색하는 경우 데이터베이스 호출에 걸리는 시간이 가변적임을 알 수 있습니다. 이 정보는 유용할 수 있습니다. 앱이 이 모든 것을 기록하기 때문에 시간이 지남에 따라 데이터베이스 서비스가 수행되는 방식에 대한 기록 추세를 분석할 수 있습니다. instance 경우 대부분의 경우 서비스가 빠를 수 있지만 요청이 실패하거나 응답이 하루 중 특정 시간에 느려질 수 있습니다.

Blob 서비스에 대해 동일한 작업을 수행할 수 있습니다. 앱이 새 파일을 업로드할 때마다 로그가 있으며 각 파일을 업로드하는 데 걸린 시간을 정확하게 확인할 수 있습니다.

Blob 업로드 로그

서비스를 호출할 때마다 작성할 수 있는 몇 줄의 추가 코드 줄일 뿐이며, 이제 누군가가 문제가 발생했다고 말하면 문제가 무엇인지, 오류인지, 아니면 실행 속도가 느려졌는지 정확히 알 수 있습니다. 서버에 원격으로 연결하거나 오류가 발생한 후 로깅을 켜고 다시 만들지 않고도 문제의 원인을 파악할 수 있습니다.

수정 앱의 종속성 주입

위에 표시된 예제의 리포지토리 생성자가 로거 인터페이스 구현을 가져오는 방법을 궁금할 수 있습니다.

public class FixItTaskRepository : IFixItTaskRepository
{
    private MyFixItContext db = new MyFixItContext();
    private ILogger log = null;

    public FixItTaskRepository(ILogger logger)
    {
        log = logger;
    }

구현에 인터페이스를 연결하기 위해 앱은 AutoFac과 함께 DI(종속성 주입)를 사용합니다. DI를 사용하면 코드 전체의 여러 위치에서 인터페이스를 기반으로 개체를 사용할 수 있으며 인터페이스가 인스턴스화될 때 사용되는 구현을 한 곳에서만 지정하면 됩니다. 이렇게 하면 구현을 더 쉽게 변경할 수 있습니다. 예를 들어 System.Diagnostics 로거를 NLog 로거로 바꿀 수 있습니다. 또는 자동화된 테스트를 위해 모의 버전의 로거를 대체할 수 있습니다.

Fix It 애플리케이션은 모든 리포지토리 및 모든 컨트롤러에서 DI를 사용합니다. 컨트롤러 클래스의 생성자는 리포지토리가 로거 인터페이스를 가져오는 것과 동일한 방식으로 ITaskRepository 인터페이스를 가져옵니다.

public class DashboardController : Controller
{
    private IFixItTaskRepository fixItRepository = null;

    public DashboardController(IFixItTaskRepository repository)
    {
        fixItRepository = repository;
    }

앱은 AutoFac DI 라이브러리를 사용하여 이러한 생성자에 대한 TaskRepositoryLogger 인스턴스를 자동으로 제공합니다.

public class DependenciesConfig
{
    public static void RegisterDependencies()
    {
        var builder = new ContainerBuilder();

        builder.RegisterControllers(typeof(MvcApplication).Assembly);
        builder.RegisterType<Logger>().As<ILogger>().SingleInstance();

        builder.RegisterType<FixItTaskRepository>().As<IFixItTaskRepository>();
        builder.RegisterType<PhotoService>().As<IPhotoService>().SingleInstance();
        builder.RegisterType<FixItQueueManager>().As<IFixItQueueManager>();

        var container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    }
}

이 코드는 기본적으로 생성자에 ILogger 인터페이스가 필요하고, 로거 클래스의 instance 전달하며, IFixItTaskRepository 인터페이스가 필요할 때마다 FixItTaskRepository 클래스의 instance 전달한다고 말합니다.

AutoFac 은 사용할 수 있는 많은 종속성 주입 프레임워크 중 하나입니다. 또 다른 인기 있는 것은 Microsoft 패턴 및 사례에서 권장되고 지원되는 Unity입니다.

Azure의 기본 제공 로깅 지원

Azure는 Azure App Service Web Apps 다음과 같은 종류의 로깅을 지원합니다.

  • System.Diagnostics 추적(사이트를 다시 시작하지 않고 즉시 수준을 켜고 끄고 설정할 수 있음).
  • Windows 이벤트.
  • IIS 로그(HTTP/FREB).

Azure는 Cloud Services 다음과 같은 종류의 로깅을 지원합니다.

  • System.Diagnostics 추적.
  • 성능 카운터.
  • Windows 이벤트.
  • IIS 로그(HTTP/FREB).
  • 사용자 지정 디렉터리 모니터링.

수정 앱은 System.Diagnostics 추적을 사용합니다. 웹앱에서 System.Diagnostics 로깅을 사용하도록 설정하려면 포털에서 스위치를 대칭 이동하거나 REST API를 호출하기만 하면 됩니다. 포털에서 사이트의 구성 탭을 클릭하고 아래로 스크롤하여 애플리케이션 진단 섹션을 확인합니다 . 로깅을 켜거나 끄고 원하는 로깅 수준을 선택할 수 있습니다. Azure에서 파일 시스템 또는 스토리지 계정에 로그를 기록하도록 할 수 있습니다.

구성 탭의 앱 진단 및 사이트 진단

Azure에서 로깅을 사용하도록 설정한 후에는 로그가 만들어질 때 Visual Studio 출력 창에서 로그를 볼 수 있습니다.

스트리밍 로그 메뉴

스트리밍 로그 메뉴2

또한 스토리지 계정에 로그를 작성하고 Visual Studio의 서버 Explorer 또는 Azure Storage Explorer 같은 Azure Storage Table 서비스에 액세스할 수 있는 도구를 사용하여 로그를 볼 수도 있습니다.

서버 Explorer 로그

요약

기본 제공 원격 분석 시스템을 구현하고, 사용자 고유의 코드로 로깅을 계측하고, Azure에서 로깅을 구성하는 것은 매우 간단합니다. 프로덕션 문제가 있는 경우 원격 분석 시스템과 사용자 지정 로그의 조합은 고객에게 주요 문제가 되기 전에 문제를 신속하게 resolve 데 도움이 됩니다.

다음 챕터에서는 일시적인 오류를 처리하여 조사해야 하는 프로덕션 문제가 되지 않도록 하는 방법을 살펴보겠습니다.

리소스

자세한 내용은 다음 리소스를 참조하세요.

주로 원격 분석에 대한 설명서:

주로 로깅에 대한 설명서:

주로 문제 해결에 대한 설명서:

비디오:

  • FailSafe: 확장 가능하고 복원력 있는 Cloud Services 빌드합니다. 울리히 호만, 마크 메르쿠리, 마크 심스의 9부작 시리즈. 실제 고객과의 CAT(Microsoft 고객 자문 팀) 경험에서 가져온 스토리를 통해 매우 액세스 가능하고 흥미로운 방식으로 높은 수준의 개념과 아키텍처 원칙을 제시합니다. 에피소드 4와 9는 모니터링 및 원격 분석에 관한 것입니다. 에피소드 9에는 모니터링 서비스 MetricsHub, AppDynamics, New Relic 및 PagerDuty에 대한 개요가 포함되어 있습니다.
  • 큰 빌드: Azure 고객으로부터 배운 교훈 - 2부. Mark Simms는 실패를 설계하고 모든 것을 계측하는 것에 대해 이야기합니다. Failsafe 시리즈와 비슷하지만 자세한 방법 세부 정보로 이동합니다.

코드 샘플: