개발 일반

우당탕탕 Opensearch 데이터 모니터링 시스템 설계 대작전

민초부 2022. 12. 12. 16:35
반응형
  • 페인포인트 : ElasticSearch에 센서 시계열 데이터들이 쌓이고 있는데 이게 끊겨도 얼럿이 오지 않고 있다. 그래서 문제가 생겨 끊겨도 즉각적으로 알지 못 하고 그냥 날려버릴 때가 있음 

 

  • 대안 : 데이터가 끊기면 슬랙 얼럿을 보내주자!
    • 조건 1 : 한번 발송하고 나서 다음 날 까지 다시 발송해주지 않았으면 좋겠음
    • 조건 2 : 그러고 하루 지나면 다시 발송 
    • 조건 3 : 모든 센서에 대해서 체크, 발송하는게 아니라 센서당 특정 값에 대해서만 대표값으로 모니터링 
    • 조건 4 (이건 나만의 기준) : 하반기 AWS 비용 줄이기 대작전을 하고 있는 중이기 때문에 비용 최대한 안 들어가게 해보자

 

  • 첫번째 아이디어 : ES 데이터를 담당하는 Repository에 node schedule > cron을 통해 1시간마다 체크하여 슬랙 발송 해주자
    > 아이디어 폐기 사유 : ES를 담당하는 Repository가 안정화되지 않아 주기적으로 스케줄 돌며 각 변수에 대해 체크해주는게 좀 부하가 걸릴 수 있다 (한줄 요약 : 그냥 거기에 올리기엔 서버가 불안정하다). 즉 이미 ES에 대해서 조회를 옴팡지게 하고 있다.
    > 데이터를 ES에서 가져오는게 아니라 센서에서 Datalake로 던질 때 잠깐 kinesis를 거치는데 이 때 하루정도 데이터를 저장하고 있음. 어차피 버려지는 이 데이터를 가져온다면? VPC안에 있는 ES를 옘병해서 가져올 필요없이 쓱싹 체크가 가능하다.

 

  • 두번째 아이디어 : 그럼 람다를 올리고 Kinesis consumer를 뚫어서 데이터를 가져와 체크하자! 한번 발송했다는 데이터를 가지고 있어야 하는데 그건 캐시로 하자!
    > 람다에서 캐시..를 어떻게 매니징할 것인가..
        1. Elasticcache를 쓴다 : 하반기 AWS비용을 줄인다고 다 쳐내고 있었기 때문에 비싼 ElasticCache를 가급적이면 쓰고 싶지 않았다. 그리고 이건 쓰게된다면 한시간마다 모든 변수에 대해 체크를 해줄껀데.. 가벼운 서비스, 그렇지 못 한 캐시 사용량이 될 가능성이 있어 더욱 그랬다.
        2. AWS Lambda에서 cache를 쓰는 법을 한번 찾아보자 : 잠깐 구글링 했을 때 그런 내용이 있어서 이제 AWS에서 지원을 해줘 되는 줄 알았음.. > 결론부터 말하면 안 됨 ㅎㅎ 서버를 필요할 때 마다 올리는게 lambda인데 될리가 ㅠ 그리고 되면 elasticcache를 누가 씀 ㅎㅎ (다른 lambda를 올리거나 proxy를 통해 하는 방법이 있긴했는데 이건 제외)
        3. 캐싱 안 되면 그냥 schedule validation 테이블 하나 작게 파서 이걸 쓰자 

  • 두번째에서 파생된 아이디어 : 람다를 올리되 보냈었다는 데이터를 저장하지 말고 규칙을 만들어 보자! 
    > 각각 변수에 대해서 마지막 데이터들을 추출하여 그 시간과 지금 시간의 차이가 0~1시간 / 24~25시간 / 48~49시간 이렇게 차이날 때마다 발송해주자 (코딩테스트 알고리즘 마냥)
    > 괜찮은거 같은데? 근데 대신 kinesis consumer로 데이터 가져오는게 아닌 es에서 데이터를 가져와야함 
        (kinesis는 하루치밖에 데이터를 안 가지고 있기 때문에) 
    > ElasticCache를 쓰든, RDS를 파든 이게 제일 비용 및 부하가 적어보인다. 

    + ES에서 데이터를 어떻게 가져올 것인가? >
       1. Lambda에 vpc열고 바로 다이렉트로 붙게 해주면 되려나 
       2. ES 담당 repo에 조회 API열어서 그걸 통해 조회하면 될 것인가?
    + 농장 별로 쪼개서 스케줄을 돌려야하나 싶음 모든 농장을 1시간마다 한번에 돌리면 ES조회 부하가 심할꺼고 농장별로 쪼개면 좀 덜하지 않을까.. 싶음 

 

요약

1. Elasctic cache & lambda 구조로 짜고 kinesis에서 가져오기
2. lambda로 코드 올리고 cache 안 쓰는 대신 Elasticsearch에서 데이터 n번 조회해서 가져오기 

결론
1. 이렇게 모니터링해야할 데이터는 앞으로 농장이 많아짐에 따라 같이 많아질 것이라 판단되었고 이에 그냥 확장성 있는 1번 방식으로 하기로 하였다.

 

생각해보니 후에 파생변수에 대한 모니터링도 해야한다는 확장성까지 고려한다면.. ES를 보는게 맞다할 수 있겠다.

반응형