Использование Prometheus для мониторинга приложений Spring Boot в кластере Kubernetes - PullRequest
2 голосов
/ 20 января 2020

В моем локальном кластере kubernetes развернуты микросервисы с пружинной загрузкой. Микросервисы используют реестр микрометра и прометея, но в соответствии с политикой нашей компании привод доступен на другом порту:

  • 8080 для «бизнес» запросов HTTP
  • 8081 / управление для привода. Итак, я могу получить доступ к http://host:8081/manage/prometheus и увидеть метрики при локальном запуске процесса (без kubernetes).

Теперь я новичок в Prometheus и довольно ограниченные знания в kubernetes (я Я работаю с Java опытом разработчика.

Я создал POD с моим приложением и успешно запустил его в kubernetes. Это работает, и я могу получить к нему доступ (для 8080 я создал службу для сопоставления портов), и я могу выполнять http-запросы бизнес-уровня с того же P C.

Но я не нашел примеров добавления прометея на картинке. Предполагается, что Прометей будет развернут в том же кластере kubernetes, как и другой модуль. Итак, я начал с:


FROM @docker.registry.address@/prom/prometheus:v2.15.2

COPY entrypoint.sh /
USER root
RUN chmod 755 /entrypoint.sh

ADD ./prometheus.yml  /etc/prometheus/

ENTRYPOINT ["/entrypoint.sh"]

точка входа. sh выглядит так:

#!/bin/sh
echo "About to run prometheus"
/bin/prometheus --config.file=/etc/prometheus/prometheus.yml \
                --storage.tsdb.path=/prometheus \
                --storage.tsdb.retention.time=3d \
                --web.console.libraries=/etc/prometheus/console_libraries \
                --web.console.templates=/etc/prometheus/consoles

Мой вопрос о том, как именно я должен определить prometheus.yml чтобы он получал метрики от моего подпружиненного загрузочного отсека (и других имеющихся у меня микросервисов, все пружинные опоры которых приводились с одинаковой настройкой привода).

Я начал с (prometheus.yml):

global:
  scrape_interval: 10s
  evaluation_interval: 10s

scrape_configs:

  - job_name: 'prometheus'
    metrics_path: /manage/prometheus
    kubernetes_sd_configs:
      - role: pod
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        action: keep
        regex: sample-pod-app(.*)|another-pod-app(.*)

Но, видимо, это не работает, поэтому я прошу совета:

  • Если у кого-то есть рабочий пример, он будет лучшим:)
  • Интуитивно я понимаю, что мне нужно указать сопоставление портов для моего порта 8081, но я точно не знаю, как
  • Поскольку prometheus должен работать на другом порту, я должен предоставлять службу kubernetes для порта 8081 на уровне kubernetes?
  • Нужно ли определять ресурсы, относящиеся к безопасности в kubernetes?

В качестве примечания. На данный момент меня не волнуют проблемы с масштабируемостью, я думаю, что один сервер Prometheus справится с этой задачей, но мне придется добавить Grafana на картинку.

Ответы [ 2 ]

3 голосов
/ 20 января 2020

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

prometheus.io/scrape: "true"
prometheus.io/path=/manage/prometheus
prometheus.io/port=8081
prometheus.io/scheme=http

Пружинный загрузочный микрометр пример с Прометеем на Куберне. Развертывание Прометея Руководство .

1 голос
/ 20 января 2020

Чтобы Prometheus собирал метрики из вашего приложения Spring Boot, вам нужно добавить к нему определенные c зависимости. Здесь вы можете найти руководство, показывающее, как это сделать: Мониторинг показателей Spring Boot с помощью Prometheus & Grafana . Вот пример:

<dependency>  
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_spring_boot</artifactId>
            <version>0.1.0</version>
        </dependency>

        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>0.1.0</version>
        </dependency>

Если вы хотите использовать немного другую стратегию, вы также можете проверить эту: Мониторинг приложений Spring Boot с помощью Prometheus и Grafana :

Чтобы сравнить производительность различных JDK для реактивных сервисов Spring Boot, я сделал настройку, в которой приложение Spring Boot помещается в контейнер Docker. Это позволяет легко создавать разные контейнеры для разных JDK с одним и тем же приложением Spring Boot. Приложение Spring Boot предоставляет метрики для Прометея. Графана умеет читать эти метрики и позволяет делать из них приятные визуализации. В этом блоге описывается настройка, которая поможет вам начать работу за считанные минуты.

Пожалуйста, дайте мне знать, если это помогло.

...