Azure Functions 모니터링Monitor Azure Functions

Azure Functions 는 함수를 모니터링 하기 위한 Azure 애플리케이션 Insights 와의 기본 제공 통합을 제공 합니다.Azure Functions offers built-in integration with Azure Application Insights to monitor functions. 이 문서에서는 Application Insights에 시스템 생성 로그 파일을 보내도록 Azure Functions를 구성 하는 방법을 보여 줍니다.This article shows you how to configure Azure Functions to send system-generated log files to Application Insights.

로그, 성능 및 오류 데이터를 수집 하기 때문에 Application Insights를 사용 하는 것이 좋습니다.We recommend using Application Insights because it collects log, performance, and error data. 성능 변칙을 자동으로 감지 하 고, 문제를 진단 하 고 함수 사용 방법을 이해 하는 데 도움이 되는 강력한 분석 도구를 포함 합니다.It automatically detects performance anomalies and includes powerful analytics tools to help you diagnose issues and to understand how your functions are used. 성능 및 가용성을 지속적으로 향상시킬 수 있도록 설계되었습니다.It's designed to help you continuously improve performance and usability. 로컬 함수 앱 프로젝트 개발 중에도 Application Insights을 사용할 수 있습니다.You can even use Application Insights during local function app project development. 자세한 내용은 Application Insights 란?을 참조 하세요.For more information, see What is Application Insights?.

필요한 Application Insights 계측은 Azure Functions에 기본 제공 되므로 함수 앱을 Application Insights 리소스에 연결 하는 데 유효한 계측 키만 있으면 됩니다.As the required Application Insights instrumentation is built into Azure Functions, all you need is a valid instrumentation key to connect your function app to an Application Insights resource.

Application Insights 가격 책정 및 제한Application Insights pricing and limits

무료로 함수 앱과 Application Insights 통합을 사용해 볼 수 있습니다.You can try out Application Insights integration with Function Apps for free. 무료로 처리할 수 있는 데이터의 양에 대 한 일일 제한이 있습니다.There's a daily limit to how much data can be processed for free. 테스트 하는 동안이 제한에 도달할 수 있습니다.You might hit this limit during testing. Azure는 일일 한도에 가까워지면 포털 및 이메일 알림을 제공합니다.Azure provides portal and email notifications when you're approaching your daily limit. 이러한 경고를 놓친 후 한도에 도달 하면 Application Insights 쿼리에 새 로그가 표시 되지 않습니다.If you miss those alerts and hit the limit, new logs won't appear in Application Insights queries. 불필요 한 문제 해결 시간을 방지 하기 위해 제한 사항을 알고 있어야 합니다.Be aware of the limit to avoid unnecessary troubleshooting time. 자세한 내용은 Application Insights에서 가격 책정 및 데이터 볼륨 관리를 참조하세요.For more information, see Manage pricing and data volume in Application Insights.

함수 앱에 사용할 수 있는 Application Insights 기능의 전체 목록은 지원 되는 Azure Functions 기능에 대해 Application Insights에 자세히 설명 되어 있습니다.The full list of Application Insights features available to your function app is detailed in Application Insights for Azure Functions supported features.

Application Insights 통합 사용Enable Application Insights integration

함수 앱이 Application Insights로 데이터를 보내려면 Application Insights 리소스의 계측 키를 알고 있어야 합니다.For a function app to send data to Application Insights, it needs to know the instrumentation key of an Application Insights resource. 이 키는 APPINSIGHTS_INSTRUMENTATIONKEY라는 앱 설정에 있어야 합니다.The key must be in an app setting named APPINSIGHTS_INSTRUMENTATIONKEY.

포털의 새 함수 앱New function app in the portal

Azure Portal에서 함수 앱을 만들때 Application Insights 통합은 기본적으로 사용 하도록 설정 됩니다.When you create your function app in the Azure portal, Application Insights integration is enabled by default. Application Insights 리소스는 함수 앱과 동일한 이름을 가지 며 동일한 지역 또는 가장 가까운 지역에 생성 됩니다.The Application Insights resource has the same name as your function app, and it's created either in the same region or in the nearest region.

생성 되는 Application Insights 리소스를 검토 하려면 해당 리소스를 선택 하 여 Application Insights 창을 확장 합니다.To review the Application Insights resource being created, select it to expand the Application Insights window. 새 리소스 이름을 변경 하거나 데이터를 저장 하려는 Azure 지리 에서 다른 위치 를 선택할 수 있습니다.You can change the New resource name or choose a different Location in an Azure geography where you want to store your data.

함수 앱을 만들 때 Application Insights 사용

만들기를 선택 하면 응용 프로그램 설정에서 APPINSIGHTS_INSTRUMENTATIONKEY 설정 된 함수 앱을 사용 하 여 Application Insights 리소스가 생성 됩니다.When you choose Create, an Application Insights resource is created with your function app, which has the APPINSIGHTS_INSTRUMENTATIONKEY set in application settings. 모든 것이 준비 되었습니다.Everything is ready to go.

기존 함수 앱에 추가Add to an existing function app

Azure CLI, Visual Studio또는 Visual Studio Code를 사용 하 여 함수 앱을 만들 때 Application Insights 리소스를 만들어야 합니다.When you create a function app using the Azure CLI, Visual Studio, or Visual Studio Code, you must create the Application Insights resource. 그런 다음 함수 앱에서 응용 프로그램 설정으로 해당 리소스의 계측 키를 추가할 수 있습니다.You can then add the instrumentation key from that resource as an application setting in your function app.

