Kubernetes-Traces-Jaeger и сборщик Open Telemetry – Получен сигнал завершения от ОС

Вопрос или проблема

Я пытаюсь создать пакет 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. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь возвращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...