InfluxDB 자동화를 위해 Amazon S3에서 Timestream으로 데이터 수집 - Amazon Timestream

Amazon Timestream for LiveAnalytics와 유사한 기능을 사용하려면 Amazon Timestream for InfluxDB를 고려하세요. 실시간 분석을 위해 간소화된 데이터 수집 및 한 자릿수 밀리초 쿼리 응답 시간을 제공합니다. 여기에서 자세히 알아보세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

InfluxDB 자동화를 위해 Amazon S3에서 Timestream으로 데이터 수집

Timestream for LiveAnalytics 내보내기 도구가 언로드 프로세스를 완료하면 자동화 프로세스의 다음 단계가 시작됩니다. 이 자동화는 InfluxDB의 가져오기 도구를 사용하여 데이터를 특수 시계열 구조로 전송합니다. 이 프로세스는 Timestream의 데이터 모델을 InfluxDB의 측정, 태그 및 필드 개념과 일치하도록 변환합니다. 마지막으로 InfluxDB의 라인 프로토콜을 사용하여 데이터를 효율적으로 로드합니다.

마이그레이션을 완료하기 위한 워크플로는 네 단계로 나뉩니다.

  1. Timestream for LiveAnalytics 내보내기 도구를 사용하여 데이터를 언로드합니다.

  2. 데이터 변환: Amazon Athena를 사용하여 Timestream for LiveAnalytics 데이터를 InfluxDB 라인 프로토콜 형식(카디널리티 평가 후 정의된 스키마 기준)으로 변환합니다.

  3. 데이터 수집: 라인 프로토콜 데이터 세트를 Timestream for InfluxDB 인스턴스에 수집합니다.

  4. 검증: 선택적으로 모든 라인 프로토콜 포인트가 수집되었는지 검증할 수 있습니다(--add-validation-field true데이터 변환 단계에서 필요).

데이터 변환

데이터 변환을 위해 Amazon Athena를 사용하여 Timestream for LiveAnalytics 내보낸 데이터 파켓 형식을 InfluxDB의 라인 프로토콜 형식으로 변환하는 스크립트를 개발했습니다. Amazon Athena는 전용 컴퓨팅 리소스 없이도 대량의 시계열 데이터를 변환할 수 있는 서버리스 쿼리 서비스와 비용 효율적인 방법을 제공합니다.

스크립트는 다음 작업을 수행합니다.

  • 내보낸 Timestream for LiveAnalytics 데이터를 Amazon S3 버킷에서 Amazon Athena 테이블로 로드합니다.

  • Athena 테이블에 저장된 데이터에서 라인 프로토콜로 데이터 매핑 및 변환을 수행하고 S3 버킷에 저장합니다.

데이터 매핑

다음 표는 Timestream for LiveAnalytics 데이터가 라인 프로토콜 데이터에 매핑되는 방법을 보여줍니다.

LiveAnalytics 개념을 위한 Timestream 라인 프로토콜 개념

테이블 이름

측정

Dimensions

태그

측정값 이름

태그(선택 사항)

측정값

필드

Time

타임스탬프

사전 조건 및 설치

변환 스크립트의 README에서 사전 조건 및 설치 섹션을 참조하세요.

사용량

example_database의 Timestream for LiveAnalytics 테이블 example_table에서 버킷 example_s3_bucket에 저장된 데이터를 변환하려면 다음 명령을 실행합니다.

python3 transform.py \ --database-name example_database \ --tables example_table \ --s3-bucket-path example_s3_bucket \ --add-validation-field false

스크립트가 완료되면

  • Athena에서는 Timestream for LiveAnalytics 데이터가 포함된 example_database_example_table 테이블이 생성됩니다.

  • Athena에서는 라인 프로토콜 포인트로 변환된 Timestream for LiveAnalytics 데이터가 포함된 테이블 lp_example_database_example_table이 생성됩니다.

  • S3 버킷 example_s3_bucket에서 경로 내에 example_database/example_table/unload-<%Y-%m-%d-%H:%M:%S>/line-protocol-output라인 프로토콜 데이터가 저장됩니다.

권장 사항

