알리바바 클라우드 SAE¶
알리바바 클라우드 SAE(Serverless App Engine)의 지표, 로그, 트레이스 정보를 수집합니다.
구성¶
SAE에 배포된 애플리케이션은 다음 절차로 트레이스, 지표, 로그 데이터를 연동할 수 있으며, 구체적인 흐름은 다음과 같습니다:
- 애플리케이션은 APM을 연동해 Trace 데이터를 DataKit으로 전송합니다
- 애플리케이션의 로그 데이터는 KafkaMQ로 수집한 뒤, DataKit에서 소비할 수 있습니다
- 애플리케이션 컨테이너의 지표 데이터는 알리바바 클라우드의 모니터링 API와 Function 플랫폼(DataFlux.f(x))을 통해 수집한 뒤Guance으로 전송합니다
- DataKit가 수집한 데이터를 통합 처리한 뒤Guance으로 보냅니다
참고: SAE에 DataKit를 배포하면 대역폭을 절약할 수 있습니다.
DataKit 애플리케이션 생성¶
SAE에서 DataKit 애플리케이션을 생성합니다
- SAE에 들어가서 애플리케이션 목록 - 애플리케이션 생성 을 클릭합니다.
- 애플리케이션 정보를 입력합니다
- 애플리케이션 이름
- 네임스페이스를 선택하고, 없으면 새로 생성합니다
- VPC를 선택하고, 없으면 새로 생성합니다
- 보안 그룹을 선택합니다: vSwitch는 NAT의 스위치와 일치해야 합니다
- 인스턴스 수는 필요에 따라 조정합니다
- CPU 1 core, 메모리 1G
- 완료되면 다음을 클릭합니다
- 이미지 추가: pubrepo.guance.com/datakit/datakit:1.31.0
- 환경 변수를 추가하고, 설정 내용은 다음과 같습니다:
{
"ENV_DATAWAY": "https://openway.guance.com?token=tkn_xxx",
"KAFKAMQ": "# {\"version\": \"1.22.7-1510\", \"desc\": \"do NOT edit this line\"}\n\n[[inputs.kafkamq]]\n # addrs = [\"alikafka-serverless-cn-8ex3y7ciq02-1000.alikafka.aliyuncs.com:9093\",\"alikafka-serverless-cn-8ex3y7ciq02-2000.alikafka.aliyuncs.com:9093\",\"alikafka-serverless-cn-8ex3y7ciq02-3000.alikafka.aliyuncs.com:9093\"]\n addrs = [\"alikafka-serverless-cn-8ex3y7ciq02-1000-vpc.alikafka.aliyuncs.com:9092\",\"alikafka-serverless-cn-8ex3y7ciq02-2000-vpc.alikafka.aliyuncs.com:9092\",\"alikafka-serverless-cn-8ex3y7ciq02-3000-vpc.alikafka.aliyuncs.com:9092\"]\n # your kafka version:0.8.2 ~ 3.2.0\n kafka_version = \"3.3.1\"\n group_id = \"datakit-group\"\n # consumer group partition assignment strategy (range, roundrobin, sticky)\n assignor = \"roundrobin\"\n\n ## kafka tls config\n tls_enable = false\n\n ## -1:Offset Newest, -2:Offset Oldest\n offsets=-1\n\n\n ## user custom message with PL script.\n [inputs.kafkamq.custom]\n #spilt_json_body = true\n ## spilt_topic_map determines whether to enable log splitting for specific topic based on the values in the spilt_topic_map[topic].\n #[inputs.kafkamq.custom.spilt_topic_map]\n # \"log_topic\"=true\n # \"log01\"=false\n [inputs.kafkamq.custom.log_topic_map]\n \"springboot-server_log\"=\"springboot_log.p\"\n #[inputs.kafkamq.custom.metric_topic_map]\n # \"metric_topic\"=\"metric.p\"\n # \"metric01\"=\"rum_apm.p\"\n #[inputs.kafkamq.custom.rum_topic_map]\n # \"rum_topic\"=\"rum_01.p\"\n # \"rum_02\"=\"rum_02.p\"\n",
"SPRINGBOOT_LOG_P": "abc = load_json(_)\n\nadd_key(file, abc[\"file\"])\n\nadd_key(message, abc[\"message\"])\nadd_key(host, abc[\"host\"])\nmsg = abc[\"message\"]\ngrok(msg, \"%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name} - \\\\[%{NOTSPACE:method_name},%{NUMBER:line}\\\\] %{DATA:service_name} %{DATA:trace_id} %{DATA:span_id} - %{GREEDYDATA:msg}\")\n\nadd_key(topic, abc[\"topic\"])\n\ndefault_time(time,\"Asia/Shanghai\")",
"ENV_GLOBAL_HOST_TAGS": "host=__datakit_hostname,host_ip=__datakit_ip",
"ENV_HTTP_LISTEN": "0.0.0.0:9529",
"ENV_DEFAULT_ENABLED_INPUTS": "dk,cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,ddtrace,statsd,profile"
}
설정 항목 설명:
- ENV_DATAWAY: 필수, Guance로 전송하는 게이트웨이 주소
- KAFKAMQ: 필수 아님, kafkamq 수집기 설정. 자세한 내용은 Kafka 수집기 설정 파일 소개 참고
- SPRINGBOOT_LOG_P: 필수 아님, KAFKAMQ와 함께 사용하는 로그 pipeline 스크립트로, kafka에서 온 로그 데이터를 분리하는 데 사용
- ENV_GLOBAL_HOST_TAGS: 필수, 수집기 전역 태그
- ENV_HTTP_LISTEN: 필수, Datakit 포트. IP는 반드시 0.0.0.0이어야 하며, 그렇지 않으면 다른 pod가 접근할 수 없습니다
- ENV_DEFAULT_ENABLED_INPUTS: 필수, 기본으로 활성화되는 수집기
자세한 내용은 알리바바 클라우드 SAE 애플리케이션 엔진 관측성 모범 사례 참고
트레이싱¶
알리바바 클라우드 SAE에 애플리케이션을 배포하려면, 해당 컨테이너에 APM을 포함해야 합니다:
- APM이 필요로 하는 빌드 패키지를 oss에 업로드하거나, APM 빌드 패키지를 애플리케이션의 Dockerfile에 통합해 빌드할 수 있습니다
- 시작 로딩은 일반 환경에서 APM을 연동하는 절차와 동일합니다.
자세한 내용은 알리바바 클라우드 SAE 애플리케이션 엔진 관측성 모범 사례 참고
지표¶
Func 설치¶
Guance 통합 - 확장 - 호스팅 버전 Func를 사용하는 것을 권장합니다
직접 배포하는 경우 Func 직접 배포 참고
스크립트 활성화¶
안내: 요구 사항에 맞는 알리바바 클라우드 AK를 미리 준비해 두세요(간단히 하려면 전역 읽기 전용 권한
ReadOnlyAccess를 직접 부여할 수 있습니다)
호스팅 버전 활성화 스크립트¶
- Guance 콘솔에 로그인합니다
- [통합] 메뉴를 클릭하고 [클라우드 계정 관리]를 선택합니다
- [클라우드 계정 추가]를 클릭하고 [알리바바 클라우드]를 선택한 뒤, 화면에 필요한 정보를 입력합니다. 이전에 클라우드 계정 정보를 이미 설정했다면 이 단계는 건너뜁니다
- [테스트]를 클릭하고, 테스트가 성공하면 [저장]을 클릭합니다. 테스트에 실패하면 관련 설정이 올바른지 확인한 뒤 다시 테스트합니다
- [클라우드 계정 관리] 목록에서 추가된 클라우드 계정을 확인할 수 있습니다. 해당 클라우드 계정을 클릭해 상세 페이지로 들어갑니다
- 클라우드 계정 상세 페이지의 [통합] 버튼을 클릭한 뒤
미설치목록에서알리바바 클라우드 SAE를 찾아 [설치]를 클릭하면 설치 화면에서 설치할 수 있습니다
수동 활성화 스크립트¶
-
Func 콘솔에 로그인하고 [스크립트 마켓]을 클릭한 뒤, Guance 스크립트 마켓으로 들어가
integration_alibabacloud_sae_app,integration_alibabacloud_sae_instance를 검색합니다 -
[설치]를 클릭한 뒤, 알리바바 클라우드 AK ID, AK Secret 및 계정명을 입력합니다.
-
[시작 스크립트 배포]를 클릭하면 시스템이 자동으로
Startup스크립트 세트를 생성하고, 해당 시작 스크립트를 자동으로 설정합니다. -
활성화 후에는 「관리 / 자동 트리거 설정」에서 해당 자동 트리거 설정을 볼 수 있습니다. [실행]을 클릭하면 예약 시간을 기다리지 않고 즉시 한 번 실행됩니다. 잠시 후 실행 작업 기록과 해당 로그를 확인할 수 있습니다.
검증¶
- 「관리 / 자동 트리거 설정」에서 해당 작업에 대한 자동 트리거 설정이 존재하는지 확인하고, 작업 기록과 로그를 함께 보며 이상이 있는지 확인합니다
- Guance에서 「인프라 / 사용자 정의」를 열어 자산 정보가 있는지 확인합니다
- Guance에서 「지표」를 열어 해당 모니터링 데이터가 있는지 확인합니다
지표 소개¶
| 지표 | 단위 | Dimensions | 설명 |
|---|---|---|---|
cpu_Average |
% | userId、appId | 애플리케이션 CPU |
diskIopsRead_Average |
Count/Second | userId、appId | 애플리케이션 디스크 IOPS 읽기 |
diskIopsWrite_Average |
Count/Second | userId、appId | 애플리케이션 디스크 IOPS 쓰기 |
diskRead_Average |
Byte/Second | userId、appId | 애플리케이션 디스크 IO 처리량 읽기 |
diskTotal_Average |
Kilobyte | userId、appId | 애플리케이션 디스크 총량 |
diskUsed_Average |
Kilobyte | userId、appId | 애플리케이션 디스크 사용량 |
diskWrite_Average |
Byte/Second | userId、appId | 애플리케이션 디스크 IO 처리량 쓰기 |
instanceId_memoryUsed_Average |
MB | userId、appId、instanceId | 인스턴스 사용 중인 메모리 |
instance_cpu_Average |
% | userId、appId、instanceId | 인스턴스 CPU |
instance_diskIopsRead_Average |
Count/Second | userId、appId、instanceId | 인스턴스 디스크 IOPS 읽기 |
instance_diskIopsWrite_Average |
Count/Second | userId、appId、instanceId | 인스턴스 디스크 IOPS 쓰기 |
instance_diskRead_Average |
Byte/Second | userId、appId、instanceId | 인스턴스 디스크 IO 처리량 읽기 |
instance_diskTotal_Average |
Kilobyte | userId、appId、instanceId | 인스턴스 디스크 총량 |
instance_diskUsed_Average |
Kilobyte | userId、appId、instanceId | 인스턴스 디스크 사용량 |
instance_diskWrite_Average |
Byte/Second | userId、appId、instanceId | 인스턴스 디스크 IO 처리량 쓰기 |
instance_load_Average |
min | userId、appId、instanceId | 인스턴스 평균 부하 |
instance_memoryTotal_Average |
MB | userId、appId、instanceId | 인스턴스 총 메모리 |
instance_memoryUsed_Average |
MB | userId、appId、instanceId | 인스턴스 사용 중인 메모리 |
instance_netRecv_Average |
Byte/Second | userId、appId、instanceId | 인스턴스 수신 바이트 |
instance_netRecvBytes_Average |
Byte | userId、appId、instanceId | 인스턴스 총 수신 바이트 |
instance_netRecvDrop_Average |
Count/Second | userId、appId、instanceId | 인스턴스 수신 데이터 드롭 |
instance_netRecvError_Average |
Count/Second | userId、appId、instanceId | 인스턴스 수신 오류 패킷 |
instance_netRecvPacket_Average |
Count/Second | userId、appId、instanceId | 인스턴스 수신 패킷 |
instance_netTran_Average |
Byte/Second | userId、appId、instanceId | 인스턴스 송신 바이트 |
instance_netTranBytes_Average |
Byte | userId、appId、instanceId | 인스턴스 총 송신 바이트 |
instance_netTranDrop_Average |
Count/Second | userId、appId、instanceId | 인스턴스 송신 데이터 드롭 |
instance_netTranError_Average |
Count/Second | userId、appId、instanceId | 인스턴스 송신 오류 패킷 |
instance_netTranPacket_Average |
Count/Second | userId、appId、instanceId | 인스턴스 송신 패킷 |
instance_tcpActiveConn_Average |
Count | userId、appId、instanceId | 인스턴스 활성 TCP 연결 수 |
instance_tcpInactiveConn_Average |
Count | userId、appId、instanceId | 인스턴스 비활성 TCP 연결 수 |
instance_tcpTotalConn_Average |
Count | userId、appId、instanceId | 인스턴스 총 TCP 연결 수 |
load_Average |
min | userId、appId | 애플리케이션 평균 부하 |
memoryTotal_Average |
MB | userId、appId | 애플리케이션 총 메모리 |
memoryUsed_Average |
MB | userId、appId | 애플리케이션 사용 중인 메모리 |
netRecv_Average |
Byte/Second | userId、appId | 애플리케이션 수신 바이트 |
netRecvBytes_Average |
Byte | userId、appId | 애플리케이션 총 수신 바이트 |
netRecvDrop_Average |
Count/Second | userId、appId | 애플리케이션 수신 데이터 드롭 |
netRecvError_Average |
Count/Second | userId、appId | 애플리케이션 수신 오류 패킷 |
netRecvPacket_Average |
Count/Second | userId、appId | 애플리케이션 수신 패킷 |
netTran_Average |
Byte/Second | userId、appId | 애플리케이션 송신 바이트 |
netTranBytes_Average |
Byte | userId、appId | 애플리케이션 총 송신 바이트 |
netTranDrop_Average |
Count/Second | userId、appId | 애플리케이션 송신 데이터 드롭 |
netTranError_Average |
Count/Second | userId、appId | 애플리케이션 송신 오류 패킷 |
netTranPacket_Average |
Count/Second | userId、appId | 애플리케이션 송신 패킷 |
tcpActiveConn_Average |
Count | userId、appId | 애플리케이션 활성 TCP 연결 수 |
tcpInactiveConn_Average |
Count | userId、appId | 애플리케이션 비활성 TCP 연결 수 |
tcpTotalConn_Average |
Count | userId、appId | 애플리케이션 총 TCP 연결 수 |
로그¶
알리바바 클라우드 SAE는 Kafka 방식으로 로그를Guance으로 출력할 수 있으며, 흐름은 다음과 같습니다:
- SAE 애플리케이션에서 Kafka 로그 보고를 활성화합니다
- DataKit에서 KafkaMQ 로그 수집을 활성화하고, 애플리케이션의 Kafka 로그 보고 Topic을 수집합니다
자세한 내용은 알리바바 클라우드 SAE 애플리케이션 엔진 관측성 모범 사례 참고
예시: