다음을 통해 공유


자습서: Azure 앱 Service에서 Linux 앱용 사이드카 컨테이너 구성

이 자습서에서는 OpenTelemetry 수집기를 사이드카 컨테이너로 Azure 앱 Service의 Linux(bring-your-own-code) 앱에 추가합니다. 사용자 지정 컨테이너의 경우 자습서: Azure 앱 Service에서 사용자 지정 컨테이너에 대한 사이드카 컨테이너 구성을 참조하세요.

Azure 앱 Service에서는 각 Linux 앱에 대해 최대 9개의 사이드카 컨테이너를 추가할 수 있습니다. 사이드카 컨테이너를 사용하면 기본(기본 제공) 컨테이너에 긴밀하게 결합하지 않고도 추가 서비스 및 기능을 Linux 앱에 배포할 수 있습니다. 예를 들어 모니터링, 로깅, 구성 및 네트워킹 서비스를 사이드카 컨테이너로 추가할 수 있습니다. OpenTelemetry 수집기 사이드카는 이러한 모니터링 예제 중 하나입니다.

App Service의 측면 컨테이너에 대한 자세한 내용은 다음을 참조하세요.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

1. 필요한 리소스 설정

먼저 자습서에서 사용하는 리소스를 만듭니다. 이 특정 시나리오에 사용되며 일반적으로 사이드카 컨테이너에는 필요하지 않습니다.

  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
    
  2. 메시지가 표시되면 선택한 구독 및 지역을 제공합니다. 예시:

    • 구독: 사용자 구독.
    • 지역: (유럽) 서유럽.

    배포가 완료되면 다음 출력이 표시됩니다.

     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>
     
  3. 나중에 이러한 출력 값을 복사합니다. 포털의 각 리소스 관리 페이지에서 찾을 수도 있습니다.

    참고 항목

    azd provision(이)가 포함된 템플릿을 사용하여 다음 Azure 리소스를 만듭니다.

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 템플릿 사용 탭을 계속 진행합니다.

  1. Azure Portal에서 앱의 관리 페이지로 이동합니다.

  2. 앱의 관리 페이지의 왼쪽 메뉴에서 배포 센터를 선택합니다.

  3. 앱과 함께 실행할 컨테이너를 추가하는 데 관심이 있는 배너 를 선택하세요? 사용해 보려면 여기를 클릭하십시오.

    배너를 볼 수 없는 경우 포털 UI는 아직 구독에 대해 롤아웃되지 않습니다. 대신 여기에서 ARM 템플릿 사용 탭을 선택하고 계속합니다.

  4. 페이지가 다시 로드되면 컨테이너(새) 탭을 선택합니다.

  5. 추가를 선택하고 다음과 같이 새 컨테이너를 구성합니다.

    • 이름: otel-collector
    • 이미지 원본: Azure Container Registry
    • 인증: 관리자 자격 증명
    • 레지스트리: azd provision에 의해 만들어진 레지스트리
    • 이미지: otel-collector
    • 태그: 최신
  6. 적용을 선택합니다.

    웹앱의 배포 센터에서 사이드카 컨테이너를 구성하는 방법을 보여 주는 스크린샷

4. 환경 변수 구성

샘플 시나리오의 경우 otel-collector 사이드카는 OpenTelemetry 데이터를 Azure Monitor로 내보내도록 구성되지만 연결 문자열을 환경 변수로 지정해야 합니다(otel-collector 이미지 대한 OpenTelemetry 구성 파일 참조).

앱 설정을 구성하여 App Service 앱과 같은 컨테이너에 대한 환경 변수를 구성합니다. 앱 설정은 앱의 모든 컨테이너에서 액세스할 수 있습니다.

  1. App Service 앱의 관리 페이지로 이동합니다.

  2. 왼쪽 메뉴에서 환경 변수를 선택합니다.

  3. 다음과 같이 추가 및 구성을 선택하여 앱 설정을 추가합니다.

    • 이름: APPLICATIONINSIGHTS_CONNECTION_STRING
    • : 출력의 azd provision연결 문자열. Cloud Shell 세션이 손실된 경우 Application Insight 리소스의 개요 페이지(연결 문자열)에서 찾을 수도 있습니다.
  4. 적용을 선택한 다음 적용한 다음 확인을 선택합니다.

    두 개의 앱 설정이 추가된 웹앱의 구성 페이지를 보여 주는 스크린샷

5. 시작 시 계측 구성

이 단계에서는 OpenTelemetry .NET 제로 코드 계측에 설명된 단계에 따라 앱에 대한 계측을 만듭니다.

  1. 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
    
  2. 다음 Azure CLI 명령을 사용하여 이 파일을 앱에 배포합니다. ~/MyFirstAzureWebApp 디렉터리에 있는 경우 리소스 그룹 및 앱 이름에 대한 기본값을 이미 설정했기 때문에 az webapp up 다른 매개 변수가 필요하지 않습니다.

    az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
    

    이 방법은 애플리케이션과 별도로 startup.sh 파일을 배포합니다. 이렇게 하면 계측 구성이 애플리케이션 코드와 별개입니다. 그러나 다른 배포 방법을 사용하여 애플리케이션과 함께 스크립트를 배포할 수 있습니다.

  3. 앱의 관리 페이지로 돌아가서 왼쪽 메뉴에서 구성을 선택합니다.

  4. 시작 명령을 /home/site/startup.sh 설정합니다. 이전 단계에서 배포한 것과 동일한 경로입니다.

  5. 저장, 계속선택합니다.

    Azure Portal에서 App Service 앱에 대한 사용자 지정 시작 파일을 구성하는 방법을 보여 주는 스크린샷

5. Application Insights에서 확인

이제 otel-collector 사이드카가 Application Insights로 데이터를 내보내야 합니다.

  1. https://<app-name>.azurewebsites.net 브라우저 탭으로 돌아가서 페이지를 몇 번 새로 고쳐 일부 웹 요청을 생성합니다.

  2. 리소스 그룹 개요 페이지로 돌아가서 만든 Application Insights 리소스 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

자주 묻는 질문

사이드카 컨테이너는 내부 통신을 어떻게 처리합니까?

사이드카 컨테이너는 주 컨테이너와 동일한 네트워크 호스트를 공유하므로 주 컨테이너(및 기타 사이드카 컨테이너)는 사이드카 localhost:<port>의 모든 포트에 연결할 수 있습니다. startup.sh 예제는 otel 수집기 사이드카의 포트 4318에 액세스하는 데 사용합니다localhost:4318.

컨테이너 편집 대화 상자에서 포트 상자는 현재 App Service에서 사용되지 않습니다. 사이드카가 수신 대기하는 포트를 나타내는 등 사이드카 메타데이터의 일부로 사용할 수 있습니다.

다른 언어 스택을 계측할 어떻게 할까요? 있나요?

비슷한 방법을 사용하여 다른 언어 스택에서 앱을 계측할 수 있습니다. 자세한 내용은 OpenTelemetry 설명서를 참조하세요.

추가 리소스