Functions를 사용하면 Azure Portal에서 함수 앱에 Application Insights 통합을 쉽게 추가할 수 있습니다.Functions makes it easy to add Application Insights integration to a function app from the Azure portal.

  1. 포털에서 모든 서비스 > 함수 앱을 선택하고 해당 함수 앱을 선택한 다음, 창 맨 위에 있는 Application Insights를 선택합니다.In the portal, select All services > Function Apps, select your function app, and then select the Application Insights banner at the top of the window

    포털에서 Application Insights를 사용하도록 설정

  2. 이미지 아래 표에 지정된 설정을 사용하여 Application Insights 리소스를 만듭니다.Create an Application Insights resource by using the settings specified in the table below the image.

    Application Insights 리소스 만들기

    설정Setting 제안 값Suggested value 설명Description
    NameName 고유한 앱 이름Unique app name 함수 앱과 동일한 이름을 사용하는 것이 가장 간단하며, 구독 내에서 고유해야 합니다.It's easiest to use the same name as your function app, which must be unique in your subscription.
    위치:Location 서유럽West Europe 가능하다면 함수 앱과 동일한 지역을 사용하거나 해당 지역에 근접한 지역을 사용합니다.If possible, use the same region as your function app, or one that's close to that region.
  3. 확인을 선택합니다.Select OK. 함수 앱과 동일한 리소스 그룹 및 구독에 Application Insights 리소스가 만들어집니다.The Application Insights resource is created in the same resource group and subscription as your function app. 리소스를 만든 후 Application Insights 창을 닫습니다.After the resource is created, close the Application Insights window.

  4. 함수 앱으로 돌아가서 애플리케이션 설정을 선택한 다음, 애플리케이션 설정이 나올 때까지 아래로 스크롤합니다.Back in your function app, select Application settings, and then scroll down to Application settings. APPINSIGHTS_INSTRUMENTATIONKEY라는 설정이 표시되면 Azure에서 실행 중인 함수 앱에 대해 Application Insights 통합이 활성화됩니다.If you see a setting named APPINSIGHTS_INSTRUMENTATIONKEY, Application Insights integration is enabled for your function app running in Azure.

초기 버전의 함수에서는 기본 제공 모니터링을 사용 했으며이는 더 이상 권장 되지 않습니다.Early versions of Functions used built-in monitoring, which is no longer recommended. 이러한 함수 앱에 대 한 Application Insights 통합을 사용 하도록 설정 하는 경우 기본 제공 로깅도 사용 하지 않도록 설정해야 합니다.When enabling Application Insights integration for such a function app, you must also disable built-in logging.

모니터 탭에서 원격 분석 보기View telemetry in Monitor tab

