Kubernetes promtail не отправил логи в службу Loki.

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

Я развернул сервис Loki и использую эту команду для проверки развертывания сервиса:

curl -H "Content-Type: application/json" \
  -s -X POST "http://139.14.166.24:3100/loki/api/v1/push" \
  --data-raw '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1732889861000000000", "fizzbuzz" ] ] }]}'

Это тестовое сообщение логирования успешно записано в Loki, и я могу запрашивать этот лог из интерфейса Grafana. Затем я развернул promtail в кластер Kubernetes как DaemonSet вот так:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: promtail-daemonset
  namespace: default
  uid: a7801cf9-3f88-4c36-b6a7-0f523db14476
  resourceVersion: '23958317'
  generation: 9
  creationTimestamp: '2024-11-26T13:11:46Z'
  labels:
    k8slens-edit-resource-version: v1
status:
  currentNumberScheduled: 1
  numberMisscheduled: 0
  desiredNumberScheduled: 1
  numberReady: 1
  observedGeneration: 9
  updatedNumberScheduled: 1
  numberAvailable: 1
spec:
  selector:
    matchLabels:
      name: promtail
  template:
    metadata:
      creationTimestamp: null
      labels:
        name: promtail
      annotations:
        kubectl.kubernetes.io/restartedAt: '2024-11-30T02:54:09Z'
    spec:
      volumes:
        - name: logs
          hostPath:
            path: /var/log
            type: ''
        - name: varlibdockercontainers
          hostPath:
            path: /var/lib/docker/containers
            type: ''
        - name: promtail-config
          configMap:
            name: promtail-config
            defaultMode: 420
      containers:
        - name: promtail-container
          image: registry.cn-qingdao.aliyuncs.com/reddwarf-public/promtail:3.2.0
          args:
            - '-config.file=/etc/promtail/promtail.yaml'
          env:
            - name: iZm5e2jhfbrshckqh6qdbuZ
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName
          resources: {}
          volumeMounts:
            - name: logs
              mountPath: /var/log
            - name: promtail-config
              mountPath: /etc/promtail
            - name: varlibdockercontainers
              readOnly: true
              mountPath: /var/lib/docker/containers
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: promtail-serviceaccount
      serviceAccount: promtail-serviceaccount
      securityContext: {}
      schedulerName: default-scheduler
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 0
  revisionHistoryLimit: 10

Конфигурационная карта promtail promtail:3.2.0 выглядит так:

server:
  http_listen_port: 9080
  grpc_listen_port: 0

clients:
  - url: http://139.14.166.24:3100/loki/api/v1/push

positions:
  filename: /tmp/positions.yaml

scrape_configs:
  - job_name: kubernetes-pods
    kubernetes_sd_configs:
      - role: pod
    pipeline_stages:
      - json:
          expressions:
            level: level
            msg: message
            time: time
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        target_label: app
      - source_labels: [__meta_kubernetes_namespace]
        target_label: namespace
      - source_labels: [__meta_kubernetes_pod_name]
        target_label: pod_name

Но я не вижу никаких логов в интерфейсе Grafana, promtail не показывает никаких ошибок. Я что-то пропустил? Я также пытался добавить метку аннотации в развертывание Kubernetes вот так:

spec:
  replicas: 1
  selector:
    matchLabels:
      app: texhub-server-service
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: texhub-server-service
      annotations:
        promtail.io/scrape: "true"
        kubectl.kubernetes.io/restartedAt: '2024-11-06T20:40:11+08:00'
    spec:

По-прежнему не нашел никаких логов, почему promtail не отправляет логи? Вот вывод журнала pod promtail:

level=info ts=2024-11-30T02:54:12.166837213Z caller=promtail.go:133 msg="Перезагрузка конфигурационного файла" md5sum=005fc05e10167b7cd219ce7e04437ced
level=info ts=2024-11-30T02:54:12.167927624Z caller=kubernetes.go:331 component=discovery discovery=kubernetes config=kubernetes-pods msg="Использование учетной записи сервиса pod через конфигурацию в кластере"
level=info ts=2024-11-30T02:54:12.170280481Z caller=server.go:351 msg="сервер слушает по адресам" http=[::]:9080 grpc=[::]:33481
level=info ts=2024-11-30T02:54:12.171272194Z caller=main.go:173 msg="Запуск Promtail" version="(version=k218-659f542, branch=k218, revision=659f5421)"
level=warn ts=2024-11-30T02:54:12.171339922Z caller=promtail.go:263 msg="включить watchConfig"

