Быстрый старт
Сервис мониторинга (услуга 1.16) позволяет собирать следующие типы метрик:
- счетчик (Counter) — хранит значения, которые увеличиваются с течением времени (например, количество запросов к серверу);
- шкала (Gauge) — хранит значения, которые с течением времени могут как увеличиваться, так и уменьшаться (например, объем используемой оперативной памяти или количество операций ввода-вывода);
- гистограмма (Histogram) — хранит информацию об изменении некоторого параметра в течение определенного промежутка (например, общее количество запросов к серверу в период с 11 до 12 часов и количество запросов к этому же серверов в период с 11.30 до 11.40);
- сводка результатов (DistributionSummary) — как и гистограмма, хранит информацию об изменении значения некоторого параметра за временной интервал, но также позволяет рассчитывать квантили для скользящих временных интервалов.
Существуют различные библиотеки для сбора метрик в формате Prometheus.
Ниже указана последовательность действий для выставления метрик в формате Prometheus из прикладного приложения, написанного на Spring Boot.
-
Добавьте зависимости на Spring Boot Actuator и Micrometer в maven репозиторий:pom.xml type=xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
-
Укажите порт Actuator, фильтр включенных endpoints и системные теги, которые автоматически будут добавлены к прикладным метрикам (файл
application.yml
):application.yml type=ymlserver: port: 8080 management: endpoint: health.show-details: always endpoints: web: exposure: include: "*" metrics: tags: application: ${spring.application.name} namespace: ${POD_NAMESPACE:local} pod: ${POD_NAME:local} node_name: ${NODE_NAME:local}
-
Создайте прикладные метрики в проекте (с помощью micrometer):CounterController.java type=java
@RestController public class CounterController { private static final String COUNTER_WITH_TAG_NAME = "simple.counterWithTags"; private static final String COUNTER_WITH_TAG_DESCRIPTION = "Just a simple counter with tags"; private static final String TAG_NAME_1 = "terbank"; private static final String TAG_NAME_2 = "vsp"; private final MeterRegistry meterRegistry; private Counter simpleCounter; private Counter simpleCounterWithTags; private Counter simpleCounterWithTags2; public CounterController(MeterRegistry meterRegistry) { this.meterRegistry = meterRegistry; } /** * Инициализация метрик типа Counter */ @PostConstruct public void init() { simpleCounter = Counter.builder("simple.counter") .description("Just a simple counter") .register(meterRegistry); simpleCounterWithTags = Counter.builder(COUNTER_WITH_TAG_NAME) .description(COUNTER_WITH_TAG_DESCRIPTION) .tag(TAG_NAME_1, "sib") .tag(TAG_NAME_2, "111") .register(meterRegistry); simpleCounterWithTags2 = Counter.builder(COUNTER_WITH_TAG_NAME) .description(COUNTER_WITH_TAG_DESCRIPTION) .tag(TAG_NAME_1, "msk") .tag(TAG_NAME_2, "111") .register(meterRegistry); } @PutMapping("/counter") public String incrementCounter() { simpleCounter.increment(); return String.format("Counter has been increases\nCurrent value: %s", simpleCounter.count()); } @PutMapping("/counter-with-tags/terbank/sib") public String incrementCounterTags1() { simpleCounterWithTags.increment(1); return String.format("Counter has been increases\nCurrent value: %s", simpleCounterWithTags.count()); } @PutMapping("/counter-with-tags/terbank/msk") public String incrementCounterTags2() { simpleCounterWithTags2.increment(2); return String.format("Counter has been increases\nCurrent value: %s", simpleCounterWithTags2.count()); } }
С помощью REST API сервиса возможна генерация собственных метрик типа Counter:Sending_Example type=shcurl -X PUT "/demo/monitoring-rest/counter" -H "accept: */*" curl -X PUT "/demo/monitoring-rest/counter-with-tags/terbank/msk" -H "accept: */*"
В каждом из ответов можно увидеть, что общий счетчик метрик был увеличен на n-ное количество. Пример:AnswerCounter has been increases Current value: 1.0
Настройка конфигурации для Kubernetes
Способ 1 (рекомендуемый):
Для того, чтобы Prometheus мог идентифицировать сервис и получать от него информацию, необходимо добавить аннотации на уровне развёртывания ПО (файл
Deployment.yml
) и указать путь до метрик приложения.Deployment.yml type=ymlapiVersion: apps/v1 kind: Deployment spec: template: metadata: annotations: prometheus.io.path: /actuator/prometheus prometheus.io.port: '8080' prometheus.io.scrape: 'true' spec: containers: ports: - containerPort: 8080
Способ 2:
Для того, чтобы Prometheus мог идентифицировать сервис и получать от него информацию, необходимо создать Service и указать путь до метрик приложения.
Service.yml type=ymlapiVersion: v1 kind: Service metadata: name: monitoring-rest annotations: description: "Exposes Prometheus App by CLuster Ip" prometheus.io.scrape: "true" prometheus.io.path: "/monitoring-rest/actuator/prometheus" prometheus.io.port: "8081" labels: app: monitoring-rest spec: type: LoadBalancer ports: - name: http port: 8080 targetPort: 8080 - name: http-actuator port: 8081 targetPort: 8081 selector: app: monitoring-rest
Графики мониторинга метрик можно увидеть в Grafana.
Логин/пароль для входа в Grafana: grafana_login/grafana_password
.

Увеличить
Ознакомиться с уже построенным дашбордом по сценарию выше можно в разделе демопримера.
Графики мониторинга метрик можно увидеть в Grafana, построив его вручную или импортировав из файла. Последовательность действий описана в разделе Отслеживание метрик.
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
Мониторинг
Генерация метрик, их получение и просмотр в Grafana