개요

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

모니터링 분야가 왜 비용이 많이 들어가는지 조금이나마 알게 되는 느낌이었다.

상용 도구가 왜 인기있는지 몸소 실감하게 되었다. ㅠㅠ


<aside> 💡

아래 내용과 관련해서 틀린 부분이 매우매우 많을 수도 있습니다.. 듣고 이해한 내용을 바탕으로 작성된 글이므로 참고 정도로 생각해주시면 감사하겠습니다 ㅠㅠ

</aside>

Alloy

Log, Metric, Trace 정보를 Receiver & Exporter 하기위해 Collector를 구성해야 한다.

Otel Collector - https://opentelemetry.io/docs/collector/

Otel Collector - https://opentelemetry.io/docs/collector/

Receiver를 통해서 각 데이터를 수집, Processor를 통해서 데이터를 가공, Exporter를 통해서 각 데이터에 맞는 Backend Storage(Prometheus, Loki, Tempo)에 전달하는 역할을 한다.

Alloy Collector도 Opentelemetry Collector를 기반으로 만들어졌기때문에 구성 방식이 비슷하게 설정할 수 있습니다.

Alloy 관련 설정은 Kubernetes Configmap으로 배포되어 있어 있습니다.

$ kubectl get cm -n monitoring | grep alloy
alloy                                                          1      7d

$ kubectl get cm alloy -n monitoring -o yaml
Name:         alloy
Namespace:    monitoring
Labels:       app.kubernetes.io/component=config
              app.kubernetes.io/instance=alloy
              app.kubernetes.io/managed-by=Helm
              app.kubernetes.io/name=alloy
              app.kubernetes.io/part-of=alloy
              app.kubernetes.io/version=v1.5.1
              helm.sh/chart=alloy-0.10.1
Annotations:  meta.helm.sh/release-name: alloy
              meta.helm.sh/release-namespace: monitoring

Data
====
config.alloy:
----
logging {
  level  = "debug"
  format = "logfmt"
}
...

Events:  <none>

Receiver 설정

Otlp를 통해 수집을 진행하기 때문에 다음과 같이 설정합니다. 해당 내용과 관련해서 Alloy 공식 문서를 참고해주세요. (https://grafana.com/docs/alloy/latest/reference/components/)

otelcol.receiver.otlp "otel" {
	http {}
	grpc {}

	output {
		metrics = [otelcol.exporter.prometheus.prometheus.input]
		logs = [otelcol.exporter.loki.loki.input]
		traces = [otelcol.exporter.otlp.tempo.input]
	}
}