이 자습서에서는 Azure App Service의 Linux(Bring-Your-Own-Code) 앱에 OpenTelemetry 수집기를 사이드카 컨테이너로 추가합니다. 사용자 지정 컨테이너의 경우 자습서: Azure App Service에서 사용자 지정 컨테이너에 대한 사이드카 컨테이너 구성을 참조하세요.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
App Service의 사이드카 컨테이너를 사용하면 기본 제공 또는 사용자 지정 기본 컨테이너에 긴밀하게 결합하지 않고도 추가 서비스 및 기능을 Linux 앱에 배포할 수 있습니다. 사이드카 컨테이너는 동일한 App Service 계획의 기본 애플리케이션 컨테이너와 함께 실행됩니다.
App Service의 각 Linux 앱에 대해 최대 9개의 사이드카 컨테이너를 추가할 수 있습니다. 예를 들어 모니터링, 로깅, 구성 및 네트워킹 서비스를 사이드카 컨테이너로 추가할 수 있습니다. OpenTelemetry 콜렉터 사이드카는 모니터링의 예시 중 하나입니다.
1. 필요한 리소스 설정
먼저 자습서에서 사용하는 리소스를 만듭니다. 이 특정 시나리오에 사용되며 일반적으로 사이드카 컨테이너에는 필요하지 않습니다.
Azure Cloud Shell에서 다음 명령을 실행합니다.
<environment-name>
을 반드시 제공합니다.git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs cd app-service-sidecar-tutorial-prereqs azd env new <environment-name> azd provision
메시지가 표시되면 원하는 구독과 지역을 입력합니다. 예를 들면 다음과 같습니다.
- 구독: 사용자 구독.
- 지역: (유럽) 서유럽.
배포가 완료되면 다음 출력이 표시됩니다.
APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=... Azure container registry name = <registry-name> Managed identity resource ID = <managed-identity-resource-id> Managed identity client ID = <managed-identity-client-id> Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/<subscription-id>/resourceGroups/<group-name>
나중을 위해 이 출력 값을 복사해 둡니다. 포털의 각 리소스 관리 페이지에서도 찾을 수 있습니다.
참고
azd provision
(이)가 포함된 템플릿을 사용하여 다음 Azure 리소스를 만듭니다.- 환경 이름을 기반으로 하는 리소스 그룹.
- 두 개의 이미지가 배포된 컨테이너 레지스트리.
- OpenTelemetry 모듈이 있는 Nginx 이미지입니다.
- Azure Monitor에 내보내도록 구성된 OpenTelemetry 수집기 이미지입니다.
- 레지스트리에서 이미지를 끌어오기 위해 리소스 그룹에 대한
AcrPull
권한이 있는 사용자가 할당한 관리 ID. - 로그 분석 작업 영역.
- Application Insights 구성 요소.
2. 웹앱 만들기
이 단계에서는 템플릿 ASP.NET Core 애플리케이션을 배포합니다.
Azure Cloud Shell로 돌아와서 다음 명령을 실행합니다.
<app-name>
을 고유한 앱 이름으로 바꿉니다.
cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux
몇 분 후, 이 .NET 웹 애플리케이션은 새로운 App Service 앱에 MyFirstAzureWebApp.dll로 배포됩니다.
3. 사이드카 컨테이너 추가
이 섹션에서는 Linux 앱에 사이드카 컨테이너를 추가합니다.
Azure Portal에서 앱 관리 페이지로 이동합니다.
앱의 관리 페이지의 왼쪽 메뉴에서 배포 센터를 선택합니다.
앱과 함께 실행할 컨테이너를 추가하는 데 관심이 있으신가요? 여기를 클릭하여 사용해 보세요. 배너를 선택합니다.
페이지가 다시 로드되면 컨테이너(새 항목) 탭을 선택합니다.
추가를 선택하고 다음과 같이 새 컨테이너를 구성합니다.
- 이름: otel-collector
- 이미지 원본: Azure Container Registry
- 인증: 관리자 자격 증명
-
레지스트리:
azd provision
에 의해 만들어진 레지스트리 - 이미지: otel-collector
- 태그: 최신
적용을 선택합니다.
4. 환경 변수 구성
샘플 시나리오의 경우 otel-collector 사이드카는 OpenTelemetry 데이터를 Azure Monitor로 내보내도록 구성되지만 연결 문자열을 환경 변수로 지정해야 합니다(otel-collector 이미지 대한 OpenTelemetry 구성 파일 참조).
앱 설정을 구성하여 App Service 앱과 같은 컨테이너에 대한 환경 변수를 구성합니다. 앱 설정은 앱의 모든 컨테이너에서 액세스할 수 있습니다.
App Service 앱 관리 페이지로 이동합니다.
왼쪽 메뉴에서 환경 변수를 선택합니다.
추가를 선택하여 앱 설정을 추가하고 다음과 같이 구성합니다.
- 이름: APPLICATIONINSIGHTS_CONNECTION_STRING
-
값:
azd provision
출력의 연결 문자열입니다. Cloud Shell 세션을 잃어버린 경우 Application Insight 리소스의 개요 페이지에 있는 연결 문자열에서 찾을 수도 있습니다.
적용을 선택한 다음 적용을 선택하고 확인을 선택합니다.
5. 시작 시 계측 구성
이 단계에서는 OpenTelemetry .NET 제로 코드 계측에 설명된 단계에 따라 앱에 대한 계측을 만듭니다.
Cloud Shell로 돌아와서 다음 줄을 사용하여 startup.sh를 만듭니다.
cat > startup.sh << 'EOF' #!/bin/bash # Download the bash script curl -sSfL https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh -O # Install core files sh ./otel-dotnet-auto-install.sh # Enable execution for the instrumentation script chmod +x $HOME/.otel-dotnet-auto/instrument.sh # Setup the instrumentation for the current shell session . $HOME/.otel-dotnet-auto/instrument.sh export OTEL_SERVICE_NAME="MyFirstAzureWebApp-Azure" export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318" export OTEL_TRACES_EXPORTER="otlp" export OTEL_METRICS_EXPORTER="otlp" export OTEL_LOGS_EXPORTER="otlp" # Run your application with instrumentation OTEL_SERVICE_NAME=myapp OTEL_RESOURCE_ATTRIBUTES=deployment.environment=staging,service.version=1.0.0 dotnet /home/site/wwwroot/MyFirstAzureWebApp.dll EOF
다음 Azure CLI 명령을 사용하여 이 파일을 앱에 배포합니다. 여전히 ~/MyFirstAzureWebApp 디렉터리에 있는 경우
az webapp up
이 이미 리소스 그룹과 앱 이름에 대한 기본값을 설정했기 때문에 다른 매개 변수는 필요하지 않습니다.az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
팁
이 방식은 startup.sh 파일을 애플리케이션과 별도로 배포합니다. 이렇게 하면 계측 구성이 애플리케이션 코드와 분리됩니다. 하지만 다른 배포 방법을 사용하여 스크립트를 애플리케이션과 함께 배포할 수 있습니다.
앱 관리 페이지로 돌아가서 왼쪽 메뉴에서 구성을 선택합니다.
시작 명령을 /home/site/startup.sh로 설정합니다. 이는 이전 단계에서 배포한 경로와 동일합니다.
저장을 선택한 다음 계속을 선택합니다.
5. Application Insights에서 확인
이제 otel-collector 사이드카가 Application Insights로 데이터를 내보내야 합니다.
https://<app-name>.azurewebsites.net
브라우저 탭으로 돌아가서 페이지를 몇 번 새로 고쳐 일부 웹 요청을 생성합니다.리소스 그룹 개요 페이지로 돌아간 다음
azd up
이 만든 Application Insights 리소스를 선택합니다. 이제 기본 차트에 일부 데이터가 표시됩니다.
참고
이 매우 일반적인 모니터링 시나리오에서 Application Insights는 Jaeger, Prometheus 및 Zipkin과 같이 사용할 수 있는 OpenTelemetry 대상 중 하나일 뿐입니다.
6. 리소스 정리
더 이상 환경이 필요하지 않으면 리소스 그룹과 관련된 모든 리소스를 삭제할 수 있습니다. Cloud Shell에서 다음 명령을 실행합니다.
cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down