Application Insights 통합을 사용 하도록 설정하면 모니터 탭에서 원격 분석 데이터를 볼 수 있습니다.With Application Insights integration enabled, you can view telemetry data in the Monitor tab.

  1. 함수 앱 페이지에서 Application Insights 구성 된 후 한 번 이상 실행 된 함수를 선택 합니다.In the function app page, select a function that has run at least once after Application Insights was configured. 그런 다음 모니터 탭을 선택 합니다.Then select the Monitor tab.

    모니터 탭 선택

  2. 함수 호출 목록이 나타날 때까지 주기적으로 새로 고침 을 선택 합니다.Select Refresh periodically, until the list of function invocations appears.

    원격 분석 클라이언트가 서버로 전송 하기 위해 데이터를 일괄 처리 하는 동안 목록이 표시 되는 데 최대 5 분 정도 걸릴 수 있습니다.It can take up to five minutes for the list to appear while the telemetry client batches data for transmission to the server. 지연은 라이브 메트릭 스트림에는 적용 되지 않습니다.(The delay doesn't apply to the Live Metrics Stream. 해당 서비스는 페이지를 로드할 때 함수 호스트에 연결되므로 로그가 페이지에 직접 스트리밍됩니다.)That service connects to the Functions host when you load the page, so logs are streamed directly to the page.)

    호출 목록

  3. 특정 함수 호출에 대한 로그를 보려면 해당 호출에 대한 날짜 열 링크를 선택합니다.To see the logs for a particular function invocation, select the Date column link for that invocation.

    호출 정보 링크

    해당 호출에 대한 로깅 출력이 새 페이지에 나타납니다.The logging output for that invocation appears in a new page.

    호출 정보

두 페이지에 데이터를 검색 하는 Application Insights Analytics 쿼리에 대 한 실행 Application Insights 링크가 있음을 볼 수 있습니다.You can see that both pages have a Run in Application Insights link to the Application Insights Analytics query that retrieves the data.

Application Insights에서 실행

다음 쿼리가 표시 됩니다.The following query is displayed. 쿼리 결과가 최근 30 일 (where timestamp > ago(30d))으로 제한 되는 것을 볼 수 있습니다.You can see that the query results are limited to the last 30 days (where timestamp > ago(30d)). 또한 결과에 20 개 이하의 행 (take 20)이 표시 됩니다.In addition, the results show no more than 20 rows (take 20). 이와 대조적으로 함수에 대 한 호출 세부 정보 목록은 지난 30 일 동안 제한 없이 사용할 수 있습니다.In contrast, the invocation details list for your function is for the last 30 days with no limit.

Application Insights 분석 호출 목록

자세한 내용은 이 문서의 뒷부분에 나오는 원격 분석 데이터 쿼리를 참조하세요.For more information, see Query telemetry data later in this article.

Application Insights에서 원격 분석 보기View telemetry in Application Insights

Azure Portal의 함수 앱에서 Application Insights를 열려면 함수 앱의 개요 페이지로 이동 합니다.To open Application Insights from a function app in the Azure portal, go to the function app's Overview page. 구성 된 기능아래에서 Application Insights를 선택 합니다.Under Configured features, select Application Insights.

함수 앱 개요 페이지에서 Application Insights를 엽니다.

Application Insights 사용 방법에 대한 자세한 내용은 Application Insights 설명서를 참조하세요.For information about how to use Application Insights, see the Application Insights documentation. 이 섹션에서는 Application Insights에서 데이터를 보는 방법에 대한 몇 가지 예를 보여줍니다.This section shows some examples of how to view data in Application Insights. Application Insights에 이미 익숙한 경우 원격 분석 데이터를 구성 하 고 사용자 지정 하는 방법에 대 한 섹션으로 바로 이동할 수 있습니다.If you're already familiar with Application Insights, you can go directly to the sections about how to configure and customize the telemetry data.

Application Insights 개요 탭

함수의 동작, 성능 및 오류를 평가할 때 다음과 같은 Application Insights 영역을 유용 하 게 사용할 수 있습니다.The following areas of Application Insights can be helpful when evaluating the behavior, performance, and errors in your functions:

Tab DescriptionDescription
있어Failures 함수 오류 및 서버 예외를 기반으로 차트와 경고를 만듭니다.Create charts and alerts based on function failures and server exceptions. 작업 이름은 함수 이름입니다.The Operation Name is the function name. 종속성에 대 한 사용자 지정 원격 분석을 구현 하지 않으면 종속성의 실패가 표시 되지 않습니다.Failures in dependencies aren't shown unless you implement custom telemetry for dependencies.
성능도Performance 성능 문제를 분석 합니다.Analyze performance issues.
서버Servers 서버당 리소스 사용률 및 처리량을 확인 합니다.View resource utilization and throughput per server. 이 데이터는 함수 때문에 기본 리소스가 정체되는 시나리오를 디버깅하는 데 유용할 수 있습니다.This data can be useful for debugging scenarios where functions are bogging down your underlying resources. 서버를 클라우드 역할 인스턴스라고도 합니다.Servers are referred to as Cloud role instances.
메트릭Metrics 메트릭을 기반으로 하는 차트 및 경고를 만듭니다.Create charts and alerts that are based on metrics. 메트릭에는 함수 호출 수, 실행 시간 및 성공률이 포함 됩니다.Metrics include the number of function invocations, execution time, and success rates.
라이브 메트릭 스트림Live Metrics Stream 거의 실시간으로 생성 된 메트릭 데이터를 봅니다.View metrics data as it's created in near real-time.

원격 분석 데이터 쿼리Query telemetry data

Application Insights 분석 을 사용 하면 데이터베이스의 테이블 형식으로 모든 원격 분석 데이터에 액세스할 수 있습니다.Application Insights Analytics gives you access to all telemetry data in the form of tables in a database. Analytics는 데이터를 추출, 조작 및 시각화하는 쿼리 언어를 제공합니다.Analytics provides a query language for extracting, manipulating, and visualizing the data.

Analytics 선택

Analytics 예제

다음 쿼리 예제는 지난 30분간의 작업자당 요청 분포를 보여줍니다.Here's a query example that shows the distribution of requests per worker over the last 30 minutes.

requests
| where timestamp > ago(30m) 
| summarize count() by cloud_RoleInstance, bin(timestamp, 1m)
| render timechart

사용할 수 있는 테이블이 왼쪽의 스키마 탭에 표시 됩니다.The tables that are available are shown in the Schema tab on the left. 다음 테이블에서 함수 호출에 의해 생성된 데이터를 찾을 수 있습니다.You can find data generated by function invocations in the following tables:

TableTable DescriptionDescription
tracestraces 런타임과 함수 코드에 의해 생성 된 로그입니다.Logs created by the runtime and by function code.
requestsrequests 각 함수 호출에 대해 하나의 요청One request for each function invocation.
exceptionsexceptions 런타임에 의해 throw 되는 예외입니다.Any exceptions thrown by the runtime.
customMetricscustomMetrics 성공 및 실패 한 호출 수, 성공률 및 기간입니다.The count of successful and failing invocations, success rate, and duration.
customEventscustomEvents 런타임에 의해 추적 되는 이벤트 (예: 함수를 트리거하는 HTTP 요청)입니다.Events tracked by the runtime, for example: HTTP requests that trigger a function.
performanceCountersperformanceCounters 함수가 실행 되 고 있는 서버의 성능에 대 한 정보입니다.Information about the performance of the servers that the functions are running on.

다른 테이블은 가용성 테스트와 클라이언트 및 브라우저 원격 분석에 대 한 것입니다.The other tables are for availability tests, and client and browser telemetry. 사용자 지정 원격 분석을 구현하여 테이블에 데이터를 추가할 수 있습니다.You can implement custom telemetry to add data to them.

각 테이블 내에서 일부 Functions 관련 데이터는 customDimensions 필드에 있습니다.Within each table, some of the Functions-specific data is in a customDimensions field. 예를 들어 다음 쿼리는 로그 수준이 Error인 모든 추적을 검색합니다.For example, the following query retrieves all traces that have log level Error.

traces 
| where customDimensions.LogLevel == "Error"

런타임은 customDimensions.LogLevelcustomDimensions.Category 필드를 제공 합니다.The runtime provides the customDimensions.LogLevel and customDimensions.Category fields. 함수 코드에 작성 하는 로그에 추가 필드를 제공할 수 있습니다.You can provide additional fields in logs that you write in your function code. 이 문서 뒷부분의 구조적 로깅을 참조하세요.See Structured logging later in this article.

범주 및 로그 수준 구성Configure categories and log levels

사용자 지정 구성 없이 Application Insights를 사용할 수 있습니다.You can use Application Insights without any custom configuration. 기본 구성으로 인해 많은 양의 데이터가 생성 될 수 있습니다.The default configuration can result in high volumes of data. Visual Studio Azure 구독을 사용하는 경우 Application Insights에 대한 데이터 제한에 도달할 수 있습니다.If you're using a Visual Studio Azure subscription, you might hit your data cap for Application Insights. 이 문서의 뒷부분에서는 함수가 Application Insights로 보내는 데이터를 구성 하 고 사용자 지정 하는 방법에 대해 알아봅니다.Later in this article, you learn how to configure and customize the data that your functions send to Application Insights. 함수 앱의 경우 로깅은 호스트 json 파일에 구성 됩니다.For a function app, logging is configured in the host.json file.

범주Categories

Azure Functions 로거에는 모든 로그에 대한 범주가 포함되어 있습니다.The Azure Functions logger includes a category for every log. 범주는 런타임 코드 또는 함수 코드의 어느 부분이 로그를 작성했는지를 나타냅니다.The category indicates which part of the runtime code or your function code wrote the log.

함수 런타임은 "Host"로 시작 하는 범주를 사용 하 여 로그를 만듭니다.The Functions runtime creates logs with a category that begin with "Host." 버전 1.x에서 function started, function executedfunction completed 로그에는 Host.Executor범주가 있습니다.In version 1.x, the function started, function executed, and function completed logs have the category Host.Executor. 2.x 버전부터 이러한 로그에는 Function.<YOUR_FUNCTION_NAME>범주가 있습니다.Starting in version 2.x, these logs have the category Function.<YOUR_FUNCTION_NAME>.

함수 코드에서 로그를 작성 하는 경우 범주는 함수 런타임의 버전 1.x에서 Function 됩니다.If you write logs in your function code, the category is Function in version 1.x of the Functions runtime. 버전 2.x에서 범주는 Function.<YOUR_FUNCTION_NAME>.User입니다.In version 2.x, the category is Function.<YOUR_FUNCTION_NAME>.User.

로그 수준Log levels

또한 Azure Functions로 거에는 모든 로그와 로그 수준이 포함 됩니다.The Azure Functions logger also includes a log level with every log. LogLevel은 열거형이며, 정수 코드는 상대적 중요도를 나타냅니다.LogLevel is an enumeration, and the integer code indicates relative importance:

LogLevelLogLevel 코드Code
추적Trace 00
디버그Debug 11
정보Information 22
경고Warning 33
오류Error 44
위험Critical 55
없음None 66

로그 수준 None은 다음 섹션에 설명되어 있습니다.Log level None is explained in the next section.

호스트의 로그 구성Log configuration in host.json

호스트 json 파일은 함수 앱이 Application Insights로 보내는 로깅의 양을 구성합니다.The host.json file configures how much logging a function app sends to Application Insights. 각 범주에 대해 보낼 최소 로그 수준을 나타낼 수 있습니다.For each category, you indicate the minimum log level to send. 두 가지 예를 들면, 첫 번째 예제에서는 버전 2.x를 대상으로 고 .net Core를 사용 하 여 .net Core를 사용 하 고 두 번째 예제는 버전 1.x 런타임에 대 한 것입니다.There are two examples: the first example targets version 2.x and later of the Functions runtime (with .NET Core), and the second example is for the version 1.x runtime.

2.x 이상 버전Version 2.x and higher

버전 v2. x 이상 버전의 함수 런타임은 .Net Core 로깅 필터 계층 구조를 사용 합니다.Version v2.x and later versions of the Functions runtime use the .NET Core logging filter hierarchy.

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Error",
      "Function": "Error",
      "Host.Aggregator": "Trace"
    }
  }
}