검증과 같은 마이그레이션의 이후 단계에 필요한 스크립트 및 출력의 최신 사용에 대한 자세한 내용은 변환 스크립트의 README를 참조하세요. 카디널리티를 개선하기 위해 차원을 제외한 경우 --dimensions-to-fields 인수를 사용하여 특정 차원을 필드로 변경하여 카디널리티를 줄이도록 스키마를 조정합니다.

검증을 위한 필드 추가

검증을 위해 필드를 추가하는 방법에 대한 자세한 내용은 변환 스크립트의 README에서 검증을 위한 필드 추가 섹션을 참조하세요.

InfluxDB용 Timestream으로 데이터 수집

InfluxDB 수집 스크립트는 압축된 라인 프로토콜 데이터 세트를 Timestream for InfluxDB로 수집합니다. gzip 압축 라인 프로토콜 파일이 포함된 디렉터리는 수집 대상 InfluxDB 버킷과 함께 명령줄 인수로 전달됩니다. 이 스크립트는 멀티 프로세싱을 사용하여 한 번에 여러 파일을 수집하여 InfluxDB의 리소스와 스크립트를 실행하는 시스템을 활용하도록 설계되었습니다.

스크립트는 다음을 수행합니다.

  • 압축된 파일을 추출하여 InfluxDB로 수집합니다.

  • 재시도 메커니즘 및 오류 처리를 구현합니다.

  • 재개를 위해 성공 및 실패한 수집을 추적합니다.

  • 라인 프로토콜 데이터 세트에서 읽을 때 I/O 작업을 최적화합니다.

사전 조건 및 설치

GitHub의 수집 스크립트 README에서 사전 조건 및 설치 섹션을 참조하세요.

데이터 준비

수집에 필요한 압축된 라인 프로토콜 파일은 데이터 변환 스크립트에 의해 생성됩니다. 다음 단계에 따라 데이터를 준비합니다.

  1. 변환된 데이터 세트를 보관하기에 충분한 스토리지가 있는 EC2 인스턴스를 설정합니다.

  2. 변환된 데이터를 S3 버킷에서 로컬 디렉터리로 동기화합니다.

    aws s3 sync \ s3://your-bucket-name/path/to/transformed/data \ ./data_directory
  3. 데이터 디렉터리의 모든 파일에 대한 읽기 액세스 권한이 있는지 확인합니다.

  4. 다음 수집 스크립트를 실행하여 Timestream for InfluxDB로 데이터를 수집합니다.

사용량

python influxdb_ingestion.py <bucket_name> <data_directory> [options]

기본 사용량

python influxdb_ingestion.py my_bucket ./data_files

수집 속도

수집률에 대한 몇 가지 테스트를 실행했습니다. 10명의 작업자로 수집 스크립트를 실행하고 InfluxDB 인스턴스용 8XL Timestream에 약 500GB 라인 프로토콜을 수집하는 C5N.9XL EC2 인스턴스를 사용한 수집 테스트: 8XL

  • 3K IOPS 15.86GB/시간.

  • 12K IOPS 70.34GB/시간.

  • 16K IOPS 71.28GB/시간.

권장 사항

  • 병렬 처리를 처리하기에 충분한 CPU 코어가 있는 EC2 인스턴스를 사용합니다.

  • 인스턴스에 추출을 위한 추가 공간이 있는 변환된 전체 데이터 세트를 보관하기에 충분한 스토리지가 있는지 확인합니다.

    • 한 번에 추출되는 파일 수는 스크립트 실행 중에 구성된 작업자 수와 같습니다.

  • 지연 시간을 최소화하려면 InfluxDB 인스턴스와 동일한 리전 및 AZ(가능한 경우)에 EC2 인스턴스를 배치합니다.

  • C5N과 같이 네트워크 작업에 최적화된 인스턴스 유형을 사용하는 것이 좋습니다.

  • 높은 수집 속도가 필요한 경우 Timestream for InfluxDB 인스턴스에는 최소 12K IOPS가 권장됩니다. Timestream for InfluxDB 인스턴스 크기에 따라 스크립트의 작업자 수를 늘려 추가 최적화를 얻을 수 있습니다.

자세한 내용은 수집 스크립트의 README를 참조하세요.