Вот название хоста:

[root@iZm5e2jhfbrshckqh6qdbuZ ~]# hostname
iZm5e2jhfbrshckqh6qdbuZ

Я также пытался запустить тестовую команду в pod Kubernetes с использованием curl, и лог успешно отправился на сервис Loki.

Ответ или решение

Проблема с отправкой логов Promtail в Loki: диагностика и решение

Работа с системами мониторинга и логирования, такими как Promtail и Loki, может иногда представлять сложности. В вашем случае Promtail в Kubernetes не отправляет логи в Loki, несмотря на успешную проверку. Давайте рассмотрим возможные причины и пути решения этой проблемы.

1. Проверка конфигурации Promtail

Конфигурационный файл Promtail играет ключевую роль в процессе сбора и отправки логов. Рекомендуется обратить внимание на следующие моменты:

  • Scrape Configuration: Убедитесь, что ваши настройки scrape_configs корректны и Promtail имеет доступ к подам, которые вы хотите мониторить. Обратите внимание на раздел kubernetes_sd_configs:

    scrape_configs:
    - job_name: kubernetes-pods
      kubernetes_sd_configs:
        - role: pod

    Убедитесь, что в вашем кластере Kubernetes поды имеют соответствующие метки и аннотации, позволяющие Promtail их обнаружить.

  • Pipeline Stages: Проверьте, правильно ли настроены этапы конвейера (pipeline stages). Неправильная конфигурация может привести к тому, что логи не будут правильно парситься и отправляться в Loki.

2. Правильные метки и аннотации

Убедитесь, что ваши поды или деплойменты содержат правильные аннотации для активации сбора логов Promtail. Например, вы добавили аннотации в вашу манифестацию:

annotations:
  promtail.io/scrape: "true"

Это отличный шаг, но также проверьте, что у всех ваших целевых подов есть соответствующая метка.

3. Логи Promtail

Согласно приведенным вами логам Promtail:

level=info ts=2024-11-30T02:54:12.171272194Z caller=main.go:173 msg="Starting Promtail" version="(version=k218-659f542, branch=k218, revision=659f5421)"

Promtail стартует без ошибок. Для более глубокого анализа попробуйте увеличить уровень логгирования, добавив параметр -log.level=debug в вашу команду запуска, чтобы получить больше информации при выполнении.

4. Использование Curl для тестирования

Вы можете использовать curl внутри контейнеров, и это показывает, что ваш Loki работает. Это означает, что проблема может общаться с сервисом Loki, но, возможно, в самой конфигурации Promtail есть неправильный путь к логам или отсутствуют права доступа.

5. Проверка прав доступа

Проверьте, какие права доступа имеет ваш serviceAccount, используемый Promtail (в вашем случае promtail-serviceaccount). Он должен иметь права на чтение логов подов и доступ к необходимым ресурсам в Kubernetes, включая поды и пространства имен.

Вы можете добавить необходимые роли и права в манифесте ClusterRole и ClusterRoleBinding.

6. Мониторинг и отладка

  • Проверка текущего состояния DaemonSet: Убедитесь, что ваш DaemonSet работает на всех узлах:

    kubectl get daemonsets -n default promtail-daemonset
  • Проверка логов пода Promtail: Вы уже сделали, но стоит расширить наблюдение, обратив внимание на различные временные промежутки.

Заключение

Следуя вышеуказанным шагам, вы сможете диагностировать и решить проблему с отправкой логов от Promtail в Loki. Особенно важно проверить конфигурацию и права доступа, поскольку именно они часто становятся источником неполадок. Убедитесь, что все метки и аннотации правильно установлены, и если проблема сохраняется, не стесняйтесь подробнее исследовать логи и настройки Promtail. Эта структура подхода поможет вам наладить корректный сбор логов и их визуализацию в Grafana.

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

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