버전 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host.Results": "Error",
        "Function": "Error",
        "Host.Aggregator": "Trace"
      }
    }
  }
}

이 예제에서는 다음 규칙을 설정합니다.This example sets up the following rules:

  • 범주가 Host.Results 또는 Function인 로그의 경우 Error 수준 이상만 Application Insights로 보냅니다.For logs with category Host.Results or Function, send only Error level and above to Application Insights. Warning 수준 이하 로그는 무시됩니다.Logs for Warning level and below are ignored.
  • Host.Aggregator 범주의 로그는 모든 로그를 Application Insights로 보냅니다.For logs with category Host.Aggregator, send all logs to Application Insights. Trace 로그 수준은 Verbose를 호출하는 일부 로거와 동일하지만, 호스트 json 파일의 Trace를 사용합니다.The Trace log level is the same as what some loggers call Verbose, but use Trace in the host.json file.
  • 그 외의 로그는 Information 수준 이상만 Application Insights로 보냅니다.For all other logs, send only Information level and above to Application Insights.

호스트 json의 범주 값은 같은 값으로 시작하는 모든 범주에 대한 로깅을 제어합니다.The category value in host.json controls logging for all categories that begin with the same value. 호스트의 Host Host.General, Host.Executor, Host.Results등에 대 한 로깅을 제어 합니다 호스트 jsonHost in host.json controls logging for Host.General, Host.Executor, Host.Results, and so on.

호스트 json에 동일한 문자열로 시작되는 여러 범주가 포함된 경우 길이가 더 긴 범주가 먼저 일치합니다.If host.json includes multiple categories that start with the same string, the longer ones are matched first. Host.Aggregator를 제외 하 고 런타임에서 모든 항목을 Error 수준으로 기록 하려고 하지만 Host.Aggregator Information 수준으로 기록 하려는 경우를 가정해 보겠습니다.Suppose you want everything from the runtime except Host.Aggregator to log at Error level, but you want Host.Aggregator to log at the Information level:

버전 2.x 이상Version 2.x and later

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host": "Error",
      "Function": "Error",
      "Host.Aggregator": "Information"
    }
  }
}

버전 1.xVersion 1.x

{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "Information",
      "categoryLevels": {
        "Host": "Error",
        "Function": "Error",
        "Host.Aggregator": "Information"
      }
    }
  }
}

한 범주의 모든 로그를 표시하지 않으려면 로그 수준 None을 사용하면 됩니다.To suppress all logs for a category, you can use log level None. 해당 범주를 사용 하 여 작성 된 로그가 없으며 그 위에 로그 수준이 없습니다.No logs are written with that category and there's no log level above it.

다음 섹션에서는 런타임에서 만드는 주요 로그 범주에 대해 설명합니다.The following sections describe the main categories of logs that the runtime creates.

범주 Host.ResultsCategory Host.Results

이러한 로그는 Application Insights에 "requests"로 표시됩니다.These logs show as "requests" in Application Insights. 함수의 성공 또는 실패를 나타냅니다.They indicate success or failure of a function.

요청 차트

이러한 로그는 모두 Information 수준으로 작성 됩니다.All of these logs are written at Information level. Warning 이상에서 필터링 하는 경우에는이 데이터를 볼 수 없습니다.If you filter at Warning or above, you won't see any of this data.

범주 Host.AggregatorCategory Host.Aggregator

이러한 로그는 구성 가능한 기간 동안의 함수 호출 수 및 평균을 제공합니다.These logs provide counts and averages of function invocations over a configurable period of time. 기본 기간은 30초 또는 결과 1,000개 중 먼저 도착하는 것입니다.The default period is 30 seconds or 1,000 results, whichever comes first.

로그는 Application Insights의 customMetrics 테이블에서 제공합니다.The logs are available in the customMetrics table in Application Insights. 예는 실행 수, 성공률 및 기간입니다.Examples are the number of runs, success rate, and duration.

customMetrics 쿼리

이러한 로그는 모두 Information 수준으로 작성 됩니다.All of these logs are written at Information level. Warning 이상에서 필터링 하는 경우에는이 데이터를 볼 수 없습니다.If you filter at Warning or above, you won't see any of this data.

기타 범주Other categories

이미 나열된 범주 이외의 범주에 대한 모든 로그는 Application Insights의 traces 테이블에서 제공합니다.All logs for categories other than the ones already listed are available in the traces table in Application Insights.

추적 쿼리

Host로 시작 하는 범주가 있는 모든 로그는 함수 런타임에 의해 작성 됩니다.All logs with categories that begin with Host are written by the Functions runtime. "Function started" 및 "Function completed" 로그의 범주 Host.Executor있습니다.The "Function started" and "Function completed" logs have category Host.Executor. 성공적인 실행의 경우 이러한 로그는 Information 수준입니다.For successful runs, these logs are Information level. 예외는 Error 수준에서 기록 됩니다.Exceptions are logged at Error level. 런타임에서 Warning 수준 로그도 작성하며, 포이즌 큐로 전송된 큐 메시지를 예로 들 수 있습니다.The runtime also creates Warning level logs, for example: queue messages sent to the poison queue.

