진단 로그 - Azure Content Delivery Network
이 문서의 내용
Azure Portal에서 로깅을 사용하도록 설정
PowerShell을 통해 로깅을 사용하도록 설정
Azure Storage에서 진단 로그 사용
로그 데이터 지연
콘텐츠 배달 네트워크 핵심 분석을 위한 진단 로그 형식
추가 리소스
2개 더 표시
Azure 진단 로그를 통해 이제 핵심 분석을 보고 다음을 포함한 하나 이상의 대상에 저장할 수 있습니다.
Azure Storage 계정
Log Analytics 작업 영역
Azure Event Hubs
이 기능은 모든 가격 책정 계층의 콘텐츠 배달 네트워크 엔드포인트에서 사용할 수 있습니다.
진단 로그를 사용하면 기본 사용 현황 메트릭을 콘텐츠 배달 네트워크 엔드포인트에서 다양한 원본으로 내보내어 사용자 지정 방식으로 사용할 수 있습니다. 다음 유형의 데이터 내보내기를 수행할 수 있습니다.
데이터를 Blob Storage로 내보내고, CSV로 내보낸 후 Excel에서 그래프를 생성합니다.
데이터를 Event Hubs로 내보내고 다른 Azure 서비스의 데이터와 상관 관계를 설정합니다.
Azure Monitor 로그로 데이터를 내보내고 사용자의 Log Analytics 작업 영역에서 데이터를 확인합니다.
다음 단계에서 Azure Content Delivery Network 프로필이 필요합니다. 계속하기 전에 Azure Content Delivery Network 프로필 및 엔드포인트 만들기 를 참조하세요.
Azure Portal에서 로깅을 사용하도록 설정
다음 단계에 따라 Azure Content Delivery Network 엔드포인트에 대한 로깅을 사용하도록 설정합니다.
Azure Portal 에 로그인합니다.
Azure Portal에서 모든 리소스 >your-cdn-profile 로 이동합니다.
진단 로그를 사용할 콘텐츠 배달 네트워크 엔드포인트를 선택합니다.
모니터링 섹션에서 진단 로그 를 선택합니다.
Azure Storage에서 로깅을 사용하도록 설정
스토리지 계정을 사용하여 로그를 저장하려면 아래 단계를 따릅니다.
진단 설정 이름 에 진단 로그 설정의 이름을 입력합니다.
스토리지 계정에 보관 을 선택한 다음, CoreAnalytics 을 선택합니다.
보존(일) 의 경우 보존 일 수를 선택합니다. 0일의 보존 기간은 로그를 무기한 저장합니다.
로그에 사용할 구독 및 스토리지 계정을 선택합니다.
저장 을 선택합니다.
로그에 Log Analytics를 사용하려면 다음 단계를 수행합니다,
진단 설정 이름 에 진단 로그 설정의 이름을 입력합니다.
Log Analytics로 보내기 를 선택하고 CoreAnalytics 를 선택합니다.
로그에 사용할 구독 및 Log Analytics 작업 영역을 선택합니다.
저장 을 선택합니다.
로그에 이벤트 허브를 사용하려면 다음 단계를 수행합니다.
진단 설정 이름 에 진단 로그 설정의 이름을 입력합니다.
이벤트 허브로 스트리밍 을 선택한 다음 CoreAnalytics 를 선택합니다.
로그에 사용할 구독 및 이벤트 허브 네임스페이스를 선택합니다.
저장 을 선택합니다.
PowerShell을 통해 로깅을 사용하도록 설정
다음 예제는 Azure PowerShell Cmdlet을 통해 진단 로그를 사용하도록 설정하는 방법을 보여줍니다.
Azure PowerShell에 로그인합니다.
Connect-AzAccount
스토리지 계정에서 진단 로그를 사용하려면 다음 명령을 입력합니다. 변수를 사용자의 값으로 바꿉니다.
$rsg = <your-resource-group-name>
$cdnprofile = <your-cdn-profile-name>
$cdnendpoint = <your-cdn-endpoint-name>
$storageacct = <your-storage-account-name>
$diagname = <your-diagnostic-setting-name>
$cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint
$storage = Get-AzStorageAccount -ResourceGroupName $rsg -Name $storageacct
Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -StorageAccountId $storage.id -Enabled $true -Categories CoreAnalytics
Log Analytics 작업 영역에서 진단 로그 사용
Azure PowerShell에 로그인합니다.
Connect-AzAccount
Log Analytics 작업 영역에서 진단 로그를 사용하려면 다음 명령을 입력합니다. 변수를 사용자의 값으로 바꿉니다.
$rsg = <your-resource-group-name>
$cdnprofile = <your-cdn-profile-name>
$cdnendpoint = <your-cdn-endpoint-name>
$workspacename = <your-log-analytics-workspace-name>
$diagname = <your-diagnostic-setting-name>
$cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint
$workspace = Get-AzOperationalInsightsWorkspace -ResourceGroupName $rsg -Name $workspacename
Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -WorkspaceId $workspace.ResourceId -Enabled $true -Categories CoreAnalytics
Azure PowerShell에 로그인합니다.
Connect-AzAccount
Log Analytics 작업 영역에서 진단 로그를 사용하려면 다음 명령을 입력합니다. 변수를 사용자의 값으로 바꿉니다.
$rsg = <your-resource-group-name>
$cdnprofile = <your-cdn-profile-name>
$cdnendpoint = <your-cdn-endpoint-name>
$eventhubname = <your-event-hub-namespace-name>
$diagname = <your-diagnostic-setting-name>
$cdn = Get-AzCdnEndpoint -ResourceGroupName $rsg -ProfileName $cdnprofile -EndpointName $cdnendpoint
Set-AzDiagnosticSetting -Name $diagname -ResourceId $cdn.id -EventHubName $eventhubname -Enabled $true -Categories CoreAnalytics
이 섹션에서는 콘텐츠 배달 네트워크 핵심 분석의 스키마와 Azure Storage 계정의 조직에 대해 설명하고 로그를 CSV 파일로 다운로드하기 위한 샘플 코드를 제공합니다.
Microsoft Azure Storage Explorer 사용
도구를 다운로드하려면 Azure Storage Explorer 를 참조하세요. 소프트웨어를 다운로드하여 설치한 후에는 콘텐츠 배달 네트워크 진단 로그의 대상으로 구성된 동일한 Azure Storage 계정을 사용하도록 구성합니다.
Microsoft Azure Storage Explorer 를 엽니다.
스토리지 계정을 찾습니다.
이 스토리지 계정 아래의 Blob 컨테이너 노드를 확장합니다.
“insights-logs-coreanalytics” 라는 컨테이너를 선택합니다.
오른쪽 창에 결과가 표시되고 resourceId= 와 같은 첫 번째 수준에서 시작됩니다. PT1H.json 파일을 찾을 때까지 각 수준을 계속해서 선택합니다. 경로에 대한 설명은 Blob 경로 형식 을 참조하세요.
각 blob PT1H.json 파일은 특정 콘텐츠 배달 네트워크 엔드포인트 또는 사용자 지정 도메인에 대해 1시간 동안의 분석 로그를 표시합니다.
이 JSON 파일 콘텐츠의 스키마는 핵심 분석 로그의 스키마 섹션에 설명되어 있습니다.
핵심 분석 로그는 1시간 마다 생성되고 데이터는 JSON 페이로드로 단일 Azure blob 내부에 수집되고 저장됩니다. 스토리지 탐색기 도구는 '/'를 디렉터리 구분 기호로 해석하고 계층 구조를 표시합니다. Azure Blob에 대한 경로는 계층 구조가 있고 Blob 이름을 나타내는 것처럼 표시됩니다. blob의 이름은 다음 명명 규칙을 따릅니다.
resourceId=/SUBSCRIPTIONS/{Subscription Id}/RESOURCEGROUPS/{Resource Group Name}/PROVIDERS/MICROSOFT.CDN/PROFILES/{Profile Name}/ENDPOINTS/{Endpoint Name}/ y=/m=/d=/h=/m=/PT1H.json
필드 설명:
테이블 확장
값
설명
구독 ID
GUID(Globally Unique Identifier) 형식의 Azure 구독 ID.
리소스 그룹 이름
콘텐츠 배달 네트워크 리소스가 속한 리소스 그룹의 이름.
프로필 이름
콘텐츠 배달 네트워크 프로필의 이름
엔드포인트 이름
콘텐츠 배달 네트워크 엔드포인트의 이름
Year
4자리 연도 표시(예: 2017)입니다.
Month
2자리 월 표시입니다. 01=1월 ... 12=12월
요일
2자리 월의 일 표시입니다.
PT1H.json
분석 데이터가 저장되는 실제 JSON 파일입니다.
핵심 분석에 액세스할 수 있도록 도구 샘플 코드를 제공합니다. 이 도구를 사용하여 JSON 파일을 쉼표로 구분된 일반 파일 형식으로 다운로드한 다음, 차트를 만들거나 기타 집계를 수행하는 데 사용할 수 있습니다.
도구를 사용하는 방법은 다음과 같습니다.
GitHub 링크를 방문합니다. https://github.com/Azure-Samples/azure-cdn-samples/tree/master/CoreAnalytics-ExportToCsv
코드를 다운로드합니다.
지침에 따라 컴파일 및 구성합니다.
도구를 실행합니다.
결과 CSV 파일은 분석 데이터를 간단한 평면 계층으로 표시합니다.
다음 표에서는 Microsoft의 Azure CDN Standard 및 Edgio의 Azure CDN Standard/Premium 에 대한 로그 데이터 지연을 보여 줍니다.
테이블 확장
Microsoft 로그 데이터 지연
Edgio 로그 데이터 지연
1시간 지연됩니다.
1시간 지연되고, 엔드포인트 전파가 완료된 후 나타날 때까지 최대 2시간이 걸릴 수 있습니다.
콘텐츠 배달 네트워크 핵심 분석을 위한 진단 로그 형식
현재 Microsoft는 콘텐츠 배달 네트워크 POP/Edge에서 볼 수 있는 HTTP 응답 통계 및 송신 통계를 보여주는 메트릭이 포함된 핵심 분석 로그만 제공합니다.
다음 표에서는 각 공급자에 대한 핵심 분석 로그에서 사용할 수 있는 메트릭의 목록을 보여 줍니다.
Microsoft의 Azure CDN 표준
Edgio의 Azure CDN Standard/Premium
모든 공급자의 모든 메트릭을 사용할 수 있는 것은 아니지만 이러한 차이는 미미합니다. 이 표에는 지정된 메트릭을 공급자에서 사용할 수 있는지 여부도 나와 있습니다. 메트릭은 트래픽이 있는 해당 콘텐츠 배달 네트워크 엔드포인트에만 사용할 수 있습니다.
테이블 확장
메트릭
설명
Microsoft
에지오
RequestCountTotal
이 기간 동안의 요청 적중의 총 수입니다.
예
예
RequestCountHttpStatus2xx
2xx HTTP 코드(예: 200, 202)를 생성한 모든 요청의 수입니다.
예
예
RequestCountHttpStatus3xx
3xx HTTP 코드(예: 300, 302)를 생성한 모든 요청의 수입니다.
예
예
RequestCountHttpStatus4xx
4xx HTTP 코드(예: 400, 404)를 생성한 모든 요청의 수입니다.
예
예
RequestCountHttpStatus5xx
5xx HTTP 코드(예: 500, 504)를 생성한 모든 요청의 수입니다.
예
예
RequestCountHttpStatusOthers
다른 모든 HTTP 코드의 수(2xx-5xx 이외)입니다.
예
예
RequestCountHttpStatus200
200 HTTP 코드 응답을 생성한 모든 요청의 수입니다.
예
아니요
RequestCountHttpStatus206
206 HTTP 코드 응답을 생성한 모든 요청의 수입니다.
예
아니요
RequestCountHttpStatus302
302 HTTP 코드 응답을 생성한 모든 요청의 수입니다.
예
아니요
RequestCountHttpStatus304
304 HTTP 코드 응답을 생성한 모든 요청의 수입니다.
예
아니요
RequestCountHttpStatus404
404 HTTP 코드 응답을 생성한 모든 요청의 수입니다.
예
아니요
RequestCountCacheHit
캐시 적중을 발생한 모든 요청의 수. 자산이 POP에서 클라이언트로 직접 제공되었습니다.
예
예
RequestCountCacheMiss
캐시 누락을 발생한 모든 요청의 수. 캐시 누락은 자산을 클라이언트에 가장 가까운 POP에서 찾을 수 없어 원본에서 검색되었음을 의미합니다.
예
예
RequestCountCacheNoCache
Edge의 사용자 구성 때문에 캐시되지 못한 자산에 대한 모든 요청의 수.
예
예
RequestCountCacheUncacheable
자산의 Cache-Control 및/또는 Expires 헤더 때문에 캐시되지 못하는 자산에 대한 모든 요청의 수. 이 수는 POP에서 또는 HTTP 클라이언트에 의해 캐시되지 않아야 함을 나타냅니다.
예
예
RequestCountCacheOthers
앞서 나열된 메트릭에 포함되지 않는 캐시 상태를 갖는 모든 요청의 수.
예
예
EgressTotal
아웃바운드 데이터 전송(GB)
예
예
EgressHttpStatus2xx
2xx HTTP 상태 코드를 나타내는 응답에 대한 아웃바운드 데이터 전송(GB)입니다.*
예
예
EgressHttpStatus3xx
3xx HTTP 상태 코드를 나타내는 응답에 대한 아웃바운드 데이터 전송(GB)입니다.
예
예
EgressHttpStatus4xx
4xx HTTP 상태 코드를 나타내는 응답에 대한 아웃바운드 데이터 전송(GB)입니다.
예
예
EgressHttpStatus5xx
5xx HTTP 상태 코드를 나타내는 응답에 대한 아웃바운드 데이터 전송(GB)입니다.
예
예
EgressHttpStatusOthers
다른 HTTP 상태 코드를 나타내는 응답에 대한 아웃바운드 데이터 전송(GB)입니다.
예
예
EgressCacheHit
콘텐츠 배달 네트워크 POP/Edge의 콘텐츠 배달 네트워크 캐시에서 직접 전달된 응답에 대한 아웃바운드 데이터 전송.
예
예
EgressCacheMiss.
가장 가까운 POP 서버에 없으며 원본 서버에서 검색된 응답에 대한 아웃바운드 데이터 전송입니다.
예
예
EgressCacheNoCache
엣지의 사용자 구성 때문에 캐시되지 못한 자산에 대한 아웃바운드 데이터 전송.
예
예
EgressCacheUncacheable
자산의 Cache-Control 및/또는 Expires 헤더 때문에 캐시되지 못하는 자산에 대한 아웃바운드 데이터 전송. POP에서 또는 HTTP 클라이언트에 의해 캐시되지 않아야 함을 나타냅니다.
예
예
EgressCacheOthers
다른 캐시 시나리오에 대한 아웃바운드 데이터 전송
예
예
* 아웃바운드 데이터 전송은 콘텐츠 배달 네트워크 POP 서버에서 클라이언트로 전달되는 트래픽을 나타냅니다.
모든 로그는 JSON 형식으로 저장되며 각 항목에는 다음 스키마에 따른 문자열 필드가 있습니다.
"records": [
{
"time": "2017-04-27T01:00:00",
"resourceId": "<ARM Resource Id of the CDN Endpoint>",
"operationName": "Microsoft.Cdn/profiles/endpoints/contentDelivery",
"category": "CoreAnalytics",
"properties": {
"DomainName": "<Name of the domain for which the statistics is reported>",
"RequestCountTotal": integer value,
"RequestCountHttpStatus2xx": integer value,
"RequestCountHttpStatus3xx": integer value,
"RequestCountHttpStatus4xx": integer value,
"RequestCountHttpStatus5xx": integer value,
"RequestCountHttpStatusOthers": integer value,
"RequestCountHttpStatus200": integer value,
"RequestCountHttpStatus206": integer value,
"RequestCountHttpStatus302": integer value,
"RequestCountHttpStatus304": integer value,
"RequestCountHttpStatus404": integer value,
"RequestCountCacheHit": integer value,
"RequestCountCacheMiss": integer value,
"RequestCountCacheNoCache": integer value,
"RequestCountCacheUncacheable": integer value,
"RequestCountCacheOthers": integer value,
"EgressTotal": double value,
"EgressHttpStatus2xx": double value,
"EgressHttpStatus3xx": double value,
"EgressHttpStatus4xx": double value,
"EgressHttpStatus5xx": double value,
"EgressHttpStatusOthers": double value,
"EgressCacheHit": double value,
"EgressCacheMiss": double value,
"EgressCacheNoCache": double value,
"EgressCacheUncacheable": double value,
"EgressCacheOthers": double value,
}
}
]
}
여기서 time 은 통계가 보고되는 시간 범위의 시작 시간을 나타냅니다. 콘텐츠 배달 네트워크 공급자가 지원하지 않는 메트릭에는 실수 값 또는 정수 값 대신 null 값이 사용됩니다. 이 null 값은 메트릭이 없음을 나타내며 값 0과는 다릅니다. 도메인별로 이러한 메트릭 집합 하나가 엔드포인트에 구성됩니다.
예제 속성은 다음과 같습니다.
{
"DomainName": "azurecdntest.azureedge.net",
"RequestCountTotal": 480,
"RequestCountHttpStatus2xx": 480,
"RequestCountHttpStatus3xx": 0,
"RequestCountHttpStatus4xx": 0,
"RequestCountHttpStatus5xx": 0,
"RequestCountHttpStatusOthers": 0,
"RequestCountHttpStatus200": 480,
"RequestCountHttpStatus206": 0,
"RequestCountHttpStatus302": 0,
"RequestCountHttpStatus304": 0,
"RequestCountHttpStatus404": 0,
"RequestCountCacheHit": null,
"RequestCountCacheMiss": null,
"RequestCountCacheNoCache": null,
"RequestCountCacheUncacheable": null,
"RequestCountCacheOthers": null,
"EgressTotal": 0.09,
"EgressHttpStatus2xx": null,
"EgressHttpStatus3xx": null,
"EgressHttpStatus4xx": null,
"EgressHttpStatus5xx": null,
"EgressHttpStatusOthers": null,
"EgressCacheHit": null,
"EgressCacheMiss": null,
"EgressCacheNoCache": null,
"EgressCacheUncacheable": null,
"EgressCacheOthers": null
}