Application의 trace 데이터를 수집하기 위해 auto instrumentation을 활성화했으나 cpu가 거의 3~4코어까지 치고 계속해서 shutdown 훅이 실행되면서 컨테이너가 실행을 멈춰서 crashloopback이 되어 재시작을 무한대로 하는 현상이 있었습니다.
위 링크를 참조하여 java opentelemetry agent의 default instrumentation을 비활성화하고, helmdall-apps에서 사용한 라이브러리만 활성화시키도록 변경했습니다.
개발 과정에서 사용한 라이브러리 목록을 뽑아서 지정했으나 충분하지 않았기 때문에 어떤 라이브러리를 활성화해야하는지를 찾는 방법에 대해 고민해봤습니다.
라이브러리 찾는 방법
우선은 common default를 enable시킨 상태로 구동합니다.
(구동이 원활하게 될 수 있도록 resource request를 많이 주고 시작, 저는 cpu 2 core로 주고 테스트 진행했습니다.)
수집된 trace 데이터에서 span을 확인해보면 아래 표시한 것과 같이 otel.library.name를 확인 할 수 있습니다.

수집해야 하는 trace들을 검토해서 span의 Attributed에 표시된 라이브러리 이름을 확인해서 목록을 작성합니다.
# apps에서 수집해야 하는 trace 데이터 관련 라이브러리 list
spring-scheduling
http-url-connection
tomcat
spring-webmvc
spring-data
hibernate
jdbc
kafka-clients
spring-kafka
opentelemetry의 Instrumentation yaml에서 java.env에 위의 리스트를 기반으로 라이브러리를 활성화합니다.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: apps-instrumentation
namespace: otel
spec:
exporter:
endpoint: http://otel-collector-collector.otel.svc.cluster.local:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
java:
env:
- name: OTEL_EXPORTER_OTLP_PROTOCOL
value: http/protobuf
- name: OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
value: http/protobuf
- name: OTEL_EXPORTER_OTLP_METRICS_PROTOCOL
value: http/protobuf
- name: OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED
value: "false"
- name: OTEL_INSTRUMENTATION_SPRING_SCHEDULING_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_HTTP_URL_CONNECTION_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_TOMCAT_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_SPRING_WEBMVC_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_SPRING_DATA_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_HIBERNATE_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_JDBC_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_KAFKA_CLIENTS_ENABLED
value: "true"
- name: OTEL_INSTRUMENTATION_SPRING_KAFKA_ENABLED
value: "true"
적용 한 후에도 어느정도 cpu를 많이 쓰지만, restart 1~2번 후에 제대로 동작하는 것을 확인할 수 있었습니다.
'Monitoring' 카테고리의 다른 글
Grafana mimir overview (0) | 2023.08.29 |
---|---|
Opentelemetry - Collector filtering span (0) | 2023.08.28 |
Opentelemetry - auto instrumentation (0) | 2023.08.28 |
Prometheus-adapter를 이용한 custom.metrics.k8s.io API 사용 (for HPA v2beta2 target) (1) | 2023.08.28 |
Loki Deployment to k8s (0) | 2023.02.14 |