함수 코드에서 작성 한 로그에는 범주 Function 있으며 모든 로그 수준이 될 수 있습니다.Logs written by your function code have category Function and can be any log level.

수집기 구성Configure the aggregator

이전 섹션에서 언급했듯이, 런타임은 일정 기간 동안 함수 실행에 대한 데이터를 집계합니다.As noted in the previous section, the runtime aggregates data about function executions over a period of time. 기본 기간은 30초 또는 실행 1,000개 중 먼저 도착하는 것입니다.The default period is 30 seconds or 1,000 runs, whichever comes first. 호스트 json 파일에서 이 설정을 구성할 수 있습니다.You can configure this setting in the host.json file. 예를 들면 다음과 같습니다.Here's an example:

{
    "aggregator": {
      "batchSize": 1000,
      "flushTimeout": "00:00:30"
    }
}

샘플링 구성Configure sampling

Application Insights에는 최대 부하가 발생 했을 때 완료 된 실행에 너무 많은 원격 분석 데이터를 생성 하는 것을 방지할 수 있는 샘플링 기능이 있습니다.Application Insights has a sampling feature that can protect you from producing too much telemetry data on completed executions at times of peak load. 들어오는 실행의 비율이 지정 된 임계값을 초과 하는 경우 Application Insights는 들어오는 실행의 일부를 임의로 무시 하기 시작 합니다.When the rate of incoming executions exceeds a specified threshold, Application Insights starts to randomly ignore some of the incoming executions. 초당 최대 실행 수에 대 한 기본 설정은 20 (버전 1.x의 5 개)입니다.The default setting for maximum number of executions per second is 20 (five in version 1.x). 호스트 json에서 샘플링을 구성할 수 있습니다.You can configure sampling in host.json. 예를 들면 다음과 같습니다.Here's an example:

버전 2.x 이상Version 2.x and later

{
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "maxTelemetryItemsPerSecond" : 20
      }
    }
  }
}

버전 1.xVersion 1.x

{
  "applicationInsights": {
    "sampling": {
      "isEnabled": true,
      "maxTelemetryItemsPerSecond" : 5
    }
  }
}

참고

샘플링은 기본적으로 사용하도록 설정됩니다.Sampling is enabled by default. 데이터가 누락 된 것으로 나타나는 경우 특정 모니터링 시나리오에 맞게 샘플링 설정을 조정 해야 할 수 있습니다.If you appear to be missing data, you might need to adjust the sampling settings to fit your particular monitoring scenario.

C# 함수로 로그 작성Write logs in C# functions

Application Insights에서 traces로 표시되는 로그를 함수 코드로 작성할 수 있습니다.You can write logs in your function code that appear as traces in Application Insights.

ILoggerILogger

함수에 TraceWriter 매개 변수 대신 ILogger 매개 변수를 사용합니다.Use an ILogger parameter in your functions instead of a TraceWriter parameter. TraceWriter를 사용 하 여 만든 로그는 Application Insights으로 이동 하지만, ILogger를 사용 하 여 구조적 로깅을수행할 수 있습니다.Logs created by using TraceWriter go to Application Insights, but ILogger lets you do structured logging.

