메트릭으로 함수 모니터링하기

메트릭으로 함수 모니터링하기

실행 중인 함수가 항상 건강한 상태인지 확인하려면, 함수가 임의의 메트릭(metric)을 조회 가능한 메트릭 인터페이스로 게시하도록 설정할 수 있어요. Pulsar 함수의 내장 메트릭과 직접 만든 커스텀 메트릭을 모두 활용해서 함수를 모니터링할 수 있죠.

알아두기: Java나 Python의 언어 자체 인터페이스를 사용하면 Pulsar로 메트릭과 통계를 게시할 수 없어요. 반드시 함수 컨텍스트가 제공하는 메트릭 API를 써야 해요.

출처: 문서

본문

함수를 모니터링하는 방법은 두 가지예요.

  • 내장 함수 메트릭 사용하기 — Pulsar 함수는 Java, Python, Go 함수의 상태를 모니터링하는 데 쓰는 메트릭을 노출해요. 메트릭 확인 방법은 모니터링 가이드를 따라 확인하면 돼요.
  • 커스텀 메트릭 설정하기 — 내장 메트릭 외에도 Pulsar는 Java와 Python 함수용 커스텀 메트릭을 만들 수 있게 해줘요. 함수 워커(function worker)가 사용자 정의 메트릭을 자동으로 Prometheus에 수집하고, Grafana에서 확인할 수 있어요.

아래는 Java, Python, Go 함수에서 Context 객체를 이용해 키(key) 단위로 메트릭을 커스터마이즈하는 예시예요. 예를 들어 함수가 메시지를 처리할 때마다 process-count 키에 대한 메트릭을 설정하고, 다른 하나는 elevens-count 키에 설정할 수 있어요.

Java:

import org.apache.pulsar.functions.api.Context;
import org.apache.pulsar.functions.api.Function;

public class MetricRecorderFunction implements Function<Integer, Void> {
    @Override
    public void apply(Integer input, Context context) {
        // Records the metric 1 every time a message arrives
        context.recordMetric("hit-count", 1);

        // Records the metric only if the arriving number equals 11
        if (input == 11) {
            context.recordMetric("elevens-count", 1);
        }

        return null;
    }
}

Python:

from pulsar import Function

class MetricRecorderFunction(Function):
    def process(self, input, context):
        context.record_metric('hit-count', 1)

        if input == 11:
            context.record_metric('elevens-count', 1)

Go:

func metricRecorderFunction(ctx context.Context, in []byte) error {
	inputstr := string(in)
	fctx, ok := pf.FromContext(ctx)
	if !ok {
		return errors.New("get Go Functions Context error")
	}
	fctx.RecordMetric("hit-count", 1)
	if inputstr == "eleven" {
		fctx.RecordMetric("elevens-count", 1)
	}
	return nil
}

더 알아보기 (Learn more)

  • 메트릭을 시각화하고 조회하는 방법은 Pulsar 모니터링 문서를 참고해요.
  • 함수 개발에 필요한 다른 기능은 함수 개발 API 문서에서 살펴보세요.
  • 메트릭 수집 파이프라인 구성이 궁금하다면 Prometheus·Grafana 설정 문서를 확인해요.