Azure CLI에서 에이전트 기반 오류를 사용하는 카오스 실험 만들기
카오스 실험을 사용하여 제어된 환경에서 이러한 오류를 발생시켜 애플리케이션이 오류에 대해 복원력이 있는지 확인할 수 있습니다. 이 문서에서는 Chaos 실험과 Azure Chaos Studio를 사용하여 Linux VM(가상 머신)에서 높은 CPU 사용률 이벤트를 발생시킵니다. 이 실험을 실행하면 애플리케이션이 리소스가 부족해지는 것을 방지할 수 있습니다.
이러한 동일한 단계를 사용하여 에이전트 기반 오류에 대한 실험을 설정하고 실행할 수 있습니다. 에이전트 기반 오류에는 카오스 에이전트를 설치해야 합니다. 서비스 직접 오류는 계측할 필요 없이 Azure 리소스에 대해 직접 실행됩니다.
필수 구성 요소
- Azure 구독 Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
- 버전 호환성 목록에 있는 운영 체제를 실행하는 가상 머신입니다. VM이 없는 경우 새로 만들 수 있습니다.
- VM에 SSH를 연결할 수 있는 네트워크 설정입니다.
- 사용자가 할당한 관리 ID. 사용자 할당 관리 ID가 아직 없는 경우 새로 만들 수 있습니다.
‘Azure Cloud Shell 열기’
Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.
Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보기를 선택합니다. Bash로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 열 수도 있습니다. 복사를 선택하여 코드 블록을 복사하고 Cloud Shell에 붙여넣은 다음 입력을 선택하여 실행합니다.
이 자습서에서 CLI를 로컬로 설치하여 사용하려면 Azure CLI 버전 2.0.30 이상이 필요합니다. az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
참고 항목
이러한 지침에서는 Cloud Shell의 Bash 터미널을 사용합니다. CLI를 로컬로 실행하거나 PowerShell 터미널에서 실행하는 경우 일부 명령이 설명대로 작동하지 않을 수 있습니다.
가상 머신에 관리 ID 할당
VM에서 Chaos Studio를 설정하기 전에 에이전트를 설치하려는 각 VM 또는 가상 머신 확장 집합에 사용자 할당 관리 ID를 할당합니다. az vm identity assign
또는 az vmss identity assign
명령을 사용합니다. $VM_RESOURCE_ID
/$VMSS_RESOURCE_ID
를 카오스 대상으로 추가하는 VM의 리소스 ID로 바꿉니다. $MANAGED_IDENTITY_RESOURCE_ID
를 사용자 할당 관리 ID의 리소스 ID로 바꿉니다.
가상 머신
az vm identity assign --ids $VM_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
가상 머신 크기 집합
az vmss identity assign --ids $VMSS_RESOURCE_ID --identities $MANAGED_IDENTITY_RESOURCE_ID
가상 머신에서 Chaos Studio 사용
Chaos Studio는 VM이 Chaos Studio에 먼저 추가되지 않는 한 VM에 오류를 삽입할 수 없습니다. Chaos Studio에 VM을 추가하려면 리소스에 대상 및 기능을 만듭니다. 그런 다음, 카오스 에이전트를 설치합니다.
가상 머신에는 두 가지 대상 유형이 있습니다. 하나의 대상 유형은 서비스 직접 오류를 사용하도록 설정합니다(에이전트가 필요하지 않은 경우). 다른 대상 유형은 에이전트 기반 오류를 사용하도록 설정합니다(에이전트 설치가 필요한 경우). 카오스 에이전트는 VM 확장으로 VM에 설치된 애플리케이션입니다. 게스트 운영 체제에 오류를 삽입하는 데 사용합니다.
카오스 대상 및 기능 사용
다음으로, 에이전트가 Chaos Studio에 연결하는 데 사용하는 사용자 할당 관리 ID를 지정하는 각 VM 또는 가상 머신 확장 집합에 Microsoft-Agent 대상을 설정합니다. 이 예제에서는 모든 VM에 대해 하나의 관리 ID를 사용합니다. 대상은 REST API를 통해 만들어야 합니다. 이 예제에서는 az rest
CLI 명령을 사용하여 REST API 호출을 실행합니다.
$USER_IDENTITY_CLIENT_ID
를 관리 ID의 클라이언트 ID로 바꿔서 다음 JSON을 수정합니다. 사용자가 만든 사용자 할당 관리 ID의 Azure Portal 개요에서 클라이언트 ID를 찾을 수 있습니다.$USER_IDENTITY_TENANT_ID
를 Azure 테넌트 ID로 바꿉니다. Azure Portal의 테넌트 정보 아래의 Microsoft Entra ID에서 찾을 수 있습니다. Azure CLI를 실행하는 위치와 동일한 위치에 JSON을 파일로 저장합니다. Cloud Shell에서 JSON 파일을 끌어서 놓아 업로드할 수 있습니다.{ "properties": { "identities": [ { "clientId": "$USER_IDENTITY_CLIENT_ID", "tenantId": "$USER_IDENTITY_TENANT_ID", "type": "AzureManagedIdentity" } ] } }
$RESOURCE_ID
를 대상 VM 또는 가상 머신 확장 집합의 리소스 ID로 바꿔 대상을 만듭니다.target.json
을 이전 단계에서 만든 JSON 파일의 이름으로 바꿉니다.az rest --method put --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01 --body @target.json --query properties.agentProfileId -o tsv
PowerShell 구문 분석 오류가 발생하는 경우 이 자습서에 권장되는 대로 Bash 터미널로 전환하거나 참조된 JSON 파일을 작은따옴표(
--body '@target.json'
)로 묶습니다.이후 단계에서 사용하기 위해 이 명령에서 반환한 agentProfileId의 GUID를 기록합니다.
$RESOURCE_ID
를 대상 VM 또는 가상 머신 확장 집합의 리소스 ID로 바꿔 기능을 만듭니다.$CAPABILITY
를 사용하려는 오류 기능의 이름으로 바꿉니다(예:CPUPressure-1.0
).az rest --method put --url "https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/$CAPABILITY?api-version=2023-11-01" --body "{\"properties\":{}}"
예를 들어 CPU 압력 기능을 사용하도록 설정하는 경우:
az rest --method put --url "https://management.azure.com/subscriptions/b65f2fec-d6b2-4edd-817e-9339d8c01dc4/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myVM/providers/Microsoft.Chaos/targets/Microsoft-Agent/capabilities/CPUPressure-1.0?api-version=2023-11-01" --body "{\"properties\":{}}"
Chaos Studio 가상 머신 확장 설치
카오스 에이전트는 VM 또는 가상 머신 확장 집합 인스턴스에서 에이전트 기반 오류를 실행하는 애플리케이션입니다. 설치하는 동안 다음을 구성합니다.
- 에이전트가 Chaos Studio에 인증하는 데 사용해야 하는 관리 ID가 있는 에이전트입니다.
- 사용자가 만든 Microsoft-Agent 대상의 프로필 ID입니다.
- 필요에 따라 에이전트가 Application Insights에 진단 이벤트를 보낼 수 있도록 하는 Application Insights 계측 키입니다.
시작하기 전에 다음 세부 정보가 있는지 확인합니다.
- agentProfileId: 대상을 만들 때 반환되는 속성입니다. 이 속성이 없는 경우
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
를 실행하고agentProfileId
속성을 복사하면 됩니다. - ClientId: 대상에 사용되는 사용자가 할당한 관리 ID의 클라이언트 ID입니다. 이 속성이 없는 경우
az rest --method get --uri https://management.azure.com/$RESOURCE_ID/providers/Microsoft.Chaos/targets/Microsoft-Agent?api-version=2023-11-01
를 실행하고clientId
속성을 복사하면 됩니다. - (선택 사항) AppInsightsKey: Application Insights 구성 요소의 계측 키로, 포털의 Application Insights 페이지에 있는 Essentials에서 찾을 수 있습니다.
- agentProfileId: 대상을 만들 때 반환되는 속성입니다. 이 속성이 없는 경우
Chaos Studio VM 확장을 설치합니다.
$VM_RESOURCE_ID
를 VM의 리소스 ID로 바꾸거나$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$VMSS_NAME
을 가상 머신 확장 집합의 속성으로 바꿉니다.$AGENT_PROFILE_ID
를 에이전트 프로필 ID로 바꿉니다.$USER_IDENTITY_CLIENT_ID
를 관리 ID의 클라이언트 ID로 바꿉니다.$APP_INSIGHTS_KEY
를 Application Insights 계측 키로 바꿉니다. Application Insights를 사용하지 않는 경우 해당 키/값 쌍을 제거합니다.기본 에이전트 가상 머신 확장 구성의 전체 목록
다음은 사용자가 요구하는 최소 에이전트 vm 확장 구성입니다.
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID" }
다음은 에이전트 vm 확장 구성에 대한 모든 값입니다.
{ "profile": "$AGENT_PROFILE_ID", "auth.msi.clientid": "$USER_IDENTITY_CLIENT_ID", "appinsightskey": "$APP_INSIGHTS_KEY", "overrides": { "region": string, default to be null "logLevel": { "default" : string , default to be Information }, "checkCertRevocation": boolean, default to be false. } }
가상 머신에 에이전트 설치
Windows
az vm extension set --ids $VM_RESOURCE_ID --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vm extension set --ids $VM_RESOURCE_ID --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
가상 머신 확장 집합에 에이전트 설치
Windows
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosWindowsAgent --publisher Microsoft.Azure.Chaos --version 1.1 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
Linux
az vmss extension set --subscription $SUBSCRIPTION_ID --resource-group $RESOURCE_GROUP --vmss-name $VMSS_NAME --name ChaosLinuxAgent --publisher Microsoft.Azure.Chaos --version 1.0 --settings '{"profile": "$AGENT_PROFILE_ID", "auth.msi.clientid":"$USER_IDENTITY_CLIENT_ID", "appinsightskey":"$APP_INSIGHTS_KEY","Overrides":{"CheckCertRevocation":true}}'
가상 머신 확장 집합을 설정하는 경우 인스턴스가 최신 모델로 업그레이드되었는지 확인합니다. 필요한 경우 모델의 모든 인스턴스를 업그레이드합니다.
az vmss update-instances -g $RESOURCE_GROUP -n $VMSS_NAME --instance-ids *
실험 만들기
VM을 성공적으로 배포한 후 이제 실험을 만들 수 있습니다. 카오스 실험은 대상 리소스에 대해 수행하려는 작업을 정의합니다. 작업은 순차적 단계로 구성되고 실행됩니다. 카오스 실험은 병렬로 실행되는 분기에 대해 수행하려는 작업도 정의합니다.
다음 JSON 샘플부터 실험 JSON을 작성합니다. 실험 만들기 API 및 오류 라이브러리를 사용하여 실행할 실험과 일치하도록 JSON을 수정합니다.
{ "identity": { "type": "SystemAssigned" }, "location": "centralus", "properties": { "selectors": [ { "id": "Selector1", "targets": [ { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myWindowsVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" }, { "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.Compute/virtualMachines/myLinuxVM/providers/Microsoft.Chaos/targets/Microsoft-Agent", "type": "ChaosTarget" } ], "type": "List" } ], "steps": [ { "branches": [ { "actions": [ { "duration": "PT10M", "name": "urn:csci:microsoft:agent:cpuPressure/1.0", "parameters": [ { "key": "pressureLevel", "value": "95" } ], "selectorId": "Selector1", "type": "continuous" } ], "name": "Branch 1" } ], "name": "Step 1" } ] } }
가상 머신 확장 집합에 대해 실행하는 경우 대상에 인스턴스 번호를 포함하도록 오류 매개 변수를 수정합니다.
"parameters": [ { "key": "pressureLevel", "value": "95" }, { "key": "virtualMachineScaleSetInstances", "value": "[0,1,2]" } ]
가상 머신 확장 집합으로 이동하고 인스턴스를 선택하여 Azure Portal에서 확장 집합 인스턴스 번호를 식별할 수 있습니다. 인스턴스 이름은 인스턴스 번호로 끝납니다.
Azure CLI를 사용하여 실험을 만듭니다.
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$EXPERIMENT_NAME
을 실험에 맞는 속성으로 바꿉니다. 실험 JSON을 저장하고 업로드했는지 확인합니다. JSON 파일 이름으로experiment.json
을 업데이트합니다.az rest --method put --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME?api-version=2023-11-01 --body @experiment.json
각 실험에서 해당 시스템이 할당한 관리 ID를 만듭니다. 다음 단계에 대한 응답에서 이 ID의 보안 주체 ID를 기록해 둡니다.
가상 머신에 실험 권한 부여
카오스 실험을 만들 때 Chaos Studio는 대상 리소스에 대해 오류를 실행하는 시스템이 할당한 관리 ID를 만듭니다. 실험을 성공적으로 실행하려면 이 ID에 대상 리소스에 대한 적절한 권한을 부여해야 합니다. 에이전트 기반 오류에는 읽기 권한자 역할이 필요합니다. */읽기 권한이 없는 다른 역할(예: Virtual Machine 기여자)은 에이전트 기반 오류에 대한 적절한 권한을 부여하지 않습니다.
다음 명령을 사용하여 실험에 VM 또는 가상 머신 확장 집합에 대한 액세스 권한을 부여합니다. $EXPERIMENT_PRINCIPAL_ID
를 이전 단계의 보안 주체 ID로 바꿉니다. $RESOURCE_ID
를 대상 VM 또는 가상 머신 확장 집합의 리소스 ID로 바꿉니다. 실험 정의에 사용되는 카오스 에이전트의 리소스 ID가 아니라 VM의 리소스 ID를 사용해야 합니다. 실험에서 대상으로 하는 각 VM 또는 가상 머신 확장 집합에 대해 이 명령을 실행합니다.
az role assignment create --role "Reader" --assignee-principal-type "ServicePrincipal" --assignee-object-id $EXPERIMENT_PRINCIPAL_ID --scope $RESOURCE_ID
실험 실행
이제 실험을 실행할 준비가 되었습니다. 효과를 확인하려면 별도의 브라우저 탭에서 VM의 CPU 압력을 사용하여 Azure Monitor 메트릭 차트를 여는 것이 좋습니다.
Azure CLI를 사용하여 실험을 시작합니다.
$SUBSCRIPTION_ID
,$RESOURCE_GROUP
및$EXPERIMENT_NAME
을 실험에 맞는 속성으로 바꿉니다.az rest --method post --uri https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Chaos/experiments/$EXPERIMENT_NAME/start?api-version=2023-11-01
응답에는 실험이 실행될 때 실험 상태를 쿼리하는 데 사용할 수 있는 상태 URL이 포함됩니다.
다음 단계
에이전트 기반 실험을 실행했으므로 다음을 수행할 준비가 되었습니다.