ILogger 개체를 사용 하 여 ILogger에서 Log<level> 확장 메서드 를 호출 하 여 로그를 만듭니다.With an ILogger object, you call Log<level> extension methods on ILogger to create logs. 다음 코드는 "Function. < YOUR_FUNCTION_NAME > Information 로그를 작성 합니다. 사용자. "The following code writes Information logs with category "Function.<YOUR_FUNCTION_NAME>.User."

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ILogger logger)
{
    logger.LogInformation("Request for item with key={itemKey}.", id);

구조적 로깅Structured logging

이름이 아닌 자리 표시자는 로그 메시지에 사용되는 매개 변수를 결정합니다.The order of placeholders, not their names, determines which parameters are used in the log message. 다음 코드가 있다고 가정 합니다.Suppose you have the following code:

string partitionKey = "partitionKey";
string rowKey = "rowKey";
logger.LogInformation("partitionKey={partitionKey}, rowKey={rowKey}", partitionKey, rowKey);

메시지 문자열을 동일하게 유지하고 매개 변수의 순서를 반대로 바꾸면 그 결과 메시지 텍스트가 잘못된 위치에서 값을 갖습니다.If you keep the same message string and reverse the order of the parameters, the resulting message text would have the values in the wrong places.

구조적 로깅을 수행할 수 있도록 자리 표시자는 이러한 방식으로 처리됩니다.Placeholders are handled this way so that you can do structured logging. Application Insights 매개 변수 이름-값 쌍 및 메시지 문자열을 저장 합니다.Application Insights stores the parameter name-value pairs and the message string. 그 결과로 메시지 인수는 사용자가 쿼리할 수 있는 필드가 됩니다.The result is that the message arguments become fields that you can query on.

로 거 메서드 호출이 이전 예제와 같은 경우에는 customDimensions.prop__rowKey필드를 쿼리할 수 있습니다.If your logger method call looks like the previous example, you can query the field customDimensions.prop__rowKey. 런타임에서 추가 하는 필드와 함수 코드에서 추가 하는 필드가 서로 충돌 하지 않도록 prop__ 접두사가 추가 됩니다.The prop__ prefix is added to ensure there are no collisions between fields the runtime adds and fields your function code adds.

customDimensions.prop__{OriginalFormat} 필드를 참조하여 원래 메시지 문자열을 쿼리할 수도 있습니다.You can also query on the original message string by referencing the field customDimensions.prop__{OriginalFormat}.

다음은 customDimensions 데이터의 샘플 JSON 표현입니다.Here's a sample JSON representation of customDimensions data:

{
  customDimensions: {
    "prop__{OriginalFormat}":"C# Queue trigger function processed: {message}",
    "Category":"Function",
    "LogLevel":"Information",
    "prop__message":"c9519cbf-b1e6-4b9b-bf24-cb7d10b1bb89"
  }
}

사용자 지정 메트릭 로깅Custom metrics logging

C# 스크립트 함수에서, ILoggerLogMetric 확장 메서드를 사용하여 Application Insights에 사용자 지정 메트릭을 만들 수 있습니다.In C# script functions, you can use the LogMetric extension method on ILogger to create custom metrics in Application Insights. 다음은 샘플 메서드 호출입니다.Here's a sample method call:

logger.LogMetric("TestMetric", 1234);

이 코드는 .NET 용 Application Insights API를 사용 하 여 TrackMetric를 호출 하는 대신 사용할 수 있습니다.This code is an alternative to calling TrackMetric by using the Application Insights API for .NET.

JavaScript 함수로 로그 작성Write logs in JavaScript functions

Node.js 함수에서는 context.log를 사용하여 로그를 작성합니다.In Node.js functions, use context.log to write logs. 구조적 로깅은 사용 되지 않습니다.Structured logging isn't enabled.

context.log('JavaScript HTTP trigger function processed a request.' + context.invocationId);

사용자 지정 메트릭 로깅Custom metrics logging

함수 런타임의 버전 1.x에서를 실행 하는 경우 node.js 함수는 context.log.metric 메서드를 사용 하 여 Application Insights에서 사용자 지정 메트릭을 만들 수 있습니다.When you're running on version 1.x of the Functions runtime, Node.js functions can use the context.log.metric method to create custom metrics in Application Insights. 이 메서드는 현재 버전 2.x 이상에서 지원 되지 않습니다.This method isn't currently supported in version 2.x and later. 다음은 샘플 메서드 호출입니다.Here's a sample method call:

context.log.metric("TestMetric", 1234);

이 코드는 Application Insights 용 node.js SDK를 사용 하 여 trackMetric를 호출 하는 대신 사용할 수 있습니다.This code is an alternative to calling trackMetric by using the Node.js SDK for Application Insights.

함수에서 C# 사용자 지정 원격 분석 로깅Log custom telemetry in C# functions

Microsoft.ApplicationInsights NuGet 패키지를 사용하여 Application Insights로 사용자 지정 원격 분석 데이터를 보낼 수 있습니다.You can use the Microsoft.ApplicationInsights NuGet package to send custom telemetry data to Application Insights. 다음 C# 예제에는 사용자 지정 원격 분석 API가 사용됩니다.The following C# example uses the custom telemetry API. 이 예제는 .NET 클래스 라이브러리용이지만 Application Insights 코드는 C# 스크립트와 동일합니다.The example is for a .NET class library, but the Application Insights code is the same for C# script.

버전 2.x 이상Version 2.x and later

버전 2.x 이상 버전의 런타임에서는 Application Insights의 최신 기능을 사용 하 여 원격 분석을 현재 작업과 자동으로 상호 연결 합니다.Version 2.x and later versions of the runtime use newer features in Application Insights to automatically correlate telemetry with the current operation. 작업 Id, ParentId또는 Name 필드를 수동으로 설정 하지 않아도 됩니다.There's no need to manually set the operation Id, ParentId, or Name fields.

using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace functionapp0915
{
    public class HttpTrigger2
    {
        private readonly TelemetryClient telemetryClient;

        /// Using dependency injection will guarantee that you use the same configuration for telemetry collected automatically and manually.
        public HttpTrigger2(TelemetryConfiguration telemetryConfiguration)
        {
            this.telemetryClient = new TelemetryClient(telemetryConfiguration);
        }

        [FunctionName("HttpTrigger2")]
        public Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
            HttpRequest req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.Query
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Track an Event
            var evt = new EventTelemetry("Function called");
            evt.Context.User.Id = name;
            this.telemetryClient.TrackEvent(evt);

            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            metric.Context.User.Id = name;
            this.telemetryClient.TrackMetric(metric);

            // Track a Dependency
            var dependency = new DependencyTelemetry
            {
                Name = "GET api/planets/1/",
                Target = "swapi.co",
                Data = "https://swapi.co/api/planets/1/",
                Timestamp = start,
                Duration = DateTime.UtcNow - start,
                Success = true
            };
            dependency.Context.User.Id = name;
            this.telemetryClient.TrackDependency(dependency);

            return Task.FromResult<IActionResult>(new OkResult());
        }
    }
}

버전 1.xVersion 1.x

using System;
using System.Net;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.WebJobs;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Linq;

namespace functionapp0915
{
    public static class HttpTrigger2
    {
        private static string key = TelemetryConfiguration.Active.InstrumentationKey = 
            System.Environment.GetEnvironmentVariable(
                "APPINSIGHTS_INSTRUMENTATIONKEY", EnvironmentVariableTarget.Process);

        private static TelemetryClient telemetryClient = 
            new TelemetryClient() { InstrumentationKey = key };

        [FunctionName("HttpTrigger2")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]
            HttpRequestMessage req, ExecutionContext context, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            DateTime start = DateTime.UtcNow;

            // Parse query parameter
            string name = req.GetQueryNameValuePairs()
                .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
                .Value;

            // Get request body
            dynamic data = await req.Content.ReadAsAsync<object>();

            // Set name to query string or body data
            name = name ?? data?.name;
         
            // Track an Event
            var evt = new EventTelemetry("Function called");
            UpdateTelemetryContext(evt.Context, context, name);
            telemetryClient.TrackEvent(evt);
            
            // Track a Metric
            var metric = new MetricTelemetry("Test Metric", DateTime.Now.Millisecond);
            UpdateTelemetryContext(metric.Context, context, name);
            telemetryClient.TrackMetric(metric);
            
            // Track a Dependency
            var dependency = new DependencyTelemetry
                {
                    Name = "GET api/planets/1/",
                    Target = "swapi.co",
                    Data = "https://swapi.co/api/planets/1/",
                    Timestamp = start,
                    Duration = DateTime.UtcNow - start,
                    Success = true
                };
            UpdateTelemetryContext(dependency.Context, context, name);
            telemetryClient.TrackDependency(dependency);
        }
        
        // Correlate all telemetry with the current Function invocation
        private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string userName)
        {
            context.Operation.Id = functionContext.InvocationId.ToString();
            context.Operation.ParentId = functionContext.InvocationId.ToString();
            context.Operation.Name = functionContext.FunctionName;
            context.User.Id = userName;
        }
    }    
}

