다음을 통해 공유


자습서: Azure 앱 Service에서 사용자 지정 컨테이너에 대한 사이드카 컨테이너 구성

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

Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

사이드카 컨테이너가 무엇인가요?

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

사이드카 컨테이너는 동일한 App Service 계획의 기본 애플리케이션 컨테이너와 함께 실행됩니다.

1. 필요한 리소스 설정

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

  1. Azure Cloud Shell에서 다음 명령을 실행합니다.

    git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
    cd app-service-sidecar-tutorial-prereqs
    azd env new my-sidecar-env
    azd provision
    
  2. 메시지가 표시되면 원하는 구독 및 지역을 제공합니다. 예시:

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

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

     APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=...
    
     Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/.../resourceGroups/...
     
  3. 브라우저 탭에서 리소스 그룹 링크를 엽니다. 나중에 연결 문자열을 사용해야 합니다.

    참고 항목

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

2. 사이드카 사용 앱 만들기

  1. 리소스 그룹의 관리 페이지에서 만들기를 선택합니다.

  2. 웹앱을 검색한 다음 만들기 아래쪽 화살표를 선택하고 Web App을 선택합니다.

    웹앱을 검색하고 클릭할 웹앱 만들기 단추가 있는 Azure Marketplace 페이지를 보여 주는 스크린샷

  3. 다음과 같이 기본 패널을 구성합니다.

    • 이름: 고유 이름
    • 게시: 컨테이너
    • 운영 체제: Linux
    • 지역: azd provision사용하여 선택한 지역과 동일한 지역
    • Linux 계획: 새 App Service 요금제

    강조 표시된 Linux 사용자 지정 컨테이너 앱에 대한 웹앱 만들기 마법사 및 설정을 보여 주는 스크린샷

  4. 컨테이너를 선택합니다. 다음과 같이 컨테이너 패널을 구성합니다.

    • 사이드카 지원: 사용
    • 이미지 원본: Azure Container Registry
    • 레지스트리: azd provision에 의해 만들어진 레지스트리
    • 이미지: nginx
    • 태그: 최신
    • 포트: 80

    웹앱 만들기 마법사와 컨테이너 이미지 및 사이드카 지원에 대한 설정이 강조 표시된 스크린샷

    참고 항목

    이러한 설정은 사이드카 사용 앱에서 다르게 구성됩니다. 자세한 내용은 사이드카 사용 사용자 지정 컨테이너의 차이점은 무엇인가요?를 참조하세요.

  5. 검토 + 생성를 선택한 다음, 생성를 선택합니다.

  6. 배포가 완료되면 리소스로 이동을 선택합니다.

  7. 새 브라우저 탭에서 https://<app-name>.azurewebsites.net(으)로 이동하여 기본 Nginx 페이지를 확인합니다.

3. 사이드카 컨테이너 추가

이 섹션에서는 사용자 지정 컨테이너 앱에 사이드카 컨테이너를 추가합니다.

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

    배포 센터에는 앱의 모든 컨테이너가 표시됩니다. 지금은 기본 컨테이너만 있습니다.

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

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

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

    이제 배포 센터에 두 개의 컨테이너가 표시됩니다. 주 컨테이너는 Main으로 표시되고 사이드카 컨테이너는 사이드카로 표시됩니다. 각 앱에는 하나의 기본 컨테이너가 있어야 하지만 여러 사이드카 컨테이너가 있을 수 있습니다.

4. 환경 변수 구성

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

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

  1. 앱의 관리 페이지의 왼쪽 메뉴에서 환경 변수를 선택합니다.

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

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

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

참고 항목

특정 앱 설정은 사이드카 사용 앱에 적용되지 않습니다. 자세한 내용은 사이드카 사용 사용자 지정 컨테이너의 차이점은 무엇인가요?

5. Application Insights에서 확인

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

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

  2. 리소스 그룹 개요 페이지로 돌아가서 Application Insights 리소스를 선택합니다. 이제 기본 차트에 일부 데이터가 표시됩니다.

    기본 차트의 데이터를 보여 주는 Application Insights 페이지의 스크린샷

참고 항목

이 매우 일반적인 모니터링 시나리오에서 Application Insights는 Jaeger, Prometheus 및 Zipkin과 같이 사용할 수 있는 OpenTelemetry 대상 중 하나일 뿐입니다.

