자습서: Azure 앱 Service에서 Linux 앱용 사이드카 컨테이너 구성
이 자습서에서는 OpenTelemetry 수집기를 사이드카 컨테이너로 Azure 앱 Service의 Linux(bring-your-own-code) 앱에 추가합니다. 사용자 지정 컨테이너의 경우 자습서: Azure 앱 Service에서 사용자 지정 컨테이너에 대한 사이드카 컨테이너 구성을 참조하세요.
Azure 앱 Service에서는 각 Linux 앱에 대해 최대 9개의 사이드카 컨테이너를 추가할 수 있습니다. 사이드카 컨테이너를 사용하면 기본(기본 제공) 컨테이너에 긴밀하게 결합하지 않고도 추가 서비스 및 기능을 Linux 앱에 배포할 수 있습니다. 예를 들어 모니터링, 로깅, 구성 및 네트워킹 서비스를 사이드카 컨테이너로 추가할 수 있습니다. OpenTelemetry 수집기 사이드카는 이러한 모니터링 예제 중 하나입니다.
App Service의 측면 컨테이너에 대한 자세한 내용은 다음을 참조하세요.
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
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 앱에 사이드카 컨테이너를 추가합니다. 포털 환경은 아직 롤아웃 중입니다. 아직 사용할 수 없는 경우 아래 ARM 템플릿 사용 탭을 계속 진행합니다.
Azure Portal에서 앱의 관리 페이지로 이동합니다.
앱의 관리 페이지의 왼쪽 메뉴에서 배포 센터를 선택합니다.
앱과 함께 실행할 컨테이너를 추가하는 데 관심이 있는 배너 를 선택하세요? 사용해 보려면 여기를 클릭하십시오.
배너를 볼 수 없는 경우 포털 UI는 아직 구독에 대해 롤아웃되지 않습니다. 대신 여기에서 ARM 템플릿 사용 탭을 선택하고 계속합니다.
페이지가 다시 로드되면 컨테이너(새) 탭을 선택합니다.
추가를 선택하고 다음과 같이 새 컨테이너를 구성합니다.
- 이름: 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
브라우저 탭으로 돌아가서 페이지를 몇 번 새로 고쳐 일부 웹 요청을 생성합니다.리소스 그룹 개요 페이지로 돌아가서 만든 Application Insights 리소스
azd up
를 선택합니다. 이제 기본 차트에 일부 데이터가 표시됩니다.
참고 항목
이 매우 일반적인 모니터링 시나리오에서 Application Insights는 Jaeger, Prometheus 및 Zipkin과 같이 사용할 수 있는 OpenTelemetry 대상 중 하나일 뿐입니다.
6. 리소스 정리
환경이 더 이상 필요하지 않은 경우 리소스 그룹 및 모든 관련 리소스를 삭제할 수 있습니다. Cloud Shell에서 다음 명령을 실행하기만 하면 됩니다.
cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down
자주 묻는 질문
사이드카 컨테이너는 내부 통신을 어떻게 처리합니까?
사이드카 컨테이너는 주 컨테이너와 동일한 네트워크 호스트를 공유하므로 주 컨테이너(및 기타 사이드카 컨테이너)는 사이드카 localhost:<port>
의 모든 포트에 연결할 수 있습니다. startup.sh 예제는 otel 수집기 사이드카의 포트 4318에 액세스하는 데 사용합니다localhost:4318
.
컨테이너 편집 대화 상자에서 포트 상자는 현재 App Service에서 사용되지 않습니다. 사이드카가 수신 대기하는 포트를 나타내는 등 사이드카 메타데이터의 일부로 사용할 수 있습니다.
다른 언어 스택을 계측할 어떻게 할까요? 있나요?
비슷한 방법을 사용하여 다른 언어 스택에서 앱을 계측할 수 있습니다. 자세한 내용은 OpenTelemetry 설명서를 참조하세요.