- Вопрос или проблема
- Ответ или решение
- Шаг 1: Проверка конфигурации OpenTelemetry Collector
- Шаг 2: Создание развертывания для OpenTelemetry Collector
- Шаг 3: Создание службы для OpenTelemetry Collector
- Шаг 4: Проверка состояния развертывания
- Шаг 5: Просмотр логов для диагностики
- Шаг 6: Обратная связь и устранение проблем
- Заключение
Вопрос или проблема
Я пытаюсь создать пакет Kubernetes Helm для обеспечения поддержки трассировки в Azure Kubernetes Services. Пакет Helm включает:
- Пакет Jaeger helm в качестве зависимости:
dependencies:
- name: jaeger
version: "3.1.2"
repository: "https://jaegertracing.github.io/helm-charts"
- OpenTelemetry Collector – ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-conf
labels:
app: opentelemetry
component: otel-collector-conf
data:
otel-collector-config: |
receivers:
otlp:
protocols:
http:
grpc:
exporters:
otlp/jaeger:
endpoint: "http://test-jaeger-collector.traces-dapr-jaeger-01.svc.cluster.local:14268"
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
# Перечислите свой экспортер здесь.
exporters: [otlp/jaeger]
- OpenTelemetry Collector – Service:
apiVersion: v1
kind: Service
metadata:
name: otel-collector
labels:
app: opencesus
component: otel-collector
spec:
ports:
- name: otel # Основная конечная точка для приемника OTEL.
port: 4317
protocol: TCP
targetPort: 4317
selector:
component: otel-collector
- OpenTelemetry Collector – Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: otel-collector
labels:
app: opentelemetry
component: otel-collector
spec:
replicas: 1 # масштабируйте в зависимости от вашего использования
selector:
matchLabels:
app: opentelemetry
template:
metadata:
labels:
app: opentelemetry
component: otel-collector
spec:
containers:
- name: otel-collector
image: otel/opentelemetry-collector-contrib-dev:latest
command:
- "/otelcontribcol"
- "--config=/conf/otel-collector-config.yaml"
- "--feature-gates=-component.UseLocalHostAsDefaultHost"
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 200m
memory: 400Mi
ports:
- containerPort: 4317 # Основная конечная точка для приемника OTEL.
volumeMounts:
- name: otel-collector-config-vol
mountPath: /conf
livenessProbe:
httpGet:
path: /
port: 13133
readinessProbe:
httpGet:
path: /
port: 13133
volumes:
- configMap:
name: otel-collector-conf
items:
- key: otel-collector-config
path: otel-collector-config.yaml
name: otel-collector-config-vol
При установке пакета Helm, если я проверю логи deployment/otel-collector
:
kubectl logs -n traces-dapr-jaeger-01 deployment/otel-collector
Я получаю эту ошибку:
c/otlp.go:153 Запуск HTTP сервера {"kind": "receiver", "name": "otlp", "data_type": "traces", "endpoint": "0.0.0.0:4318"}
"traces", "endpoint": "0.0.0.0:4318"}
2024-08-26T08:28:50.915Z info [email protected]/service.go:230 Все готово. Начинаем запуск и обработку данных.
vice.go:230 Все готово. Начинаем запуск и обработку данных.
2024-08-26T08:29:14.190Z info [email protected]/collector.go:325 Получен сигнал от ОС {"signal": "terminated"}
2024-08-26T08:29:14.190Z info [email protected]/ser2024-08-26T08:29:14.190Z info [email protected]/service.go:267 Начинаем завершение работы...
vice.go:267 Начинаем завершение работы...
2024-08-26T08:29:14.190Z info extensions/extensions.go:64 Остановка расширений...
2024-08-26T08:29:14.190Z info [email protected]/service.go:281 Завершение работы завершено.
Чтобы настроить OpenTelemetry и Jaeger для трассировки в вашем кластере AKS, выполните следующие шаги:
Добавьте и установите Jaeger OpenTelemetry
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update
helm install jaeger jaegertracing/jaeger --namespace tracing --create-namespace
Создайте ConfigMap для OpenTelemetry Collector
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-conf
namespace: tracing
labels:
app: opentelemetry
component: otel-collector-conf
data:
otel-collector-config: |
receivers:
otlp:
protocols:
http:
grpc:
exporters:
otlp/jaeger:
endpoint: "http://jaeger-collector.tracing.svc.cluster.local:14268/api/traces"
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp/jaeger]
Создайте Deployment для OpenTelemetry Collector
apiVersion: apps/v1
kind: Deployment
metadata:
name: otel-collector
namespace: tracing
labels:
app: opentelemetry
component: otel-collector
spec:
replicas: 1
selector:
matchLabels:
app: opentelemetry
template:
metadata:
labels:
app: opentelemetry
component: otel-collector
spec:
containers:
- name: otel-collector
image: otel/opentelemetry-collector-contrib:0.91.0 # Вы можете использовать стабильную версию
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 200m
memory: 400Mi
ports:
- containerPort: 4317
volumeMounts:
- name: otel-collector-config-vol
mountPath: /conf
livenessProbe:
httpGet:
path: /
port: 13133
readinessProbe:
httpGet:
path: /
port: 13133
volumes:
- configMap:
name: otel-collector-conf
items:
- key: otel-collector-config
path: otel-collector-config.yaml
name: otel-collector-config-vol
Создайте Service для OpenTelemetry Collector
apiVersion: v1
kind: Service
metadata:
name: otel-collector
namespace: tracing
labels:
app: opentelemetry
component: otel-collector
spec:
ports:
- name: otel
port: 4317
protocol: TCP
targetPort: 4317
selector:
app: opentelemetry
Проверьте настройку
kubectl get pods -n tracing
Теперь, когда вы проверяете логи
kubectl logs -n tracing deployment/otel-collector
Теперь коллектор работает без той же ошибки, которую вы описали (остановка после получения сигнала завершения от ОС). Ваши логи показывают активную обработку метрик, включая метрики CPU и памяти.
Ответ или решение
Ваша проблема с OpenTelemetry Collector, который получает сигнал завершения (terminated signal) от операционной системы, может быть связана с несколькими возможными причинами. Чтобы решить эту проблему, я предлагаю выполнить следующие шаги, которые включают в себя проверку конфигурации и создание необходимых ресурсов для успешного развертывания:
Шаг 1: Проверка конфигурации OpenTelemetry Collector
Убедитесь, что ваш ConfigMap
для OpenTelemetry Collector корректен и не содержит ошибок. Вот пример правильной конфигурации:
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-conf
namespace: tracing
labels:
app: opentelemetry
component: otel-collector-conf
data:
otel-collector-config: |
receivers:
otlp:
protocols:
http:
grpc:
exporters:
otlp/jaeger:
endpoint: "http://jaeger-collector.tracing.svc.cluster.local:14268/api/traces"
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp/jaeger]
Шаг 2: Создание развертывания для OpenTelemetry Collector
Убедитесь, что ваше развертывание правильно настроено. Здесь представлен такой пример:
apiVersion: apps/v1
kind: Deployment
metadata:
name: otel-collector
namespace: tracing
labels:
app: opentelemetry
component: otel-collector
spec:
replicas: 1
selector:
matchLabels:
app: opentelemetry
template:
metadata:
labels:
app: opentelemetry
component: otel-collector
spec:
containers:
- name: otel-collector
image: otel/opentelemetry-collector-contrib:0.91.0 # Используйте стабильную версию
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 200m
memory: 400Mi
ports:
- containerPort: 4317
volumeMounts:
- name: otel-collector-config-vol
mountPath: /conf
livenessProbe:
httpGet:
path: /
port: 13133
readinessProbe:
httpGet:
path: /
port: 13133
volumes:
- name: otel-collector-config-vol
configMap:
name: otel-collector-conf
items:
- key: otel-collector-config
path: otel-collector-config.yaml
Шаг 3: Создание службы для OpenTelemetry Collector
Убедитесь, что служба (Service) настроена правильно:
apiVersion: v1
kind: Service
metadata:
name: otel-collector
namespace: tracing
labels:
app: opentelemetry
component: otel-collector
spec:
ports:
- name: otel
port: 4317
protocol: TCP
targetPort: 4317
selector:
app: opentelemetry
Шаг 4: Проверка состояния развертывания
После применения всех ресурсов проверьте состояние развертывания:
kubectl get pods -n tracing
Шаг 5: Просмотр логов для диагностики
Чтобы посмотреть логи развертывания OpenTelemetry Collector:
kubectl logs -n tracing deployment/otel-collector
Шаг 6: Обратная связь и устранение проблем
Если вы по-прежнему видите сообщение "Received signal from OS", это может быть связано с тем, что ваш под завершается преждевременно. Это может быть связано с недостатком ресурсов или ошибками в конфигурации. Убедитесь, что ресурсы, выделенные для контейнера, действительно соответствуют тем, что вашему приложению необходимо, и что зависимости установлены правильно.
Также вы можете попробовать изменить уровень логирования для более подробной диагностики, добавив конфигурацию к вашему Collector:
logging:
level: debug
Заключение
Следуя шагам, изложенным выше, вы должны сможете устранить проблему с "terminated signal" и обеспечить правильную работу OpenTelemetry Collector в вашем кластере AKS. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь возвращаться за помощью.