본문으로 건너뛰기

[Grafana Loki] Thor(V2) 쿼리 엔진에 결과 캐시 미들웨어 추가

PR 링크: grafana/loki#20986 상태: Merged | 변경: +778 / -153

들어가며

Grafana Loki의 Thor(V2) 쿼리 엔진은 기존 chunks 엔진과 달리 결과 캐시가 없었습니다. 동일한 쿼리가 반복될 때마다 오브젝트 스토어에서 데이터를 다시 읽어야 했습니다. 이 PR은 기존 chunks 엔진의 캐시 미들웨어 인프라(ResultsCacheMiddleware, LogResultCache)를 재사용하면서, Thor 전용 캐시 키 생성기를 추가하여 결과 캐시를 구현합니다.

핵심 코드 분석

캐시 미들웨어 구성

func executorHandler(cfg Config, logger log.Logger, exec queryExecutor,
    limits Limits, reg prometheus.Registerer) (http.Handler, error) {

    var h queryrangebase.Handler = &queryHandler{ ... }

    if cache.IsCacheConfigured(cfg.ResultsCache.CacheConfig) {
        newCache := func(suffix string, cacheType stats.CacheType) (cache.Cache, error) {
            cfgCopy := cfg.ResultsCache.CacheConfig
            cfgCopy.Prefix += suffix
            c, err := cache.New(cfgCopy, reg, logger, cacheType, constants.Loki)
            if err != nil { return nil, err }
            if strings.EqualFold(cfg.ResultsCache.Compression, "snappy") {
                c = cache.NewSnappy(c, logger)
            }
            return c, nil
        }

        // 3개의 독립 캐시: 메트릭, 인스턴트 메트릭, 로그
        metricCache, _ := newCache("metric.", stats.ResultCache)
        instantMetricCache, _ := newCache("instant-metric.", stats.InstantMetricResultsCache)
        logCache, _ := newCache("log.", stats.EngineLogResultCache)

        cacheMw, _ := NewCacheMiddleware(logger, limits, metricCache, instantMetricCache, logCache, reg)
        h = cacheMw.Wrap(h)
    }

    return queryrange.NewSerializeHTTPHandler(h, queryrange.DefaultCodec), nil
}

캐시 키 생성 전략

캐시 키는 시간 버킷 간격(EngineResultsCacheTimeBucketInterval, 기본 24시간)을 사용하여, 같은 버킷 내에서 시작하는 동일 쿼리는 같은 캐시 키를 공유합니다.

왜 이게 좋은가

  1. 기존 인프라 재사용: chunks 엔진의 검증된 캐시 미들웨어를 그대로 활용하여 코드 중복과 버그 위험을 최소화했다.
  2. 쿼리 유형별 독립 캐시: 메트릭, 인스턴트 메트릭, 로그 3가지 쿼리 유형이 각각 독립된 캐시 프리픽스를 사용하여 캐시 충돌을 방지한다.
  3. 설정 기반 활성화: results_cache 설정이 없으면 캐시를 사용하지 않아, 기존 배포에 영향을 주지 않는다.
  4. snappy 압축 지원: 캐시 데이터에 snappy 압축을 적용하여 네트워크/메모리 사용량을 줄일 수 있다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글