ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
모니터링 분야가 왜 비용이 많이 들어가는지 조금이나마 알게 되는 느낌이었다.
상용 도구가 왜 인기있는지 몸소 실감하게 되었다. ㅠㅠ
<aside> 💡
아래 내용과 관련해서 틀린 부분이 매우매우 많을 수도 있습니다.. 듣고 이해한 내용을 바탕으로 작성된 글이므로 참고 정도로 생각해주시면 감사하겠습니다 ㅠㅠ
</aside>
Log, Metric, Trace 정보를 Receiver & Exporter 하기위해 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>
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]
}
}