BLOG

[실습 예제] AWS Elemental MediaStore 액세스 로그로 Live Streaming CloudWatch 대시 보드 생성하기
작성일: 2020-02-12

 고객들은 AWS Elemental MediaStore를 클라우드의 고성능 라이브 비디오를 기점으로 하여, 라이브 스트리밍 워크 플로우를 구축합니다. 하지만 라이브 스트리밍 비디오를 모니터링하는 경우 고객은 AWS Elemental MediaStore 액세스 로그를 사용하여 Amazon CloudWatch 대시보드를 만드는 것이 약간 어려울 수 있습니다.

 

일단, AWS Elemental MeidaStore는 액세스 로그를 게재하지 않습니다. 따라서 고객은 container에서 액세스 로깅을 활성화해야 합니다. MediaStore는 container에 저장된 객체에 대한 액세스 로그를 Amazon CloudWatch에 전달합니다. 액세스 로그는 객체 정보, 요청 유형, 또는 객체 액세스 요청 그리고 처리된 날짜와 시간을 포함하여 자세한 정보를 제공합니다.

 

오늘 포스팅으론 Amazon CloudWatch를 사용하여 모니터링 MediaStore에서 라이브 비디오 스트리밍에 대한 대시 보드를 생성하고, 라이브 스트리밍 송수신 상태를 모니터링하며, 발생할 수 있는 이슈에 대한 인사이트를 얻는 방법들을 예제를 통해 설명 드리고자 합니다.

 

  • MediaStore 액세스 로그에 대한 자세한 내용은 아래 링크를 통해 확인 부탁 드립니다.:

https://docs.aws.amazon.com/mediastore/latest/ug/monitoring-cloudwatch-logs-enable.html

  • 라이브 비디오를 MediaStore로 전달하는 것에 대하여 자세한 내용은 아래 링크를 확인 부탁드립니다.

https://aws.amazon.com/blogs/media/part1-how-to-send-live-video-to-aws-elemental-mediastore/

 

오늘 내용은 말이죠!

  • 완독 소요시간: 9분
  • 예제 실습 소요시간: 30분
  • 단계: 심화(300)
  • 사용된 서비스: AWS Elemental MediaStore, Amazon CloudWatch

 

시작하기 전에 앞서..

이 솔루션을 가지고 라이브 스트리밍 CloudWatch 대시 보드를 구축하여 초당 transaction을 포함한 비디오 스트리밍 수신 및 송신 특성과 HTTP 200 OK/400/ 500과 같은 HTTP 상태 코드를 기반으로 하는 MediaStore 관찰 작업 지연 시간을 모니터링할 수 있습니다.

 

그럼 실습해볼까요?

첫 번째로, MediaStore을 기반으로 라이브 채널을 생성한 후 플레이어를 시작하여 MediaStore에서 직접 라이브 스트리밍을 재생하고 송신 트래픽을 생성하십시오. 다음으로는 MediaStore 액세스 로그와 CloudWatch를 사용하여 송, 수신 모니터링 대시 보드를 생성하십시오.

 

전제조건

연습하기 위해 다음과 같은 준비물이 필요합니다.

  • AWS 계정
  • 라이브 스트리밍을 AWS Elemental MediaStore 로 푸시하거나 또는 AWS Elemental MediaStore로 스트리밍 할 수 있는 AWS Elemental Live 와 같은 인코더
  • HLS 스트리밍을 플레이 할 수 있는 HLS 플레이어

 

MediaStore and Live Stream 설정

첫 번째로, 라이브 채널을 호스팅할 container를 설정하십시오. Container 이름은 ‘mediastore_live’ 로 설정하고, 라이브 스트리밍은 /<channel_name>/main/index.m3u8. 구조를 따라줍니다. 본 예제에서 라이브 채널의 경로는 /channel1/main/index.m3u8. 입니다.

 

MediaStore container가 생성되고 난 후에는 MediaStore에 ‘mediastore_live’ 이름을 클릭하여 액세스 로깅을 활성화 시키고 다음 페이지의 “Enable access logging”버튼을 클릭하십시오. 그 다음에는 팝업 창에서 “Enable access logging” 버튼을 클릭합니다.

 

