[kor] Amazon CloudWatch Logs With Amazon Managed Grafana
Amazon CloudWatch Logs + Amazon Managed Grafana를 통한 손쉬운 로그 수집 및 분석
Amazon Grafana 설정
Amazon Grafana
Console로 이동하여 Create workspace를 선택한다.- Workspace name을 설정한다.
- Authentication access는 SAML 방식을 사용할 것이다. 이 계정이 Organizations Root 계정이면 AWS IAM Identity Center를 사용할 수 있으나, 이 설정에서는 그럴 수 없기에 다른 SAML Solution을 사용해야한다.(Okta, Azure Active Directory 등) 이 예제에서는 Azure Active Directory를 사용할 것이다.
- Permission type은 Service managed를 사용한다.
Turn Grafana alerting on
은 이 예제에서 설정하지 않는다.Network access control
은Open access
를 사용하여 쉽게 웹에서 접속할 수 있도록 한다.- 그 다음 Data sources의 경우, Amazon CloudWatch만 선택해준다. (나중에 추가할 수 있다.)
- Amazon X-ray, Amazon Managed Prometheus(한국 리전은 지원 안됨.), Amazon Athena도 지원한다.
- Create workspace를 해준다.
SAML 설정 : Azure Active Directory
Azure Active Directory
Console로 이동하여Enterprise applicatinos
를 선택한다.New application
클릭 후,Grafana
를 검색하면Amazon Managed Grafana
가 나온다. 선택해준 다음,Name
을 변경하고Create
해준다.Users and groups
로 이동 후, Grafana에 접근할 AD User를 추가해준다.Single sign-on
으로 이동 후,SAML
을 선택하고, 이 창은 잠시 keep 해둔다.
SAML 설정 : Amazon Managed Grafana
- 방금 전에 생성한 Grafana workspace에 들어와서 SAML에서
Complete setup
을 클릭한다. - IdP 설정하기 :
- Service provider identifier (Entity ID)는 방금 전에 keep 해둔 Azure Portal 창에서,
Basic SAML Configuartion
→Edit
후Identifier (Entity ID)
→Add identifier
후 주소를 복사 붙여넣기 한다. - Service provider reply URL (Assertion consumer service UTL)은
Reply URL (Assertion Consumer Service URL)
→Add identifier
후 주소를 복사 붙여넣기 한다. - Service provider login URL은
Sign on URL
에 주소를 복사 붙여넣기 한다. - 위에
Save
를 누르고 빠져나온다.
- Service provider identifier (Entity ID)는 방금 전에 keep 해둔 Azure Portal 창에서,
- Federation Metadata URL 입력하기
- Azure SAML-based Sign-on (위 IdP와 동일한 페이지에서 계속)에
3. SAML Certificate
의 App Federation Metadata Url 주소를 복사 후 AWS Grafana 설정 페이지의Metadata URL
에 복사 붙여넣기 한다.
- Azure SAML-based Sign-on (위 IdP와 동일한 페이지에서 계속)에
- 관리자 계정 설정하기
- 현재는 간편하게 하기 위해, displayName을 통해 설정할 것이다.
- AWS Console Step 3의
Assertion attribute role
에는 displayName을 입력하고,Admin role values
에는 AD 계정의 Display Name을 입력해준다. ex) Moohyun Song - 이러면 해당 계정만 admin이 되어 웹 페이지에서 여러가지를 추가/수정/삭제 할 수 있게 된다.
- 만약 여러 계정을 관리자로 하고 싶다면, AD 계정에 공통적인 Attribute를 만들고 이를 Claim으로 AMP에 넘겨서 attribute role내용과 value를 그에 맞도록 하면 된다. ex) grafanaRole이라는 Attribute 생성 후, value가 Admin이면 admin이 되도록 할 수 있다.
Save SAML configuration
해준다.
Cloudwatch Logs에 boto3를 이용한 데이터 추가
Log Stream 생성 및 Log Stream에 event를 넣는 예제 코드: (Log Group은 Console에서 별도로 생성)
import boto3
import json
import time
logs_client = boto3.client('logs')
def create_log_stream(log_group_name, log_stream_name):
logs_client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
def create_log_event(log_group_name, log_stream_name, log_event_index, inference_time, network_latency_time):
log_data = {
'index_number': log_event_index,
'inference_time': inference_time,
'network_latency_time': network_latency_time
}
log_event = {
'timestamp':int (time.time() * 1000),
'message': json.dumps(log_data)
}
logs_client.put_log_events(logGroupName=log_group_name, logStreamName=log_stream_name, logEvents=[log_event])
Grafana에 CloudWatch Data Source 추가하기
- Grafana web page로 이동하여,
AWS Data Sources
로 이동한다. 그리고Data sources
탭에서 CloudWatch Service를 선택 후, Default region 지정 후, Add data source 해준다.
예제 : Grafana에서 CloudWatch Logs Data 시각화 및 가공
Dashboard
에서add panel
을 해준다.Query
에서Data source
를Amazon CloudWatch
를 선택한다.- CloudWatch Metrics → 일반적인 Metric을 Grafana를 통해 볼 수 있다.
- CloudWatch Logs → Logs에 저장된 데이터를 Grafana를 통해 볼 수 있다.
- CloudWatch Logs를 선택한 뒤,
Log Group
선택 후 아래와 같은 CloudWatch Logs Insight Query 문을 입력한다.
fields index_number, inference_time
| filter @logStream = "2023-05-24-14_05_33-mobilenet_v1-100tasks-log-stream"
위와 같이 Bar chart를 사용해 한눈에 CloudWatch logs에 저장된 inference_time을 볼 수 있다.
만약 데이터 재가공이 필요한 경우, +Expression
을 통해 여러가지 할 수 있으며, 현재 표시된 데이터 정보를 추출하고 싶으면 그래프 위 제목을 누르고 inspect
→ Data
를 통해 추출할 수 있다.