다음을 통해 공유


Azure Monitor Application Insights를 사용하여 Azure Functions 모니터링

Azure Functions는 Application Insights와 기본적으로 통합되어 함수를 모니터링합니다. .NET 및 .NET Core 이외의 언어의 경우 분산 추적의 모든 이점을 얻으려면 다른 언어별 작업자/확장이 필요합니다.

Application Insights는 로그, 성능 및 오류 데이터를 수집하고 성능 이상을 자동으로 감지합니다. Application Insights에는 문제를 진단하고 함수가 어떻게 사용되는지 이해할 수 있는 강력한 분석 도구가 포함되어 있습니다. 애플리케이션 데이터에 대한 가시성이 있으면 지속적으로 성능 및 유용성을 향상시킬 수 있습니다. 로컬 함수 앱 프로젝트를 개발할 때도 Application Insights를 사용할 수 있습니다.

필요한 Application Insights 계측은 Azure Functions에 기본 제공됩니다. 함수 앱을 Application Insights 리소스에 연결하기 위한 유효한 연결 문자열만 있으면 됩니다. Azure에서 함수 앱 리소스를 만들 때 연결 문자열을 애플리케이션 설정에 추가해야 합니다. 함수 앱에 연결 문자열이 아직 없는 경우 수동으로 설정할 수 있습니다. 자세한 내용은 Azure Functions에서 실행 모니터링연결 문자열을 참조하세요.

참고 항목

2025년 3월 31일에 계측 키 수집에 대한 지원이 종료됩니다. 계측 키 수집은 계속 작동하지만 더 이상 기능에 대한 업데이트 또는 지원을 제공하지 않습니다. 연결 문자열로 전환하여 새로운 기능을 활용합니다.

지원되는 자동 계측 시나리오의 목록은 지원되는 환경, 언어 및 리소스 공급자를 참조하세요.

Java 애플리케이션에 대한 분산 추적

참고 항목

이 기능은 8~9초의 콜드 스타트업을 포함했으나 1초 미만으로 줄였습니다. 이 기능의 얼리어답터(예: 2023년 2월 이전)인 경우 "문제 해결" 섹션을 검토하여 현재 버전으로 업데이트하고 새로운 더 빨라진 스타트업을 경험할 수 있습니다.

Java 기반 Azure Functions 애플리케이션에서 기본적으로 수집되는 것보다 더 많은 데이터를 보려면 Application Insights Java 3.x 에이전트를 사용하도록 설정합니다. 이 에이전트를 사용하면 Application Insights가 인기 있는 라이브러리 및 Azure SDK(소프트웨어 개발 키트)에서 종속성, 로그 및 메트릭을 자동으로 수집하고 상호 연결할 수 있습니다. 이 원격 분석은 Functions에서 이미 캡처한 요청 원격 분석에 추가됩니다.

애플리케이션 맵을 사용하고 엔드투엔드 트랜잭션을 보다 완벽하게 볼 수 있으므로 문제를 더 잘 진단할 수 있습니다. 평균 성능 및 오류율에 대한 데이터와 함께 시스템이 상호 작용하는 방식에 대한 토폴로지 보기가 제공됩니다. 또한 엔드투엔드 진단 대한 더 많은 데이터를 확보합니다. 애플리케이션 맵을 사용하여 요청별로 안정성 문제 및 성능 병목 상태의 근본 원인을 쉽게 찾을 수 있습니다.

고급 사용 사례의 경우 범위를 추가하고, 범위 상태를 업데이트하고, 범위 특성을 추가하여 원격 분석을 수정할 수 있습니다. 표준 API를 사용하여 사용자 지정 원격 분석을 보낼 수도 있습니다.

Java 함수 앱에 대해 분산 추적을 사용하도록 설정

함수 앱 개요 창에서 Application Insights로 이동합니다. 컬렉션 수준에서 권장을 선택합니다.

AppInsights Java 에이전트를 사용하도록 설정하는 방법을 보여 주는 스크린샷

구성