MediaStore 에서 직접 라이브 스트리밍을 재생하고 HTTP/S 액세스를 활성화 하려면 “Container policy” 섹션에서 “Edit policy” 버튼을 클릭하십시오. 그 후 텍스트를 복사하여 편집 텍스트 박스에 붙여 넣기 한 뒤, “Resource” ARN을 container 설정에 맞게 수정하십시오.

{

“Version” : “2012-10-17”,

“Statement” : [ {

“Sid” : “MediaStoreFullAccess”,

“Effect” : “Allow”,

“Principal” : {

“AWS” : “arn:aws:iam::xxxxxxxxxxxx:root”

},

“Action” : “mediastore:*”,

“Resource” : “arn:aws:mediastore:us-west-2:xxxxxxxxxxxx:container/mediastore_live/*”,

“Condition” : {

“Bool” : {

“aws:SecureTransport” : “true”

}

}

}, {

“Sid” : “PublicReadOverHttpOrHttps”,

“Effect” : “Allow”,

“Principal” : “*”,

“Action” : [ “mediastore:GetObject”, “mediastore:DescribeObject” ],

“Resource” : “arn:aws:mediastore:us-west-2:xxxxxxxxxxxx:container/mediastore_live/*”,

“Condition” : {

“Bool” : {

“aws:SecureTransport” : [ “true”, “false” ]

}

}

} ]

}

 

“Container CORS policy” 섹션에서 “Edit CORS Policy” 버튼을 클릭하고 다음 텍스트를 편집 텍스트 박스에 복사하여 붙여 넣고 저장버튼을 누르십시오.

[

{

“AllowedHeaders”: [

“*”

],

“AllowedMethods”: [

“GET”,

“HEAD”

],

“AllowedOrigins”: [

“*”

],

“ExposeHeaders”: [

“*”

],

“MaxAgeSeconds”: 3000

}

]

 

다음으로는, AWS Elemental MediaLive를 사용하여 AWS Elemental MediaStore로 라이브 스트리밍을 구성하십시오. 더 자세한 내용은 이전 블로그 포스팅 “How to Send Live Video to AWS Elemental MediaStore”을 참고해 주시면 감사하겠습니다

 

Stream Ingest 대시보드

모니터링 라이브 스트리밍의 가장 중요한 측면 중 하나는 오리진으로 입수(ingest) 된 스트리밍의 상태입니다. MediaStore 액세스 로그는 MediaStore containers 로의 라이브 스트리밍 수집에 대한 깊은 인사이트를 제공합니다.

 

MediaStore에는 Container 작업(reference 참조: here)인 GetObject, PutObject 그리고 DeleteObject에는 기본 소프트 제한이 있습니다. 라이브 스트리밍 작업을 모니터하고 container의 작업 제한에 걸리지 않는지 항상 확인해야 합니다. 또한 라이브 스트리밍의 특성을 이해하고 한도 증가 요청 같은 사전 대책을 강구하는 것이 중요합니다.

 

AWS 관리 콘솔에서 CloudWatch 서비스를 선택하고, 로그를 선택한 다음 Insight를 선택하십시오. 상단 드롭 다운 박스에서 사용한 container인 /aws/mediastore/mediastore_live 를 검색합니다. 다음 스텝으로는 아래의 텍스트를 복사한 뒤에 편집 텍스트 박스에 붙여 넣고 쿼리 실행 버튼을 클릭합니다. 랜더링 그래프를 보려면 Visualizaiton 탭을 클릭하십시오.

 

fields @message

| filter (Path like “/channel1/main”) and (Operation=”PutObject”)

| stats count(*) as TPM by bin(1m)

 

위의 쿼리는 경로에서 ‘/channel1/main’이 있는 모든 로그 메시지를 “Put Object”의 작업 유형과 함께 찾고 매 분마다 총 Put 작업 수를 계산하는 작업입니다.

 

다음으로는, “Actions” 버튼을 클릭하여 “Add to Dashboard” 항목을 선택한 후에 새로운 대시 보드 링크 생성을 누르시고 “mediastore_live” 라고 이름을 부여한 뒤 확인 표시를 누르십시오. 그리고 나서, Line widget type을 선택하시고 widget 제목으로 “mediastore_live”를 입력하신 뒤에 우측 하단에 있는 “Add to dashboard” 버튼을 클릭해 줍니다.

 

CloudWatch 대시 보드에서 방금 전에 새로 생성했던 mediastore_live 대시 보드를 선택하십시오. “Actions” 버튼을 클릭 하고 “View/edit source” 메뉴를 선택하시면 대시 보드 소스 텍스트 편집 상자가 나타날 것입니다. 모든 텍스트를 아래 택스트로 바꾸어주십시오. JSON 구조에 따라, 나중에 개별 widget 텍스트 블록 추가방법을 배울 수 있습니다. 완료가 다 되었다면 “Update”버튼을 눌러주십시오.

{

“widgets”: [

{

“type”: “log”,

“x”: 0,

“y”: 0,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | fields @message\n| filter (Path like \”/channel1/main\”) and (Operation=\”PutObject\”)\n| stats count(*) as TPM by bin(1m)”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “mediastore_live channel1 TPM (Transaction Per Minute)”,

“view”: “timeSeries”

}

},

{

“type”: “log”,

“x”: 0,

“y”: 6,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter HTTPStatus like /2\\d{2}/ and Operation=\”PutObject\” | stats avg(TurnAroundTime), avg(TotalTime), percentile(TurnAroundTime, 99), percentile(TotalTime, 99) by bin(1m)”,

“region”: “us-west-2”,

“stacked”: false,

“view”: “timeSeries”,

“title”: “PutObject Latencies (Successful Requests)”

}

}

]

}

 

두 번째 widget 모니터 PutObject 작업 대기 시간을 모니터링 합니다. 그래프에서 높은 그래프는 작업 대기 시간이 긴 것을 의미하며 이는 잠재적 문제를 일으킬 수 있기 때문에 확인해 볼 필요가 있습니다.

 

다음 단계는, MediaStore container를 통하여 HTTP 상태 코드 2xx, 4xx 그리고 5xx를 모니터링 하는 widget을 생성하는 것입니다.

 

Mediastore_live 대시 보드를 선택하고 다음 widget 블록을 JSON 파일의 올바른 위치에 복사/ 붙여 넣기 하십시오. 그런 다음, 업데이트 버튼을 줄러주면 2xx, 4xx, 그리고 5xx에 대한 응답 코드와 함께 HTTP 작업을 보여주는 widget이 생깁니다.

{

“type”: “log”,

“x”: 12,

“y”: 12,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter (Path like \”/channel1/main\”)\n| filter HTTPStatus like /2\\d{2}/ \n| filter Operation=\”GetObject\”\n| stats count() as `2xx Count` by Operation | sort `2xx Count` desc”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “2xx Status Count by Operation”,

“view”: “table”

}

},

{

“type”: “log”,

“x”: 12,

“y”: 18,

“width”: 6,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter (Path like \”/channel1/main\”)\n| filter HTTPStatus like /4\\d{2}/ \n| filter Operation = \”GetObject\”\n| stats count() as `4xx Count` by Operation”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “4xx Status Count by Operation”,

“view”: “table”

}

},

{

“type”: “log”,

“x”: 18,

“y”: 18,

“width”: 6,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter (Path like \”/channel1/main\”)\n| filter HTTPStatus like /5\\d{2}/ \n| filter Operation = \”GetObject\”\n| stats count() as `5xx Count` by Operation”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “5xx Status Count by Operation”,

“view”: “table”

}

}

 

아래의 이미지는 2xx, 4xx 그리고 5xx 상태 코드 대시 보드의 스크린 샷입니다.

(이미지3)

위의 예시는 MediaStore 액세스 로그를 사용하여 라이브 비디오 스트리밍 상태를 모니터링 하는 대시 보드를 만드는 방법에 대한 결론 입니다. 다음으로 작업의 송신을 모니터링 하는 대시 보드를 생성해 보겠습니다.

 

스트리밍 송신 대시 보드

MediaStore가 라이브 origin에서 사용되므로 일반적인 송신 작업은 클라이언트가 라이브 비디오를 시청할 때 stream segments 그리고 manifest files을 요청하는 CDN 또는 여러 CDN에서 발생합니다.

 

스트리밍 수신 대시 보드 생성 단계와 비슷하게 CloudWatch로 이동하여 mediastre_live 대시 보드를 선택한 후 “Actions” 버튼을 클릭하고 “View/edit source”를 선택하십시오. 아래의 JSON 텍스트를 복사하여 편집 텍스트 상자의 적절한 위치에 배치합니다오.  JSON 파일의 올바른 명령어를 확실히 하기 위해 콤마를 추가해 줍니다.

{

“type”: “log”,

“x”: 12,

“y”: 0,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | fields @message\n| filter Path like \”/channel1/main/\”\n| filter Operation=\”GetObject\”\n| stats count(*) by bin(5m)\n”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “mediastore_live channel1 Egress TPS”,

“view”: “timeSeries”

}

},

{

“type”: “log”,

“x”: 12,

“y”: 6,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter HTTPStatus like /2\\d{2}/ and Operation=\”GetObject\” | stats avg(TurnAroundTime), avg(TotalTime), percentile(TurnAroundTime, 99), percentile(TotalTime, 99) by bin(5m)”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “GetObject Latencies (Successful Requests)”,

“view”: “timeSeries”

}

},

{

“type”: “log”,

“x”: 0,

“y”: 12,

“width”: 12,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter Path like /main/\n| filter HTTPStatus like /2\\d{2}/ \n| filter Operation = \”PutObject\” or Operation=\”DeleteObject\”\n| stats count() as `2xx Count` by Operation | sort `2xx Count` desc”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “2xx Status Count by Operation”,

“view”: “table”

}

},

{

“type”: “log”,

“x”: 0,

“y”: 18,

“width”: 6,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter Path like /main/ \n| filter HTTPStatus like /4\\d{2}/ \n| filter Operation = \”PutObject\” or Operation=\”DeleteObject\”\n| stats count() as `4xx Count` by Operation”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “4xx Status Count by Operation”,

“view”: “table”

}

},

{

“type”: “log”,

“x”: 6,

“y”: 18,

“width”: 6,

“height”: 6,

“properties”: {

“query”: “SOURCE ‘/aws/mediastore/mediastore_live’ | filter Path like /main/\n| filter HTTPStatus like /5\\d{2}/ \n| filter Operation = \”PutObject\” or Operation=\”DeleteObject\”\n| stats count() as `5xx Count` by Operation”,

“region”: “us-west-2”,

“stacked”: false,

“title”: “5xx Status Count by Operation”,

“view”: “table”

}

}

이제 라이브 스트리밍 상태를 보여주는 대시 보드가 생겼습니다. 대시 보드의 왼쪽에는 TPM(transaction per minute), PutObject Latencies, 그리고 HTTP 상태 코드 정보를 포함한 수집 관련 상태가 표기됩니다. 대시 보드의 오른쪽에는 송신 TPM(transaction per minute), GetObject 대기 시간 및 HTTP 상태 코드 정보가 표시됩니다.

(이미지4)

 

한마디 덧붙이자면..

MediaStore 액세스 로그는 개체 액세스와 개체 생성에 대한 포괄적인 정보를 제공합니다. 고객들은 자세한 CDN 로그와 라이브 스트리밍 퍼포먼스, 규모 그리고 자세한 클라이언트 액세스 정보를 얻을 수 있습니다.

 

삭제하기

나중에 결제가 일어나는 것을 방지하려면 MediaStore container와 MediaLive 서비스 및 MediaStore CloudWatch 로그 그룹을 삭제하십시오.

 

글을 마치며…

이번 글을 통하여 MediaStore 액세스 로그와 Amazon CloudWatch 를 사용하여 라이브 스트리밍 대시 보드를 생성하는 방법에 대해 알아봤습니다. 이렇게 생성된 대시 보드의 데이터로 사용자는 라이브 스트리밍 퍼포먼스와 운영 관련 매트릭스에 대한 인사이트를 제공받을 수 있습니다.

 


원문 URL: https://aws.amazon.com/ko/blogs/media/create-a-live-streaming-cloudwatch-dashboard-using-aws-elemental-mediastore-access-logs/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 개제하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달드리도록 하겠습니다.