src.md : Go 언어를 활용하여 Nested Json을 Parsing하여 작은 단위로 쪼개는 프로세스를 수행하고, Python을 활용하여 수집된 데이터를 추출하여 parquet로 압축합니다.
./yaml/docker.md : linux 환경에서 Docker를 활용하여 전체 데이터 수집 인프라를 구축했습니다.
./aws/aws.md : AWS 서비스를 활용하여 수집된 데이터를 분석했습니다.
이 프로젝트는 교내 마이크로 그리드의 센서 데이터를 서버에서 저장하는 파이프라인을 구축하기위한 파일럿 프로젝트 소스 코드입니다. 마이크로 그리드에서는 OPC UA를 활용하여 RabbitMQ를 통해 데이터를 외부로 전송합니다. 데이터는 Json 포맷으로 sample 디렉토리에 저장된 sample.json과 같은 스키마입니다. 파이프라인은 다음과 같은 순서로 데이터를 InfluxDB에 저장합니다.
- RabbitMQ의 Queue에 있는 데이터를 Kafka Connect에서 가져온다.
- Kafka Connect에서 Apache Kafka의 Raw Json Topic에 저장한다.
- Raw Json Topic의 Nested Json을 Parser에서 가공하여 Parsed Json Topic에 저장한다.
- Telegraf가 Parsed Json Topic의 데이터를 읽어서 InfluxDB에 저장한다.
저장된 데이터는 장기간 보관을 위해 일정 기간이 지나면 Python Code를 통해 추출하여 Apache Parquet 형태로 압축합니다. 생성된 Parquet 파일은 AWS S3에 업로드 되며, AWS Glue를 통해 Parsing 되어 AWS Athena를 통해 SQL 쿼리합니다. 쿼리 결과는 다시 AWS S3에 csv 형태로 저장됩니다.
Parser는 Golang으로 구성되었으며, 추출 및 압축 코드는 Python(ipynb)로 구성했습니다. 또한 AWS 서비스는 AWS CLI를 활용했습니다.
- Docker, Docker-compose
- Python3, Python Libraries(./python/requirements.txt)
- Golang
- MakeFile
- yaml : docker-compose를 위한 yaml 파일들
- config : docker 설정 파일들
- plugin : Kafka Connect를 위한 Connect Plugin
- src : 작성한 코드
- go-kafka-json-parser : golang 기반 json parser code
- python : 활용한 Python Script
- aws : AWS 서비스들을 활용하기 위한 Bash Script
- sample : sample.json
- data : Apache Kafka와 InfluxDB의 데이터와 압축된 Parquet 파일 저장 경로
Description | Value |
---|---|
InfluxDB | 1.8 |
Grafana | 9.4.1 |
Zookeeer | confluent 7.2.1 |
Kafka | confluent 7.4.0 |
Kafka Connect | 7.3.3 |
Telegraf | 1.26 |
make all
: Telegraf를 제외한 모든 Docker Application 생성
make topic
: Kafka Topic 생성
make telegraf
: Telegraf 생성
make telegraf
: Telegraf 생성
aws_cli.sh
: AWS CLI 설치
aws_auto_complete.sh
: AWS CLI 자동 완성 설정
s3.sh
: AWS S3 Bucket 생성 및 Parquet Upload
glue.sh
: AWS Glue 크롤러,DB 생성
athena.sh
: 질의 실행 및 쿼리 결과 다운로드