이 기능을 사용량 플랜이 아닌 Azure Function App에 대해 구성하려면 앱 설정에 환경 변수를 추가합니다. 사용 가능한 구성을 검토하려면 구성 옵션: Java용 Azure Monitor Application Insights를 참조하세요.

사용량 플랜 Azure Functions의 경우 사용 가능한 구성 옵션은 APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL 및 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL로 제한됩니다. 사용량 플랜 Azure Functions에 대한 추가 구성을 만들려면 자체 에이전트를 배포하고 Java Functions에 대한 사용자 지정 분산 추적을 참조하세요.

자체 에이전트를 배포하면 사용량 플랜 Azure Functions의 콜드 시작 시간이 더 오래 걸립니다.

문제 해결

2023년 2월 이전에 이 기능을 채택한 경우 Java 함수의 시작 시간이 느려질 수 있습니다. 함수 앱 개요 창에서 왼쪽 탐색 메뉴의 구성으로 이동합니다. 그런 다음, 애플리케이션 설정을 선택하고 다음 단계를 사용하여 문제를 해결합니다.

Windows

  1. 다음 설정이 있는지 확인하고 제거합니다.

    XDT_MicrosoftApplicationInsights_Java -> 1
    ApplicationInsightsAgent_EXTENSION_VERSION -> ~2
    
  2. 다음 설정을 추가하여 최신 버전을 사용하도록 설정합니다.

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

Linux 전용/프리미엄

  1. 다음 설정이 있는지 확인하고 제거합니다.

    ApplicationInsightsAgent_EXTENSION_VERSION -> ~3
    
  2. 다음 설정을 추가하여 최신 버전을 사용하도록 설정합니다.

    APPLICATIONINSIGHTS_ENABLE_AGENT: true
    

참고 항목

최신 버전의 Application Insights Java 에이전트를 Azure Functions에서 사용할 수 없는 경우 다음 지침에 따라 수동으로 업로드합니다.

애플리케이션 호스트와 수집 서비스 간의 연결 테스트

Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. PowerShell 또는 curl 명령의 원시 REST 클라이언트를 사용하여 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트로의 연결을 테스트할 수 있습니다. Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.

중복 로그

콘솔 로깅에 log4j 또는 logback을 사용하는 경우 Java Functions에 대한 분산 추적은 중복 로그를 만듭니다. 그러면 이러한 중복 로그가 Application Insights로 전송됩니다. 이 동작을 방지하려면 다음 해결 방법을 사용합니다.

Log4j

log4j.xml에 다음 필터를 추가합니다.

<Filters>
  <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>

예시:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
      <Filters>
        <ThresholdFilter level="ALL" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
Logback

logback.xml에 다음 필터를 추가합니다.

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>OFF</level>
</filter>  

예시:

<configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>OFF</level>
      </filter>  
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Node.js 함수 앱에 대한 분산 추적

Node Azure Functions 애플리케이션에서 기본적으로 수집되는 것보다 더 많은 데이터를 보려면 Azure Monitor OpenTelemetry Distro를 사용하여 함수를 계측합니다.

Python 함수 앱에 대한 분산 추적

Requests, urllib3, httpx, PsycoPG2 등과 같은 서비스에서 원격 분석 데이터를 수집하려면 Azure Monitor OpenTelemetry Distro를 사용합니다. Azure Functions에서 호스트되는 Python 애플리케이션에 들어오는 추적된 수신 요청이 애플리케이션 내에서 추적되는 원격 분석과 자동으로 상관 관계가 설정되지는 않습니다. 다음과 같이 TraceContext를 직접 추출하여 추적 상관 관계를 수동으로 달성할 수 있습니다:

import azure.functions as func

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract

# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()

def main(req: func.HttpRequest, context) -> func.HttpResponse:
   ...
   # Store current TraceContext in dictionary format
   carrier = {
      "traceparent": context.trace_context.Traceparent,
      "tracestate": context.trace_context.Tracestate,
   }
   tracer = trace.get_tracer(__name__)
   # Start a span using the current context
   with tracer.start_as_current_span(
      "http_trigger_span",
      context=extract(carrier),
   ):
      ...

다음 단계