OpenTelemetry Collector extension 소개
opentelemetry-collector
를 사용하면서 다양한 extension을 추가하여 사용할 수 있다.
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension
extension을 활성화하면 특정 주소로 해당 extension을 호출하여 사용하게 된다.
이 중 zpages
, pprof
, health_check
extension를 사용해 보면서 기록을 남겨본다.
전체 설정 파일은 마지막 부분에 정리해 두었다.
K8S deployment, service 설정 부분
extension 사용 시 endpoint 기본 설정이 localhost:[해당 extension 포트]
로 지정되어 있다.
내 경우 k8s에 pod를 띄워 사용하고 있는데 pod ip를 따로 지정해야 했다.
opentelemetry-collecotor의 deployment 설정에 extension 관련 port와 env를 지정한다.
(extension을 추가할수록 해당 extension에 대한 port 설정도 필요시 추가된다.)
ports:
- [...기존 설정 생략]
- name: pprof # pprof extension
containerPort: 1777
protocol: TCP
- name: healthcheck # healthcheck extension
containerPort: 13133
protocol: TCP
- name: zpages # healthcheck extension
containerPort: 55679
protocol: TCP
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
이 ip값을 otel config 설정의 각 extension endpoint에 지정한다.
해당 port 설정을 service에도 추가한다.
- [...기존 설정 생략]
- name: ppro # pprof extension
port: 1777
protocol: TCP
- name: healthcheck # healthcheck extension
port: 13133
protocol: TCP
- name: zpages # zpages extension
port: 55679
protocol: TCP
otel config 설정
zpages extension 사용하기
https://github.com/open-telemetry/opentelemetry-collector/blob/main/extension/zpagesextension/README.md
zpages는 web에서 별다른 도구 없이 opentelemetry-collector
application의 상태를 확인할 수 있는 웹페이지를 제공한다.
앞서 설명한 것처럼 deployment와 service에 env, port 관련 설정을 한 후 otel config 파일에 endpoint를 지정한다.
extensions:
zpages:
endpoint: ${env:MY_POD_IP}:55679
service:
extensions: [zpages]
추가하면 다음 endpoint를 접근할 수 있다.
- /debug/servicez
- /debug/pipelinez
- /debug/extensionz
- /debug/featurez
- /debug/tracez
내 경우 tracez가 현재 서비스 중인 상황을 한눈에 파악하기 좋아 자주 보게 되었다.
pprof extension 사용하기
pprof는 Performance Profile (성능 프로파일)을 보여준다.
앞서 설명한 것처럼 deployment와 service에 env, port 관련 설정을 한 후 otel config 파일에 endpoint를 지정한다.
extensions:
pprof:
endpoint: ${env:MY_POD_IP}:1777
service:
extensions: [pprof]
추가하면 다음 endpoint로 접근할 수 있다.
- /debug/pprof
health_check extension 사용하기
health_check extension은 별다른 기능이 없고 단순하게 /
호출 시 간단한 서버 상태를 다음처럼 보여준다.
{
"status": "Server available",
"upSince": "2024-12-11T20:45:23.059041073Z",
"uptime": "12.021395418s"
}
앞서 설명한 것처럼 deployment와 service에 env, port 관련 설정을 한 후 otel config 파일에 endpoint를 지정한다.
extensions:
health_check:
endpoint: ${env:MY_POD_IP}:13133
service:
extensions: [health_check]
이 extension을 사용하면 k8s의 readinessProbe, livenessProbe를 설정할 수 있게 된다.
livenessProbe:
httpGet:
path: /
port: 13133
readinessProbe:
httpGet:
path: /
port: 13133
전체 k8s 파일
앞서 소개한 내용을 설정한 k8s 파일 전체 내용을 열거하면 다음과 같다.
apiVersion: v1
kind: ConfigMap
metadata:
name: opentelemetry-collector-configmap
data:
opentelemetry-collector.yaml: |
receivers:
otlp:
protocols:
grpc:
endpoint: ${env:MY_POD_IP}:4317
http:
endpoint: ${env:MY_POD_IP}:4318
processors:
batch:
exporters:
otlp:
endpoint: tempo-service.opensource.svc.cluster.local:4317
tls:
insecure: true
otlphttp:
endpoint: http://loki-service.opensource.svc.cluster.local:3100/otlp
debug:
verbosity: normal
extensions:
health_check:
endpoint: ${env:MY_POD_IP}:13133
pprof:
endpoint: ${env:MY_POD_IP}:1777
zpages:
endpoint: ${env:MY_POD_IP}:55679
service:
extensions: [health_check, pprof, zpages]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp]
logs:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlphttp]
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: opentelemetry-collector-deployment
labels:
app: opentelemetry-collector
spec:
selector:
matchLabels:
app: opentelemetry-collector
template:
metadata:
labels:
app: opentelemetry-collector
spec:
containers:
- name: opentelemetry-collector
image: otel/opentelemetry-collector:latest
command:
- /otelcol
- --config=/conf/opentelemetry-collector.yaml
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 200m
memory: 400Mi
ports:
- name: jaeger-compact
containerPort: 6831
protocol: UDP
- name: jaeger-grpc
containerPort: 14250
protocol: TCP
- name: jaeger-thrift
containerPort: 14268
protocol: TCP
- name: otlp
containerPort: 4317
protocol: TCP
- name: otlp-http
containerPort: 4318
protocol: TCP
- name: zipkin
containerPort: 9411
protocol: TCP
- name: pprof # pprof extension
containerPort: 1777
protocol: TCP
- name: healthcheck # healthcheck extension
containerPort: 13133
protocol: TCP
- name: zpages # healthcheck extension
containerPort: 55679
protocol: TCP
env:
- name: MY_POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
livenessProbe:
httpGet:
path: /
port: 13133
readinessProbe:
httpGet:
path: /
port: 13133
volumeMounts:
- name: opentelemetry-collector-config
mountPath: /conf
volumes:
- name: opentelemetry-collector-config
configMap:
name: opentelemetry-collector-configmap
items:
- key: opentelemetry-collector.yaml
path: opentelemetry-collector.yaml
---
apiVersion: v1
kind: Service
metadata:
name: opentelemetry-collector-service
labels:
app: opentelemetry-collector
spec:
selector:
app: opentelemetry-collector
ports:
- name: otlp-grpc # Default endpoint for OpenTelemetry gRPC receiver.
port: 4317
targetPort: 4317
protocol: TCP
appProtocol: grpc
- name: otlp-http # Default endpoint for OpenTelemetry HTTP receiver.
port: 4318
targetPort: 4318
protocol: TCP
- name: ppro # pprof extension
port: 1777
protocol: TCP
- name: healthcheck # healthcheck extension
port: 13133
protocol: TCP
- name: zpages # zpages extension
port: 55679
protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: opentelemetry-collector-ingress
spec:
rules:
- host: opentelemetry-collector.bluesky.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 13133
- path: /v1
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 4318
- path: /debug
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 55679
- path: /debug/pprof
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 1777
내 경우 ingress로 호출해서 관련 설정도 추가하였다.
rules:
- host: opentelemetry-collector.bluesky.local
http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 4318
- path: /debug
pathType: Prefix
backend:
service:
name: opentelemetry-collector-service
port:
number: 55679
'Study > Docker & Kubernetes' 카테고리의 다른 글
spinnaker resource (component sizing) 설정해 보기 (0) | 2023.04.07 |
---|---|
kubernetes pod에 resource 설정해 보기 (0) | 2023.04.06 |
kubernetes에 Promtail, Loki 사용해 보기 (1) | 2023.03.21 |
kubernetes에 OpenTelemetry Collector, Grafana Tempo를 설치하고 tracing 구현해 보기 (2) | 2023.03.18 |
helm chart로 kubernetes yaml 파일 만들기 (0) | 2023.03.17 |
kubernetes에 sonarqube 설치 & jenkins에서 사용해 보기 (0) | 2023.03.16 |
kubernetes에 Prometheus, Grafana 설치하고 metric 정보 수집해 보기 (1) | 2023.03.15 |
kubernetes ConfigMap, Secret 사용해 보기 (0) | 2023.03.11 |
kubernetes PersistentVolume, PersistentVolumeClaim 사용해 보기 (0) | 2023.03.11 |
Rancher Desktop에서 docker 명령어 사용하기 (0) | 2022.10.20 |