이 자습서에서는 OpenTelemetry 수집기를 사이드카 컨테이너로 Azure 앱 Service의 Linux 사용자 지정 컨테이너 앱에 추가합니다. Bring-your-own-code Linux 앱의 경우 자습서: Azure 앱 Service에서 Linux 앱용 사이드카 컨테이너 구성을 참조하세요.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
사이드카 컨테이너가 무엇인가요?
Azure 앱 Service에서는 각 Linux 앱에 대해 최대 9개의 사이드카 컨테이너를 추가할 수 있습니다. 사이드카 컨테이너를 사용하면 기본 컨테이너(기본 제공 또는 사용자 지정)에 긴밀하게 결합하지 않고도 추가 서비스 및 기능을 Linux 앱에 배포할 수 있습니다. 예를 들어 모니터링, 로깅, 구성 및 네트워킹 서비스를 사이드카 컨테이너로 추가할 수 있습니다. OpenTelemetry 수집기 사이드카는 이러한 모니터링 예제 중 하나입니다.
사이드카 컨테이너는 동일한 App Service 계획의 기본 애플리케이션 컨테이너와 함께 실행됩니다.
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
메시지가 표시되면 원하는 구독 및 지역을 제공합니다. 예시:
- 구독: 사용자 구독.
- 지역: (유럽) 서유럽.
배포가 완료되면 다음 출력이 표시됩니다.
APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=... Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/.../resourceGroups/...
브라우저 탭에서 리소스 그룹 링크를 엽니다. 나중에 연결 문자열을 사용해야 합니다.
참고 항목
azd provision
(이)가 포함된 템플릿을 사용하여 다음 Azure 리소스를 만듭니다.- my-sidecar-env_group라는 리소스 그룹입니다.
- 두 개의 이미지가 배포된 컨테이너 레지스트리.
- OpenTelemetry 모듈이 있는 Nginx 이미지입니다.
- Azure Monitor에 내보내도록 구성된 OpenTelemetry 수집기 이미지입니다.
- 로그 분석 작업 영역
- Application Insights 구성 요소
2. 사이드카 사용 앱 만들기
리소스 그룹의 관리 페이지에서 만들기를 선택합니다.
웹앱을 검색한 다음 만들기 아래쪽 화살표를 선택하고 Web App을 선택합니다.
다음과 같이 기본 패널을 구성합니다.
- 이름: 고유 이름
- 게시: 컨테이너
- 운영 체제: Linux
-
지역:
azd provision
사용하여 선택한 지역과 동일한 지역 - Linux 계획: 새 App Service 요금제
컨테이너를 선택합니다. 다음과 같이 컨테이너 패널을 구성합니다.
- 사이드카 지원: 사용
- 이미지 원본: Azure Container Registry
-
레지스트리:
azd provision
에 의해 만들어진 레지스트리 - 이미지: nginx
- 태그: 최신
- 포트: 80
참고 항목
이러한 설정은 사이드카 사용 앱에서 다르게 구성됩니다. 자세한 내용은 사이드카 사용 사용자 지정 컨테이너의 차이점은 무엇인가요?를 참조하세요.
검토 + 생성를 선택한 다음, 생성를 선택합니다.
배포가 완료되면 리소스로 이동을 선택합니다.
새 브라우저 탭에서
https://<app-name>.azurewebsites.net
(으)로 이동하여 기본 Nginx 페이지를 확인합니다.
3. 사이드카 컨테이너 추가
이 섹션에서는 사용자 지정 컨테이너 앱에 사이드카 컨테이너를 추가합니다.
앱의 관리 페이지의 왼쪽 메뉴에서 배포 센터를 선택합니다.
배포 센터에는 앱의 모든 컨테이너가 표시됩니다. 지금은 기본 컨테이너만 있습니다.
추가를 선택하고 다음과 같이 새 컨테이너를 구성합니다.
- 이름: otel-collector
- 이미지 원본: Azure Container Registry
-
레지스트리:
azd provision
에 의해 만들어진 레지스트리 - 이미지: otel-collector
- 태그: 최신
적용을 선택합니다.
이제 배포 센터에 두 개의 컨테이너가 표시됩니다. 주 컨테이너는 Main으로 표시되고 사이드카 컨테이너는 사이드카로 표시됩니다. 각 앱에는 하나의 기본 컨테이너가 있어야 하지만 여러 사이드카 컨테이너가 있을 수 있습니다.
4. 환경 변수 구성
샘플 시나리오의 경우 otel-collector 사이드카는 OpenTelemetry 데이터를 Azure Monitor로 내보내도록 구성되지만 연결 문자열을 환경 변수로 지정해야 합니다(otel-collector 이미지 대한 OpenTelemetry 구성 파일 참조).
앱 설정을 구성하여 App Service 앱과 같은 컨테이너에 대한 환경 변수를 구성합니다. 앱 설정은 앱의 모든 컨테이너에서 액세스할 수 있습니다.
앱의 관리 페이지의 왼쪽 메뉴에서 환경 변수를 선택합니다.
다음과 같이 추가 및 구성을 선택하여 앱 설정을 추가합니다.
- 이름: APPLICATIONINSIGHTS_CONNECTION_STRING
-
값: 출력의
azd provision
연결 문자열. Cloud Shell 세션이 손실된 경우 Application Insight 리소스의 개요 페이지(연결 문자열)에서 찾을 수도 있습니다.
적용을 선택한 다음 적용한 다음 확인을 선택합니다.
참고 항목
특정 앱 설정은 사이드카 사용 앱에 적용되지 않습니다. 자세한 내용은 사이드카 사용 사용자 지정 컨테이너의 차이점은 무엇인가요?
5. Application Insights에서 확인
이제 otel-collector 사이드카가 Application Insights로 데이터를 내보내야 합니다.
https://<app-name>.azurewebsites.net
브라우저 탭으로 돌아가서 페이지를 몇 번 새로 고쳐 일부 웹 요청을 생성합니다.리소스 그룹 개요 페이지로 돌아가서 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 컨테이너는 볼륨 탑재를 사용할 수 없습니다.