[모니터링] 수집된 메트릭데이터 S3로 적재하기
시작
이전에 구성한 Prometheus + Grafana에서 원하는 메트릭데이터를 수집하고, 이를 S3에 적재를 하기 위해서 방법을 찾다가 타노스라는 툴(?)을 알게 되었다.
타노스는 Prometheus가 수집한 메트릭데이터가 장기 보관 및 다른 스토리지에 적재가 가능하도록 도와주는 도구로 볼 수 있다.
타노스 아키텍처를 보게 되면, 기존의 프로메테우스 인스턴스에 타노스 사이드카가 붙으며 사이드카는 수집한 메트릭데이터를 타노스의 Object Storage에 보낸다.
여기서, Object Storage를 S3로 타깃 하여 데이터를 전송하도록 구성했다.
타노스 룰러는 기존 프로메테우스의 알림과 경고와 유사하게 진행한다.
PromQL를 이용해서 쿼리 결과를 불러온 것처럼 타노스도 PromQL로 데이터를 조회하고 불러오는데,
차이는 프로메테우스의 경우 수집한 실시간 데이터를 가져온다면?
타노스의 경우는 장기 보관된 데이터도 포함해서 데이터를 조회한다는 점??
이 모니터링을 구축할 때, 나란 놈은 가용성을 고려하지 않고 진행을 했다.
-> 즉, 프로메테우스 인스턴스가 힘들어서 쉬면, 데이터를 수집할 수가 없다는 의미다. 그렇다면, 되게 슬픈 일이 일어날 것.....
그렇다면, 프로메테우스 인스턴스를 여러 개 띄워서 돌리면 되지 않느냐??라고 생각을 해봤었다.
되게 그럴싸하니까?
-> 근데 찾아보니까 프로메테우스의 기능에선 여러 인스턴스가 같은 데이터를 쓰면 참 좋을 텐데, 데이터 복제 기능이 없어서 동일 메트릭 데이터를 중복 수집한다고 한다.. 효율이 떨어지는 단점이 존재하는 방법이다.
하지만, 타노스 장점이 여기서 빛을 발한다.
프로메테우스 인스턴스가 여러 개여도 하나의 인스턴스같이 통합해 구성할 수 있다는 거다.
-> 좋다 좋아
다만, 모니터링은 현재 단일 인스턴스로 돌아가고 있다는 현실..ㅜㅜ
global:
scrape_interval: 15s # 데이터 15초 마다 수집하기
evaluation_interval: 15s # 알림이나 경고 규칙 15초 마다 평가
external_labels:
cluster: "cluster"
replica: "replica"
environment: "production" # 환경 설정
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus itself
- job_name: 'node_exporter'
static_configs:
- targets: ['node_exporter:9100'] # Node Exporter
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080'] # cAdvisor for container monitoring
- job_name: 'thanos-sidecar'
static_configs:
- targets: ['thanos-sidecar:10902']
type: S3
config:
bucket: "버킷 이름 쓰면 된다."
endpoint: "s3.amazonaws.com" #기본 엔드포인뜨!
region: "AWS 리전 명"
insecure: false
signature_version2: false
prefix: thanos_metrics/
프리픽스는 폴더명이 된다. (객체들이 저장되는 경로라고 하면 될 것)
사이드카 추가는 yml 파일에 추가하여 포트 부여하고 진행했다.
기존에 도커 컴포즈를 이용해서 서로 동일 도커 네트워크상에서 작동되도록 했기 때문에 별다른 조정(?)이 필요하지 않았다.
사실, 기본 세팅에서 건든게 없다..하핫
아직은 복잡하게 구현을 안해놨다가 맞는거 같다..(다른 일에 밀렸다.)
현재는 기존에 Streamlit으로 간단하게 구현되었던 웹을 프론트(React)와 백엔드(Django)를 이용해서 고도화를 진행하고 있다.
그래서 그냥 다음은 리액트랑 DRF에 관해서 써볼까 생각중이다.