Прометей поддерживает удаление нескольких экземпляров приложения. Приложения, которые работают в оркестрированных средах, должны обнаруживаться динамически, так как их IP-адреса будут меняться. Прометей может быть настроен на использование API Kubernetes для динамического обнаружения изменений в списке запущенных экземпляров.
Ниже приведен минималистичный пример использования Prometheus инструментов для нескольких приложений.
Конфигурация Прометея
Мы настраиваем Prometheus для обнаружения модулей нашего config-example
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
global: scrape_interval: 15s external_labels: monitor: 'example-monitor' scrape_configs: - job_name: 'example-metric' scrape_interval: 5s metrics_path: /metrics/ scheme: https basic_auth: username: admin password: adminadmin tls_config: insecure_skip_verify: true kubernetes_sd_configs: - role: endpoints namespaces: names: - default relabel_configs: - source_labels: [__meta_kubernetes_service_label_app] separator: ; regex: config-example replacement: $ 1 action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] separator: ; regex: https replacement: $ 1 action: keep - source_labels: [__meta_kubernetes_namespace] separator: ; regex: (.*) target_label: namespace replacement: $ 1 action: replace - source_labels: [__meta_kubernetes_pod_name] separator: ; regex: (.*) target_label: pod replacement: $ 1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: service replacement: $ 1 action: replace - source_labels: [__meta_kubernetes_service_name] separator: ; regex: (.*) target_label: job replacement: ${ 1 } action: replace - separator: ; regex: (.*) target_label: endpoint replacement: https action: replace |
Нам нужно настроить метку app
(здесь config-example
) и имя порта ( https
), под которым доступна конечная точка мониторинга.
Инструментированное приложение
В этом примере используется конечная точка MicroProfile Metrics, которая работает поверх Open Liberty. Приложение предоставляет метрики в формате Prometheus через порт 9443
и путь /metrics/
.
Здесь вы можете увидеть пример службы и развертывания:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
kind: Service apiVersion: v1 metadata: name: config-example labels: app: config-example spec: selector: app: config-example ports: - port: 9443 name: https - port: 9080 name: http |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
kind: Deployment apiVersion: apps/v1beta1 metadata: name: config-example spec: replicas: 2 template: metadata: labels: app: config-example spec: containers: - name: config-example image: sdaschner/config-example: 1 # ... |
Вы можете найти полный пример, включая работающее приложение на GitHub.
Установка Прометея и RBAC
Чтобы пример работал для настройки RBAC Kubernetes, учетная запись службы Prometheus должна иметь правильные разрешения. Поэтому мы создаем учетную запись службы и соответствующие роли кластера, как указано в определениях YAML. Точно так же мы указываем учетную запись службы при создании развертывания Prometheus.
Мы создаем развертывание и сервис для нашего экземпляра Prometheus.
01
02
03
04
05
06
07
08
09
10
11
12
|
kind: Service apiVersion: v1 metadata: name: prometheus labels: app: prometheus spec: selector: app: prometheus ports: - port: 9090 name: http |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
kind: Deployment apiVersion: apps/v1beta1 metadata: name: prometheus spec: replicas: 1 template: metadata: labels: app: prometheus version: v1 spec: serviceAccountName: prometheus containers: - name: prometheus image: prom/prometheus:v2. 7.1 ports: - containerPort: 9090 volumeMounts: - name: prometheus-config-volume mountPath: /etc/prometheus/prometheus.yml subPath: prometheus.yml volumes: - name: prometheus-config-volume configMap: name: prometheus-config restartPolicy: Always |
Ранее указанная конфигурация может быть введена в экземпляр из карты конфигурации.
1
2
3
4
5
6
7
8
9
|
kind: ConfigMap apiVersion: v1 metadata: name: prometheus-config data: prometheus.yml: | global: scrape_interval: 15s # content as shown earlier ... |
Для полного объяснения конфигурации Prometheus, посмотрите документацию .
Доступ к целям
Работающий экземпляр Prometheus теперь может обнаруживать оба запущенных примера приложения конфигурации, которые работают как модули Kubernetes:
1
|
gt; kubectl get pods NAME READY STATUS RESTARTS AGE config-example-69974cbc96-dqd96 1 / 1 Running 0 4m config-example-69974cbc96-zstg7 1 / 1 Running 0 4m grafana-8694db9d4f-nvn5s 1 / 1 Running 0 3m prometheus-594dd9cdb8-95ftz 1 / 1 Running 0 3m |
Мы можем видеть фактические цели, включая их IP-адрес в конфигурации Prometheus.
Посмотрите полный пример на GitHub . Вы также можете увидеть следующее видео о том, как реализовать бизнес-метрики в приложениях Java EE с помощью MicroProfile.
Для более сложных примеров микросервиса, которые определяют гораздо больше приложений, этот подход с использованием простой конфигурации Prometheus может быть немного громоздким. Чтобы свести к минимуму стандартный код, разработчики могут использовать решения, которые абстрагируются от конфигурации более низкого уровня, например, Prometheus Operator . В следующем посте мы увидим, как Prometheus Operator облегчает настройку приложений.
Удачного мониторинга!
Опубликовано на Java Code Geeks с разрешения Себастьяна Дашнера, партнера нашей программы JCG. Посмотрите оригинальную статью здесь: Откройте для себя приложения, работающие в Kubernetes с Prometheus Мнения, высказанные участниками Java Code Geeks, являются их собственными. |