함수 호출에 대 한 중복 요청이 표시 되므로 TrackRequest 또는 StartOperation<RequestTelemetry>를 호출 하지 마세요.Don't call TrackRequest or StartOperation<RequestTelemetry> because you'll see duplicate requests for a function invocation. Functions 런타임에서 자동으로 요청을 추적합니다.The Functions runtime automatically tracks requests.

telemetryClient.Context.Operation.Id를 설정하지 마십시오.Don't set telemetryClient.Context.Operation.Id. 여러 함수가 동시에 실행 되는 경우이 전역 설정으로 인해 잘못 된 상관 관계가 발생 합니다.This global setting causes incorrect correlation when many functions are running simultaneously. 대신 새로운 원격 분석 인스턴스(DependencyTelemetry, EventTelemetry)를 만들고 해당하는 Context 속성을 수정합니다.Instead, create a new telemetry instance (DependencyTelemetry, EventTelemetry) and modify its Context property. 그런 다음 TelemetryClient (TrackDependency(), TrackEvent(), TrackMetric())의 해당 Track 메서드에 원격 분석 인스턴스를 전달 합니다.Then pass in the telemetry instance to the corresponding Track method on TelemetryClient (TrackDependency(), TrackEvent(), TrackMetric()). 이 메서드는 원격 분석에 현재 함수 호출에 대 한 올바른 상관 관계 정보가 있는지 확인 합니다.This method ensures that the telemetry has the correct correlation details for the current function invocation.

JavaScript 함수에서 사용자 지정 원격 분석 로깅Log custom telemetry in JavaScript functions

다음은 Application Insights NODE.JS SDK를 사용 하 여 사용자 지정 원격 분석을 전송 하는 샘플 코드 조각입니다.Here is a sample code snippet that sends custom telemetry with the Application Insights Node.js SDK:

