Skip to main content Link Menu Expand (external link) Document Search Copy Copied
  • Stream group 별 pending 개수, lag 개수
  • XADD/sec, XACK/sec
  • consume 처리지연시간(consuming 하는 시점에서 현재시간과 produced 시간대 - 한 지표 쏘기)… 이거 메인 로직에 들어있으면 지연 ++ 되버려서 다른 방법이 필요할 듯 합니다
  • oldest pending idle
  • reclaim/sec
  • deliveryCount p95, p99

Consumer 정리 문제와 Prometheus stale 현상

모니터링 중 이미 종료된 consumer임에도 idle time이 계속 증가하는 현상이 있었습니다. 그래서 idleTime 지난 consumer 들 제거하는 자동정리로직을 추가하였고 이후 어느 정도는 사라졌지만 그래도 남아있었습니다. 하지만 실제로 cli 쿼리해보면 정상제거 되었지만 계속해서 프로메테우스에 등장해서 이유를 확인해보니 last 상태 이후 5min 간 stale 하다고 하네요. 아래는 정상제거된 모습입니다.

또한 모니터링을 위해 초당 xinfo 나 group 등의 정보를 초당 합쳐서 100번 이상 너무 자주호출하고 있었습니다. 하지만 xinfo 나 groups 등의 쿼리 속도는 나노 세컨트로 매우 빠르기에 크게 상관없다고 생각합니다.

설정 값 버스 리프레시 feat. 센트럴 도그마

센트럴 도그마는 설정값들을 라이브에서 변경할 수 있도록 도와주는 라이브러리입니다. maxLen 이나 retrycount 와 같은 메모리에 직접적인 영향을 주는 값들을 빠르게 변경 해야 하기 떄문에 Line 센트럴 도그마에서 영감을 받아서 실시간으로 설정 값을 변경하고싶을 떄 아래와 같이 변경 스위치를 구성하였습니다. 어찌되었든 사내 인프라인 eks, redis, etc. 만으로 써야했고 추가비용은 없어야되서 아래와 같이 셋업하였습니다.

아래와 같은 값들을 캐싱/evict 하여 사용합니다.

{
  "streamKey": "summary",
  "maxLen": 10000,
  "maxTryCount": 5,
  "retryIntervalMs": 5000,
  "partitionNumbers": 6,
  "delimiter": ":",
  "cdlPostfix": "CDL",
  "cdlRetryCount": 10,
  "cdlRetryIntervalMs": 10000,
  "pollBatchSize": 1,
  "allCdlKeys": [
    "summary:0:CDL",
    "summary:1:CDL",
    "summary:2:CDL",
    "summary:3:CDL",
    "summary:4:CDL",
    "summary:5:CDL"
  ],
  "allStreamKeys": [
    "summary:0",
    "summary:1",
    "summary:2",
    "summary:3",
    "summary:4",
    "summary:5"
  ]
}

이 과정으로 application 뜨는데 설정 값 변경 -> 배포 재기동으로 최소최소 5분 걸리는데 원하는 설정값을 API 통해서 전체 어플리케이션에 이벤트를 전송 및 적용하여 메모리 사용량 제한을 5분 -> 수 초 이내로 적용할 수 있었고 쌓여가는 메트릭을 정리할 수 있었습니다!