Сборщик метрик SCDF - включает метрики Прометея

Я использую SCDF с метриками Spring Boot 2.x и сборщиком метрик SCDF для сбора метрик из моего приложения Spring Boot. Я действительно не понимаю логику коллекционера относительно aggregateMetricsданные.

Когда я выбираю список метрик, собранных для моего потока, у меня есть только тот, который начинается с integration.channel.*и, таким образом, я имею только среднее значение. Я перепробовал все, чтобы увидеть другие метрики, похожие на те, которые выставлены /actuator/prometheus конечная точка.

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

{
  "_embedded": {
    "streamMetricsList": [
      {
        "name": "poc-stream",
        "applications": [
          {
            "name": "poc-message-sink",
            "instances": [
              {
                "guid": "poc-stream-poc-message-sink-v7-75b8f4dcff-29fst",
                "key": "poc-stream.poc-message-sink.poc-stream-poc-message-sink-v7-75b8f4dcff-29fst",
                "properties": {
                  "spring.cloud.dataflow.stream.app.label": "poc-message-sink",
                  "spring.application.name": "poc-message-sink",
                  "spring.cloud.dataflow.stream.name": "poc-stream",
                  "spring.cloud.dataflow.stream.app.type": "sink",
                  "spring.cloud.application.guid": "poc-stream-poc-message-sink-v7-75b8f4dcff-29fst",
                  "spring.cloud.application.group": "poc-stream",
                  "spring.cloud.dataflow.stream.metrics.version": "2.0"
                },
                "metrics": [
                  {
                    "name": "integration.channel.input.send.mean",
                    "value": 0,
                    "timestamp": "2018-10-25T16:34:39.889Z"
                  }
                ]
              }
            ],
            "aggregateMetrics": [
              {
                "name": "integration.channel.input.send.mean",
                "value": 0,
                "timestamp": "2018-10-25T16:34:52.894Z"
              }
            ]
          },
...

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

Я прочитал это

При развертывании приложений Data Flow устанавливает свойство spring.cloud.stream.metrics.properties, как показано в следующем примере:

spring.cloud.stream.metrics.properties = spring.application.name, spring.application.index, spring.cloud.application. *, spring.cloud.dataflow. *

Значения этих ключей используются в качестве тегов для выполнения агрегации. В случае приложений 2.x эти значения ключей отображаются непосредственно на теги в библиотеке микрометра. Свойство spring.cloud.application.guid можно использовать для отслеживания конкретного экземпляра приложения, сгенерировавшего метрику.

Значит ли это, что мне нужно самому добавить эти свойства в теги всех моих метрик? Я знаю, что могу сделать это, имея Боб MeterRegistryCustomizerвозвращая следующее: registry -> registry.config().commonTags(tags) с тегами, имеющими свойства, которые SCDF обычно устанавливает для себя integrationметрики. Или SCDF добавляет ко ВСЕМ метрикам свои свойства?

Спасибо!

1 ответ

Решение

В то время как ваше наблюдение о MetricsCollector это "в целом" правильно, я считаю, что есть альтернативный (и, возможно, более чистый) способ достичь того, что вы пытались, используя метод сбора метрик микрометра SCDF. Я постараюсь объяснить оба подхода ниже.

Поскольку MetricsCollector предшествует во времени инфраструктуре Micrometer, они оба реализуют совершенно разные потоки обработки метрик. Основной целью Metrics Collector 2.x было обеспечение обратной совместимости с метриками SpringBoot 1.x. MetricsCollector 2.x позволяет смешивать метрики, поступающие из обоих SpringBoot 1.x (предварительно микрометр) и Spring Boot 2.x (например, микрометр) приложение запускается. Следствием этого решения является то, что Collector 2.x поддерживает только общий знаменатель метрик, доступных в Boot 1.x и 2.x. Это требование обеспечивается предварительной фильтрацией только integration.channel.* метрики. В настоящее время вы не сможете добавить больше метрик без изменения кода сборщика метрик. Если вы считаете, что поддержка различных метрик микрометра важнее, чем обратная совместимость с Boot 1.x, откройте новую проблему в проекте Metrics Collector. Тем не менее, я считаю, что подход, описанный ниже, лучше подходит для вашего случая!

В отличие от подхода MetricsCollector, "чистые" микрометрические метрики отправляются непосредственно в выбранный реестр метрик (например, Prometheus, InfluxDB, Atlas и т. Д.). Как показано в примере, собранные метрики можно анализировать и визуализировать с помощью таких инструментов, как Grafana. Следуйте образцам метрик SCDF, чтобы настроить коллекцию метрик через InfluxDB (или Prometheus) и Grafana. Позже вы сможете изучить любые готовые или нестандартные показатели микрометра. Недостатком этого подхода (на данный момент) является то, что вы не сможете визуализировать эти показатели в конвейере пользовательского интерфейса SCDF. Тем не менее, если вам важно иметь такую ​​визуализацию внутри пользовательского интерфейса SCDF, откройте новую проблему в проекте SCDF (у меня есть WIP для реестра микрометров Altals).

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

Ура!

Другие вопросы по тегам