Application Insights에서 누락된 Azure 함수 로그 문제 해결
Azure Functions를 사용하여 작업하는 것은 마치 잘 갖춰진 자동화 엔진을 구축하는 것처럼 느껴질 때가 많습니다. 하지만 Application Insights 작업 영역에서 일부 중요한 로그가 사라지면 어떻게 될까요? 🤔 최근 Timer Trigger Azure Function을 개발하면서 직면한 문제입니다. Azure Portal 로그 콘솔에서 완벽하게 작동했던 내 정보 수준 로그가 로그 작업 영역에는 이상하게도 없었습니다.
처음에는 모든 것이 올바르게 구성되었다고 가정했습니다. 결국 함수 앱을 만드는 동안 Application Insights를 설정했는데 원격 분석 설정이 기본적으로 작동하는 것처럼 보였습니다. 개발자로서 정보 로그를 찾을 수 없는데 경고 및 오류 로그가 올바르게 나타나는 것을 보는 것보다 더 당황스러운 것은 없습니다. 그들은 어디에 숨어 있었나요?
이 문제는 웹 애플리케이션을 디버깅할 때 비슷한 순간을 생각나게 했습니다. 오류 로그에는 "Fix me!"라는 문구가 표시되었습니다. 미묘한 정보 수준 로그는 레이더 아래로 빠져 나갔습니다. 그것은 잃어버린 퍼즐 조각을 찾는 것과 약간 비슷합니다. 그것이 존재한다는 것을 알지만 더미에서 그것을 제대로 볼 수는 없습니다. 🧩 Azure의 host.json 및 원격 분석 설정이 여기서 중요한 역할을 하는 경우가 많습니다.
이번 글에서는 이 문제의 근본 원인과 해결 방법을 단계별로 살펴보겠습니다. host.json 구성부터 로그 수준 임계값 확인까지 솔루션을 안내해 드리겠습니다. 누락된 정보 로그가 로그 작업공간으로 다시 돌아가는지 확인하세요.
명령 | 사용예 |
---|---|
ConfigureFunctionsWorkerDefaults() | Azure Functions 작업자 파이프라인을 초기화하고 구성합니다. Azure Functions 실행을 위해 미들웨어와 서비스가 올바르게 설정되었는지 확인합니다. |
Configure<LoggerFilterOptions>() | 정보, 경고, 오류 등 로그 수준을 기준으로 로그를 필터링하는 데 사용됩니다. 이렇게 하면 원하는 로그 수준만 처리됩니다. |
services.AddApplicationInsightsTelemetryWorkerService() | 작업자 서비스에 대한 Application Insights를 등록합니다. HTTP로 트리거되지 않는 컨텍스트에서 특히 Azure Functions에 대한 원격 분석 수집 및 로깅이 가능합니다. |
options.MinLevel = LogLevel.Information | 최소 로그 수준 임계값을 설정합니다. 예를 들어 '정보'는 정보, 경고 및 오류 수준의 로그가 캡처되도록 합니다. |
ConfigureServices() | 사용자 지정 서비스를 추가하거나 로깅, Application Insights 또는 DI 컨테이너 관련 구성 요소와 같은 종속성을 구성하는 방법을 제공합니다. |
samplingSettings: { isEnabled: false } | 정보 수준 로그를 포함한 모든 로그가 필터링되지 않고 캡처되도록 원격 측정 샘플링을 비활성화합니다. |
host.Run() | Azure Functions 작업자 프로세스를 실행하도록 구성된 호스트를 실행하고 들어오는 이벤트 또는 트리거 수신 대기를 시작합니다. |
builder.SetMinimumLevel(LogLevel.Information) | 정보 수준 이상의 세부 로그가 처리되도록 로거 구성의 최소 로그 수준을 명시적으로 설정합니다. |
Assert.True(condition, message) | 조건이 참인지 확인하기 위해 단위 테스트에 사용됩니다. 이 경우 정보 로그가 성공적으로 캡처되었는지 확인합니다. |
LogInformation("Message") | 정보 메시지를 기록합니다. Azure Functions에서 중요하지 않은 활동을 디버깅하고 모니터링하는 데 중요합니다. |
누락된 Azure 함수 로그 이해 및 해결 방법
이전에 제공된 스크립트는 다음과 같은 일반적인 문제를 해결하는 것을 목표로 합니다. 정보 수준 로그 Azure 함수에 의해 생성된 데이터는 Azure Portal 로그 콘솔에 표시되더라도 로그 작업 영역에는 표시되지 않습니다. 이러한 불일치는 host.json 파일의 부적절한 구성, 불충분한 원격 분석 설정 또는 Application Insights 통합 문제로 인해 자주 발생합니다. 다음과 같은 명령을 사용하여 기능 구성WorkerDefaults() 그리고 AddApplicationInsightsTelemetryWorkerService(), Application Insights가 예상대로 로그를 캡처하는지 확인합니다. 이러한 스크립트는 원격 측정 데이터를 수집하고 관리하기 위한 강력한 기반을 구축합니다.
먼저 Program.cs의 `HostBuilder`는 Azure Function 작업자 환경을 설정합니다. 방법 기능 구성WorkerDefaults() Azure Functions에 필요한 모든 미들웨어가 초기화되었는지 확인합니다. 또한 사용자 정의 로깅 및 종속성 주입 구성도 허용합니다. 다음으로 AddApplicationInsightsTelemetryWorkerService()를 사용하여 Application Insights를 명시적으로 등록합니다. 이 단계에서는 HTTP로 트리거되지 않은 Azure Functions에 대해 원격 분석 수집이 올바르게 구성되었는지 확인합니다. 예를 들어 타이머 트리거 기능을 디버깅한다고 가정해 보세요. Application Insights가 없으면 성능을 추적하고 문제를 식별하는 것이 수동적이고 시간이 많이 걸리는 프로세스가 됩니다. 🔧
host.json 파일은 캡처되는 로그 수준을 제어하는 데 중요한 역할을 합니다. 기본 섹션과 Application Insights 섹션 모두에서 `LogLevel`을 Information으로 설정하여 정보 수준 로그를 처리해야 함을 명시적으로 정의합니다. 그러나 samplingSettings 속성은 때때로 로그를 필터링하여 로그 작업 공간에 항목이 누락될 수 있습니다. 샘플링을 비활성화(`"isEnabled": false`)함으로써 정보 로그를 포함한 모든 원격 측정 데이터가 캡처되도록 합니다. 이는 사소한 세부 사항이라도 근본 원인을 밝힐 수 있는 생산 문제를 해결할 때 특히 중요합니다. 나는 작은 LogInformation 메시지가 잘못 구성된 스케줄러를 발견하는 데 도움이 되는 상황에 직면한 적이 있습니다. 🎯
마지막으로 단위 테스트 스크립트는 정보, 경고, 오류 등 다양한 수준의 로그가 올바르게 내보내지고 캡처되는지 확인합니다. 사용 최소레벨 설정(), 우리는 로거가 원하는 임계값 이상에서 모든 로그를 처리하는지 확인합니다. 이 예에서는 명시적으로 구성되었을 때 정보 로그가 나타나는지 확인했습니다. 이와 같이 단위 테스트를 작성하면 환경 전체에서 로깅 동작이 일관되게 유지되어 배포 중에 예상치 못한 일이 발생하는 것을 방지할 수 있습니다. 이러한 스크립트는 누락된 Azure 함수 로그 문제를 해결하고 클라우드 애플리케이션에서 원격 분석 수집을 최적화하는 포괄적인 솔루션을 제공합니다.
Azure 함수 로그가 로그 작업 공간에 표시되는지 확인
다음은 누락된 정보 로그 문제를 해결하여 Application Insights의 적절한 구성을 보장하는 C# 백 엔드 솔루션입니다.
// Solution 1: Proper Host Configuration and Log Filtering
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
public class Program
{
public static void Main(string[] args)
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.Configure<LoggerFilterOptions>(options =>
{
options.MinLevel = LogLevel.Information;
});
})
.Build();
host.Run();
}
}
적절한 로그 수준 등록을 보장하기 위한 구성 검토
Host.json과 Application Insights 로그 수준이 일치하는지 확인하기 위한 구성 파일 설정입니다.
// host.json Configuration
{
"version": "2.0",
"logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Function": "Information"
},
"applicationInsights": {
"LogLevel": {
"Default": "Information"
},
"samplingSettings": {
"isEnabled": false
}
}
}
}
대안: Azure 함수 코드에서 특정 로그 수준 필터링
다양한 수준에 대한 로그를 명시적으로 필터링하고 내보내는 C# 스크립트입니다.
using Microsoft.Extensions.Logging;
public class MyFunction
{
private readonly ILogger _logger;
public MyFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<MyFunction>();
}
public void Run()
{
_logger.LogInformation("Executing Information level log.");
_logger.LogWarning("This is a Warning level log.");
_logger.LogError("This is an Error level log.");
}
}
로그 수준 구성을 위한 단위 테스트
정보 수준의 로그가 올바르게 캡처되었는지 확인하는 간단한 단위 테스트입니다.
using Xunit;
using Microsoft.Extensions.Logging;
public class LogTests
{
[Fact]
public void VerifyInformationLogsAreCaptured()
{
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Information);
});
var logger = loggerFactory.CreateLogger("TestLogger");
logger.LogInformation("This is a test Information log.");
Assert.True(true, "Information log captured successfully.");
}
}
원격 측정 데이터를 탐색하여 누락된 Azure 함수 로그 해결
로그 작업 영역에 표시되지 않는 Azure 함수 로그의 또 다른 중요한 측면은 Application Insights에서 사용하는 원격 분석 채널 구성과 관련이 있습니다. 기본적으로 Azure Functions는 로그를 원격 분석 엔드포인트로 보내기 전에 로그를 버퍼링하는 Application Insights SDK를 사용합니다. 그러나 이 버퍼링은 원격 측정 데이터의 샘플링 또는 부적절한 플러시로 인해 정보 수준 로그와 같은 특정 로그 항목을 지연하거나 생략할 수 있습니다. 일관된 로그를 유지하려면 적절한 원격 측정 채널 동작을 보장하는 것이 중요합니다.
흔히 간과되는 요소 중 하나는 샘플링설정 host.json의 구성입니다. 샘플링이 활성화되면 데이터 볼륨과 비용을 줄이기 위해 일부 로그만 Application Insights로 전송됩니다. 그러나 정보 로그가 디버깅에 중요한 경우 샘플링을 완전히 비활성화하거나(`"isEnabled": false`) 필요한 모든 로그가 캡처되도록 샘플링 논리를 조정해야 합니다. 예를 들어 샘플링을 활성화하면 중요하지 않은 정보 로그가 무작위로 삭제되어 프로덕션 디버깅 중에 좌절감을 느끼는 문제에 직면했습니다. 💻
추가적으로, 플러시 명령을 사용하면 버퍼링된 모든 원격 측정이 즉시 전송되어 데이터 손실을 방지할 수 있습니다. HTTP 요청 또는 타이머 트리거와 같은 고부하 트리거에서 Azure Functions가 실행되는 시나리오에서는 원격 분석 버퍼링이 빠르게 누적되어 지연이 발생할 수 있습니다. TelemetryClient.Flush()를 명시적으로 호출하거나 원격 측정 엔드포인트 연결을 확인함으로써 개발자는 로그 불일치를 줄이고 정확한 모니터링 환경을 유지할 수 있습니다. 궁극적으로 샘플링, 버퍼링 및 플러시의 균형을 유지하면 비용을 최소화하면서 최적의 로그 가시성을 얻을 수 있습니다.
Azure 함수 로그에 대해 자주 묻는 질문
- 로그 작업 영역에서 내 정보 로그가 누락되는 이유는 무엇입니까?
- 정보 로그는 다음과 같은 이유로 표시되지 않을 수 있습니다. samplingSettings 에서 host.json. 다음을 사용하여 샘플링을 비활성화합니다. "isEnabled": false 모든 로그를 캡처합니다.
- Host.json의 LogLevel 구성은 무엇을 합니까?
- 그만큼 LogLevel 다음과 같이 캡처된 최소 로그 심각도를 지정합니다. "Default": "Information", 해당 수준 이상의 로그가 처리되도록 합니다.
- 원격 분석 데이터가 Application Insights에 플러시되는지 어떻게 확인할 수 있나요?
- 사용 TelemetryClient.Flush() 버퍼링된 모든 원격 분석이 즉시 전송되도록 하려면 함수 코드에 메서드를 사용하세요.
- 경고 및 오류 로그는 표시되지만 정보 로그는 표시되지 않는 이유는 무엇입니까?
- 이 문제는 다음과 같은 경우에 발생합니다. LogLevel 잘못 구성되었거나 samplingSettings 최적화로 인해 정보 로그를 삭제합니다.
- 특정 로그를 포함하도록 샘플링 논리를 조정할 수 있나요?
- 예, 맞춤설정할 수 있습니다. excludedTypes 아래의 재산 samplingSettings 다음과 같은 특정 원격 분석 유형을 제외하려면 Request 또는 Exception.
- AddApplicationInsightsTelemetryWorkerService()의 역할은 무엇인가요?
- 그만큼 AddApplicationInsightsTelemetryWorkerService() 메서드는 Azure Functions의 원격 분석을 위해 Application Insights를 등록합니다.
- Application Insights가 올바르게 연결되었는지 확인하려면 어떻게 해야 하나요?
- Application Insights 설정 아래의 함수 앱 구성에서 계측 키 또는 연결 문자열을 확인하세요.
- 정보 수준 메시지를 프로그래밍 방식으로 기록할 수 있나요?
- 예, 다음을 사용할 수 있습니다. _logger.LogInformation("Your message") 함수 코드에 정보 메시지를 명시적으로 기록하는 방법입니다.
- 타이머 트리거 기능에서 누락된 로그 문제를 해결하려면 어떻게 해야 합니까?
- 확인 host.json 구성하고, 원격 측정이 연결되어 있는지 확인하고, 전화를 겁니다. Flush() 기능이 끝나면.
- ConfigureFunctionsWorkerDefaults()는 무엇을 합니까?
- 그만큼 ConfigureFunctionsWorkerDefaults() 메서드는 Azure Functions 미들웨어를 초기화하고 로깅을 설정합니다.
Azure 함수 로그에서 로그 가시성 보장
주요 통찰력 및 다음 단계
Azure Functions에서 적절한 로그 가시성을 보장하려면 host.json을 주의 깊게 구성하고 적절한 원격 분석 설정을 설정해야 합니다. 다음과 같은 문제 견본 추출 기본 로그 수준 임계값으로 인해 포털 콘솔에 데이터가 표시되는 경우에도 로그가 누락될 수 있습니다. 명시적으로 샘플링을 비활성화하고 원격 분석 플러시 메서드를 호출하면 이 문제가 해결되는 경우가 많습니다.
또한 Application Insights가 올바르게 연결되었는지 확인하고 두 항목 모두에서 적절한 로그 수준을 확인합니다. Program.cs 구성 파일이 중요합니다. 이러한 조정을 통해 정보 로그는 로그 작업 영역에 안정적으로 표시되어 Azure 함수 동작에 대한 명확한 통찰력을 제공합니다. 🛠️
로그
- Application Insights 구성에 대한 공식 Microsoft 설명서 - 마이크로소프트 런
- Azure 함수 로깅 모범 사례 - Azure 함수 모니터링