리소스 정리

환경이 더 이상 필요하지 않은 경우 리소스 그룹, App Service 및 모든 관련 리소스를 삭제할 수 있습니다. 복제된 리포지토리의 Cloud Shell에서 이 명령을 실행하기만 하면됩니다.

azd down

자주 묻는 질문

사이드카 사용 사용자 지정 컨테이너의 차이점은 무엇인가요?

사이드카 사용 앱을 사이드카를 사용하지 않는 앱과 다르게 구성합니다.

사이드카 사용 안 함

  • 컨테이너 이름 및 형식은 직접 LinuxFxVersion=DOCKER|<image-details> 구성됩니다( az webapp config set --linux-fx-version 참조).
  • 기본 컨테이너는 다음과 같은 앱 설정으로 구성됩니다.
    • DOCKER_REGISTRY_SERVER_URL
    • DOCKER_REGISTRY_SERVER_USERNAME
    • DOCKER_REGISTRY_SERVER_PASSWORD
    • WEBSITES_PORT

사이드카 기능 사용

  • 사이드카가 활성화된 앱은 LinuxFxVersion=sitecontainers로 지정됩니다 (자세한 내용은 az webapp config set --linux-fx-version을 참조하세요).
  • 기본 컨테이너는 sitecontainers 리소스로 구성됩니다. 사이드카 사용 앱에는 이러한 설정이 적용되지 않습니다.
    • DOCKER_REGISTRY_SERVER_URL
    • DOCKER_REGISTRY_SERVER_USERNAME
    • DOCKER_REGISTRY_SERVER_PASSWORD
    • WEBSITES_PORT

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

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

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

사이드카 컨테이너가 인터넷 요청을 받을 수 있나요?

아니요. App Service는 인터넷 요청만 기본 컨테이너로 라우팅합니다. 코드 기반 Linux 앱의 경우 기본 제공 Linux 컨테이너는 기본 컨테이너이며 모든 사이드카 컨테이너(sitecontainers)를 함께 IsMain=false추가해야 합니다. 사용자 지정 컨테이너의 경우 sitecontainers 중 하나를 제외한 모든 컨테이너들에 IsMain=false.

구성 IsMain에 대한 자세한 내용은 Microsoft.Web sites/sitecontainers를 참조하세요.

볼륨 탑재를 사용하려면 어떻게 해야 하나요?

볼륨 탑재 기능을 사용하면 웹앱 내의 컨테이너 간에 비영구 파일 및 디렉터리를 공유할 수 있습니다.

사이드카 컨테이너에 대한 볼륨 탑재 구성을 보여 주는 스크린샷

볼륨 하위 경로: 이 경로는 자동으로 만들어지고 컨테이너 내에서 참조되지 않는 논리 디렉터리 경로입니다. 동일한 볼륨 하위 경로로 구성된 컨테이너는 파일 및 디렉터리를 서로 공유할 수 있습니다.

컨테이너 탑재 경로: 컨테이너 내에서 참조하는 디렉터리 경로에 해당합니다. 컨테이너 탑재 경로는 볼륨 하위 경로에 매핑됩니다.

예를 들어, 다음 볼륨 마운트가 구성되어 있다고 가정합니다.

사이드카 이름 볼륨 하위 경로 컨테이너 탑재 경로 읽기 전용
컨테이너1 /directory1/directory2 /container1Vol 거짓
Container2 /directory1/directory2 /container2Vol 진실
Container3 /directory1/directory2/directory3 /container3Vol 거짓
Container4 /directory4 /container1Vol 거짓

이러한 설정에 따라 다음 조건이 적용됩니다.

  • Container1에서 /container1Vol/myfile.txt만드는 경우 Container2는 /container2Vol/myfile.txt통해 파일을 읽을 수 있습니다.
  • Container1이 /container1Vol/directory3/myfile.txt만드는 경우 Container2는 /container2Vol/directory3/myfile.txt통해 파일을 읽을 수 있으며 Container3은 /container3Vol/myfile.txt통해 파일을 읽고 쓸 수 있습니다.
  • Container4는 다른 컨테이너와 공통적으로 볼륨 탑재를 공유하지 않습니다.

참고 항목

코드 기반 Linux 앱의 경우 기본 제공 Linux 컨테이너는 볼륨 탑재를 사용할 수 없습니다.

추가 리소스