const appInsights = require("applicationinsights");
appInsights.setup();
const client = appInsights.defaultClient;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    client.trackEvent({name: "my custom event", tagOverrides:{"ai.operation.id": context.invocationId}, properties: {customProperty2: "custom property value"}});
    client.trackException({exception: new Error("handled exceptions can be logged with this method"), tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackMetric({name: "custom metric", value: 3, tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackTrace({message: "trace message", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL", tagOverrides:{"ai.operation.id": context.invocationId}});
    client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true, tagOverrides:{"ai.operation.id": context.invocationId}});

    context.done();
};

tagOverrides 매개 변수는 operation_Id를 함수의 호출 ID로 설정 합니다.The tagOverrides parameter sets the operation_Id to the function's invocation ID. 이 설정을 사용하면 특정 함수 호출에 대해 자동으로 생성된 모든 원격 분석 데이터와 사용자 지정 원격 분석의 상관 관계를 지정할 수 있습니다.This setting enables you to correlate all of the automatically generated and custom telemetry for a given function invocation.

종속성Dependencies

함수 v2는 HTTP 요청, ServiceBus, EventHub 및 SQL에 대 한 종속성을 자동으로 수집 합니다.Functions v2 automatically collects dependencies for HTTP requests, ServiceBus, EventHub, and SQL.

종속성을 표시 하는 사용자 지정 코드를 작성할 수 있습니다.You can write custom code to show the dependencies. 예제는 C# 사용자 지정 원격 분석 섹션의 샘플 코드를 참조 하세요.For examples, see the sample code in the C# custom telemetry section. 샘플 코드는 다음 이미지와 같은 Application Insights의 응용 프로그램 맵을 생성 합니다.The sample code results in an application map in Application Insights that looks like the following image:

애플리케이션 맵

문제 보고Report issues

Application Insights의 Functions 통합 문제를 보고하거나 제안 사항 또는 요청 사항을 보내려면 GitHub에서 문제를 만듭니다.To report an issue with Application Insights integration in Functions, or to make a suggestion or request, create an issue in GitHub.

스트리밍 로그Streaming Logs

응용 프로그램을 개발 하는 동안 Azure에서 실행 될 때 거의 실시간으로 로그에 기록 되는 항목을 확인 하는 것이 좋습니다.While developing an application, you often want to see what's being written to the logs in near real-time when running in Azure.

함수 실행에 의해 생성 되는 로그 파일의 스트림을 보는 방법에는 두 가지가 있습니다.There are two ways to view a stream of log files being generated by your function executions.

  • 기본 제공 로그 스트리밍: App Service 플랫폼을 사용 하면 응용 프로그램 로그 파일의 스트림을 볼 수 있습니다.Built-in log streaming: the App Service platform lets you view a stream of your application log files. 이는 로컬 개발 중에 또는 포털에서 테스트 탭을 사용할 때 표시 되는 출력과 동일 합니다.This is equivalent to the output seen when you debug your functions during local development and when you use the Test tab in the portal. 모든 로그 기반 정보가 표시 됩니다.All log-based information is displayed. 자세한 내용은 스트림 로그를 참조 하세요.For more information, see Stream logs. 이 스트리밍 방법은 단일 인스턴스만 지원 하며 소비 계획에서 Linux에서 실행 되는 앱과 함께 사용할 수 없습니다.This streaming method supports only a single instance, and can't be used with an app running on Linux in a Consumption plan.

  • 라이브 메트릭 스트림: 함수 앱이 Application Insights에 연결된 경우 라이브 메트릭 스트림를 사용 하 여 Azure Portal에서 거의 실시간으로 로그 데이터 및 기타 메트릭을 볼 수 있습니다.Live Metrics Stream: when your function app is connected to Application Insights, you can view log data and other metrics in near real-time in the Azure portal using Live Metrics Stream. 소비 계획의 여러 인스턴스 또는 Linux에서 실행 되는 함수를 모니터링 하는 경우이 방법을 사용 합니다.Use this method when monitoring functions running on multiple-instances or on Linux in a Consumption plan. 이 메서드는 샘플링 된 데이터를 사용 합니다.This method uses sampled data.

로그 스트림은 포털 및 대부분의 로컬 개발 환경에서 볼 수 있습니다.Log streams can be viewed both in the portal and in most local development environments.

포털Portal

포털에서 두 유형의 로그 스트림을 모두 볼 수 있습니다.You can view both types of log streams in the portal.

기본 제공 로그 스트리밍Built-in log streaming

포털에서 스트리밍 로그를 보려면 함수 앱에서 플랫폼 기능 탭을 선택 합니다.To view streaming logs in the portal, select the Platform features tab in your function app. 그런 다음 모니터링에서 스트리밍 로그를 선택 합니다.Then, under Monitoring, choose Log streaming.

포털에서 스트리밍 로그 사용

그러면 앱이 로그 스트리밍 서비스에 연결 되 고 응용 프로그램 로그는 창에 표시 됩니다.This connects your app to the log streaming service and application logs are displayed in the window. 응용 프로그램 로그웹 서버 로그를 전환할 수 있습니다.You can toggle between Application logs and Web server logs.

포털에서 스트리밍 로그 보기

라이브 메트릭 스트림Live Metrics Stream

앱에 대 한 라이브 메트릭 스트림를 보려면 함수 앱의 개요 탭을 선택 합니다.To view the Live Metrics Stream for your app, select the Overview tab of your function app. Application Insights 사용 하도록 설정 하면 구성 된 기능아래에 Application Insights 링크가 표시 됩니다.When you have Application Insights enables, you see an Application Insights link under Configured features. 이 링크를 누르면 앱에 대 한 Application Insights 페이지로 이동 합니다.This link takes you to the Application Insights page for your app.

Application Insights에서 라이브 메트릭 스트림를 선택 합니다.In Application Insights, select Live Metrics Stream. 샘플링 된 로그 항목샘플 원격 분석아래에 표시 됩니다.Sampled log entries are displayed under Sample Telemetry.

포털에서 라이브 메트릭 스트림 보기

Visual Studio CodeVisual Studio Code

Azure에서 함수 앱에 대 한 스트리밍 로그를 켜려면:To turn on the streaming logs for your function app in Azure:

  1. F1 키를 선택 하 여 명령 팔레트를 열고 Azure Functions 명령을 검색 하 여 실행 합니다. 스트리밍 로그를 시작 합니다.Select F1 to open the command palette, and then search for and run the command Azure Functions: Start Streaming Logs.

  2. Azure에서 함수 앱을 선택 하 고 를 선택 하 여 함수 앱에 대 한 응용 프로그램 로깅을 사용 하도록 설정 합니다.Select your function app in Azure, and then select Yes to enable application logging for the function app.

  3. Azure에서 함수를 트리거합니다.Trigger your functions in Azure. 로그 데이터가 Visual Studio Code의 출력 창에 표시 되는지 확인 합니다.Notice that log data is displayed in the Output window in Visual Studio Code.

  4. 완료 되 면 명령 Azure Functions를 실행 해야 합니다. 스트리밍 로그 를 중지 하 여 함수 앱에 대 한 로깅을 사용 하지 않도록 설정 합니다.When you're done, remember to run the command Azure Functions: Stop Streaming Logs to disable logging for the function app.

핵심 도구Core Tools

기본 제공 로그 스트리밍Built-in log streaming

다음 예제 logstream 와 같이 Azure에서 실행 중인 특정 함수 앱의 스트리밍 로그 수신을 시작 하려면 옵션을 사용 합니다.Use the logstream option to start receiving streaming logs of a specific function app running in Azure, as in the following example:

func azure functionapp logstream <FunctionAppName>

라이브 메트릭 스트림Live Metrics Stream

다음 예제와 같이 --browser 옵션을 포함 하 여 새 브라우저 창에서 함수 앱에 대 한 라이브 메트릭 스트림 를 볼 수도 있습니다.You can also view the Live Metrics Stream for your function app in a new browser window by including the --browser option, as in the following example:

func azure functionapp logstream <FunctionAppName> --browser

Azure CLIAzure CLI

Azure CLI를 사용 하 여 스트리밍 로그를 사용 하도록 설정할 수 있습니다.You can enable streaming logs by using the Azure CLI. 다음 명령을 사용 하 여 로그인 하 고, 구독을 선택 하 고, 로그 파일을 스트리밍합니다.Use the following commands to sign in, choose your subscription, and stream log files:

az login
az account list
az account set --subscription <subscriptionNameOrId>
az webapp log tail --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>

Azure PowerShellAzure PowerShell

Azure PowerShell를 사용 하 여 스트리밍 로그를 사용 하도록 설정할 수 있습니다.You can enable streaming logs by using Azure PowerShell. PowerShell의 경우 다음 명령을 사용 하 여 Azure 계정을 추가 하 고, 구독을 선택 하 고, 로그 파일을 스트리밍합니다.For PowerShell, use the following commands to add your Azure account, choose your subscription, and stream log files:

Add-AzAccount
Get-AzSubscription
Get-AzSubscription -SubscriptionName "<subscription name>" | Select-AzSubscription
Get-AzWebSiteLog -Name <FUNCTION_APP_NAME> -Tail

기본 제공 로깅을 사용하지 않도록 설정Disable built-in logging

Application Insights를 사용 하도록 설정 하는 경우 Azure Storage를 사용 하는 기본 제공 로깅을 사용 하지 않도록 설정 합니다.When you enable Application Insights, disable the built-in logging that uses Azure Storage. 기본 제공 로깅은 간단한 워크 로드를 사용 하 여 테스트 하는 데 유용 하지만, 고성능 프로덕션 용도로는 사용 되지 않습니다.The built-in logging is useful for testing with light workloads, but isn't intended for high-load production use. 프로덕션 모니터링의 경우 Application Insights 하는 것이 좋습니다.For production monitoring, we recommend Application Insights. 프로덕션에서 기본 제공 로깅이 사용 되는 경우 Azure Storage 제한으로 인해 로깅 레코드가 불완전할 수 있습니다.If built-in logging is used in production, the logging record might be incomplete because of throttling on Azure Storage.

기본 제공 로깅을 사용하지 않도록 설정하려면 AzureWebJobsDashboard 앱 설정을 삭제합니다.To disable built-in logging, delete the AzureWebJobsDashboard app setting. Azure Portal에서 앱 설정을 삭제하는 방법에 대한 자세한 내용은 함수 앱을 관리하는 방법애플리케이션 설정 섹션을 참조하세요.For information about how to delete app settings in the Azure portal, see the Application settings section of How to manage a function app. 앱 설정을 삭제 하기 전에 동일한 함수 앱에 있는 기존 함수가 Azure Storage 트리거 또는 바인딩에 대해이 설정을 사용 하지 않도록 해야 합니다.Before you delete the app setting, make sure no existing functions in the same function app use the setting for Azure Storage triggers or bindings.

다음 단계Next steps

자세한 내용은 다음 리소스를 참조하세요.For more information, see the following resources: