Конфигурация Prometheus Presto-Exporter в Kubernetes

Я пытаюсь отслеживать показатели Presto с помощью prometheus presto-exporter (https://github.com/yahoojapan/presto_exporter). Я загрузил образ докера presto-exporter и создал развертывание и службу. Но я не совсем уверен, правильно ли я это делаю. Ниже я предоставляю развертывание и конфигурацию услуг.

конфигурация развертывания


    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: presto-exporter

    spec:
      replicas: 1
      selector:
        matchLabels:
          app: presto-exporter
      template:
        metadata:
          labels:
            app: presto-exporter
        spec:
          containers:
          - env:
            - name: web_url
              # (login credentials are required to access presto which is (username:=<domain\username>, password=<password with special characters>))
              value: "https://<vm_url>:<nodeport>/v1/cluster"
            - name: log_level
              value: "debug"
            - name: insecure_skip_verify
              value: "true"
            image: <registry-ip>/presto-exporter:latest
            imagePullPolicy: IfNotPresent
            name: presto-exporter
            ports:
            - containerPort: 9483
              protocol: TCP
          imagePullSecrets:
          - name: <registry-secret>

конфигурация службы


    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: presto-exporter
      name: presto-exporter
    spec:
      ports:
      - name: metrics
        port: 8280
        protocol: TCP
        targetPort: 9483
      selector:
        app: presto-exporter
      type: ClusterIP

Я сомневаюсь, что использование переменных среды правильно. Кроме того, у экспортера нет переменных для имени пользователя и пароля, и у меня возникли проблемы с использованием учетных данных для presto только с флагом --web.url.
Журналы для беговых стручков дает мне


    kubectl logs presto-exporter-6dfd7db784-pqv7v
    time="2020-08-05T07:42:50Z" level=info msg="Starting presto_exporter (version=0.1.0, branch=master, revision=6eb4094fcd17f7fb82a393b527e3b0536ff1b38c)" source="presto_exporter.go:121"
    time="2020-08-05T07:42:50Z" level=info msg="Build context (go=go1.12.1, user=root@9756c8050182, date=20190323-04:33:01)" source="presto_exporter.go:122"
    time="2020-08-05T07:42:50Z" level=info msg="Listening on :9483" source="presto_exporter.go:137"
    time="2020-08-05T07:42:56Z" level=error msg="Get http://localhost:8080/v1/cluster: dial tcp 127.0.0.1:8080: connect: connection refused" source="presto_exporter.go:145"
    time="2020-08-05T07:43:01Z" level=error msg="Get http://localhost:8080/v1/cluster: dial tcp 127.0.0.1:8080: connect: connection refused" source="presto_exporter.go:145"
    time="2020-08-05T07:43:01Z" level=error msg="Get http://localhost:8080/v1/cluster: dial tcp 127.0.0.1:8080: connect: connection refused" source="presto_exporter.go:145"
    time="2020-08-05T07:43:06Z" level=error msg="Get http://localhost:8080/v1/cluster: dial tcp 127.0.0.1:8080: connect: connection refused" source="presto_exporter.go:145"
    time="2020-08-05T07:43:06Z" level=error msg="Get http://localhost:8080/v1/cluster: dial tcp 127.0.0.1:8080: connect: connection refused" source="presto_exporter.go:145"

Любая помощь будет принята с благодарностью. И, пожалуйста, дайте мне знать, если вам понадобится дополнительная информация. Заранее спасибо...

ИЗМЕНИТЬ

Я пробовал с разными вариантами в контейнере коляски, и я скопировал все, что пробовал до сих пор. Я добавил конфигурационную карту, в которой есть сертификаты и учетные данные, используя envFrom, а также попытался использовать volumeMounts, как указано в основном контейнере.

- name: presto-exporter
          args:
          - "--web.url=https://<vm_ip>:8901"
          - "--log.level=debug"
          image: <registry_ip>/presto-exporter:latest
          imagePullPolicy: IfNotPresent
          envFrom:
          - configMapRef:
              name: presto-master-config
          ports:
            - containerPort: 9483
              protocol: TCP
          volumeMounts:
            - mountPath: /usr/lib/presto/configmap
              name: presto-master-config
            - mountPath: /usr/lib/presto/plugin/
              name: presto-plugin
            - mountPath: /usr/lib/presto/default/etc/catalog
              name: presto-catalog
            - mountPath: /certs
              name: <cert_name>

Если я закомментирую --web.url arg, я получаю ту же ошибку, что и до отказа в соединении, то же самое касается использования localhost: 8901. Единственный способ получить доступ к URL-адресу, если я использую виртуальный IP-адрес и порт основного контейнера.

Теперь, если я сверну http://<vm_ip>:9483/metrics и посмотрю журнал, у меня проблема с сертификацией.

level=error msg="Get https://<vm_ip>:8901: x509: certificate signed by unknown authority

и если я попробую использовать http в --web-url arg, я получаю

level=error msg="Get http://<vm_ip>:8901: net/http: HTTP/1.x transport connection broken: malformed HTTP response

Итак, я думаю, мне нужно использовать https и найти способ решить проблемы с сертификацией ...


person N. Farhan    schedule 05.08.2020    source источник


Ответы (1)


Этот модуль экспорта Prometheus может извлекать метрики из кластера presto, и он должен быть установлен на сервере координатора кластера presto.

Это означает, что изображение экспортера должно находиться в дополнительном контейнере модулей координатора в кластере presto. После этого он сможет извлекать метрики из http://localhost:8080/v1/cluster URL.

Если вы действительно хотите, чтобы он находился в отдельном модуле, вам необходимо указать флаг -web.url вместо env web_url.

      containers:
      - args:
        - "-web.url=http://<vm_url>:<nodeport>/v1/cluster"
        image: <registry-ip>/presto-exporter:latest
        imagePullPolicy: IfNotPresent
        name: presto-exporter
        ports:
        - containerPort: 9483
          protocol: TCP
person Kamol Hasan    schedule 05.08.2020
comment
Спасибо за ответ. использование аргументов позволяет мне получить доступ к правильному URL-адресу. Теперь я столкнулся еще с двумя проблемами. Во-первых, мне нужны https и учетные данные для входа, и еще одна ошибка, которую я получаю, - x509: сертификат, подписанный неизвестным органом. Я не вижу флажков для игнорирования сертификатов. извините, я новичок в этом. не могли бы вы сказать мне, как этого избежать? - person N. Farhan; 05.08.2020
comment
@ N.Farhan Боюсь, что у вас не получится сделать это с помощью текущей версии экспортера. Он не предоставляет возможности для центра сертификации (CA). Он также не поддерживает метод аутентификации. Для использования вам понадобится HTTP сервер с отключенным методом аутентификации. - person Kamol Hasan; 05.08.2020
comment
@ N.Farhan предоставление учетных данных типа username & password через args (т.е. URL) не является хорошей практикой, постарайтесь этого избежать. - person Kamol Hasan; 05.08.2020
comment
Извините за поздний ответ, я давно не работал над этим. Я немного поигрался с контейнером с коляской, и у меня возникли новые проблемы. Я обновил вопрос выше. Есть предложения, как это исправить? Спасибо - person N. Farhan; 12.08.2020