Применение АппОптима / Мониторинг контейнерных платформ / Kubernetes / Метрики Prometheus
Prometheus - это популярный в сообществе Kubernetes инструментарий для мониторинга и оповещения с открытым исходным кодом. Prometheus извлекает метрики из нескольких конечных точек HTTP, которые предоставляют метрики в формате OpenMetrics.
АппОптима объединяет метрики датчиков и счетчиков от экспортеров Prometheus в Kubernetes и делает их доступными для построения диаграмм, предупреждений и анализа. См. Список доступных экспортеров в документации Prometheus.
Предпосылки
- В меню АппОптима , перейдите в Настройки > Облако и виртуализация > Kubernetes и включите чекбокс Мониторить аннотированные экспортеры Prometheus
Добавление комментариев к модулям экспортера Prometheus
АппОптима собирает метрики из любых модулей, которые аннотированы с помощью metrics.{server-name}.com/scrape
свойства, установленного true
в определении модуля.
В зависимости от фактического экспортера в модуле вам может потребоваться установить дополнительные аннотации к определению модуля, чтобы АппОптима могла правильно принимать эти показатели.
Требования для включения парсинга метрик
Установите metrics.{server-name}.com/scrape
значение, 'true'
чтобы разрешить АппОптима собирать метрики Prometheus, представленные для этого модуля.
Требования для порта метрик
По умолчанию метрики Prometheus доступны на первом открытом TCP-порту модуля. Установите metrics.{server-name}.com/port
соответствующий порт.
Путь к конечной точке метрик по желанию
Используется metrics.{server-name}.com/path
для переопределения /metrics
конечной точки Prometheus по умолчанию ( ).
HTTP / HTTPS по желанию
Установите metrics.{server-name}.com/secure
на , true
если вы хотите , чтобы собрать метрики, которые подвергаются воздействию со стороны экспортера через HTTPS. Значение по умолчанию false
, потому что большинство экспортеров предоставляют свои метрики через HTTP.
Отфильтровать метрики по желанию
Используется metrics.{server-name}.com/filter
для определения фильтра, который позволяет вам включать ( "mode": "include"
) или исключать (( "mode": "exclude"
)) список показателей. Если аннотация фильтра не определена, собираются все показатели. Синтаксис фильтра также поддерживает звездочку ( *
). Этот символ позволяет фильтровать ключи показателей, которые начинаются, заканчиваются или содержат определенную последовательность, например:
redis_db*
фильтрует все показатели, начинающиеся сredis_db
*db*
фильтрует все показатели, содержащиеdb
*bytes
фильтрует все показатели, заканчивающиеся наbytes
Примечание. Использование *
символа в фильтре, например redis_*_bytes
, не поддерживается.
В этом примере показано простое определение модуля с аннотациями.
Примечание: Значения metrics.{server-name}.com/path
, metrics.{server-name}.com/port
и metrics.{server-name}.com/secure
зависят от экспортера вы используете; адаптируйте его к вашим требованиям. Чтобы определить значение порта, см. Раздел «Распределение портов по умолчанию» для получения списка общих портов для известных экспортеров.
<apiVersion: v1 kind: Pod metadata: name: mypod annotations: metrics.{server-name}.com/scrape: 'true' metrics.{server-name}.com/path: '/path/to-metrics' metrics.{server-name}.com/port: '9001' metrics.{server-name}.com/secure: 'false' metrics.{server-name}.com/filter: | { "mode": "include", "names": [ "redis_db_keys", "redis_db_values" ] } spec: containers: - name: mycontainer image: myregistry/myimage:mytag
Дополнительные сведения о том, как добавлять аннотации в модули, см. В разделе " Рекомендации по аннотациям" .
Аннотирование сервисов Kubernetes
Требования
- АктивныйШлюз версии 1.215+ или АппОптима Operator, работающий на АппОптима версии 1.215
- Добавьте разрешение на доступ к службам в Kubernetes ClusterRole (не требуется для пользователей АппОптима Operator, так как это включено по умолчанию в clusterrole-kubernetes-monitoring.yaml )
Вы также можете аннотировать службы вместо модулей. Модули, соответствующие сервисам Kubernetes, автоматически обнаруживаются с помощью селектора меток сервиса, который очищает все модули, принадлежащие сервису.
Примечание . Служба и соответствующие модули должны находиться в одном пространстве имен.
У вас могут быть аннотации к сервисам и модулям одновременно. Если результирующие конечные точки метрики идентичны, они очищаются только один раз.
Для получения дополнительной информации о том, как аннотировать сервисы, см. Рекомендации по аннотации .
Проверка подлинности клиента по желанию
Требования
- АктивныйШлюз версии 1.215+, работающий внутри кластера Kubernetes, или оператор АппОптима, работающий на АппОптима версии 1.215 (классический АктивныйШлюз, работающий на виртуальной машине, здесь не будет работать)
- Добавьте разрешения на доступ
secrets
иconfigmaps
в Kubernetes ClusterRole
Некоторым системам требуется дополнительная аутентификация, прежде чем АппОптима к ним подключиться. Для таких случаев вы можете установить следующие дополнительные аннотации:
metrics.{server-name}.com/tls.ca.crt
metrics.{server-name}.com/tls.crt
metrics.{server-name}.com/tls.key
Требуемые сертификаты / ключи автоматически загружаются из secret
/ configmaps
указываются в значении аннотации.
Схема для значений аннотаций <configmap|secret>:<namespace>:<resource_name>:<field_name_in_data_section>
.
Например, для etcd аннотации могут выглядеть следующим образом:
<metrics.{server-name}.com/tls.ca.crt='configmap:kubernetes-config:etcd-metric-serving-ca:ca-bundle.crt' metrics.{server-name}.com/tls.crt='secret:kubernetes-config:etcd-metric-client:tls.crt' metrics.{server-name}.com/tls.key='secret:kubernetes-config:etcd-metric-client:tls.key'
Авторизация управления доступом на основе ролей (RBAC) для приема метрик
Требования
- АктивныйШлюз версии 1.217+, работающий в кластере Kubernetes, или оператор АппОптима, работающий на АппОптима версии 1.217 (классический АктивныйШлюз, работающий на виртуальной машине, здесь не будет работать)
Некоторые модули экспорта, такие как node-exporter , kube-state-metrics и openshift-state-metrics, требуют авторизации RBAC . Для этих модулей экспорта добавьте следующую аннотацию:
metrics.{server-name}.com/http.auth: 'builtin:default'
Рекомендации по работе с аннотациями
Есть несколько способов разместить аннотации на модулях или сервисах. См. Ниже, чтобы решить, какой подход лучше всего подходит для вашего сценария.
Рекомендуется, если у вас есть полный контроль
Если у вас есть полный контроль над шаблоном модуля или определением службы, мы рекомендуем добавлять аннотации, редактируя эти файлы. Это самый надежный способ обеспечить постоянство аннотаций. Мы рекомендуем редактировать шаблон модуля вместо редактирования определения службы, поскольку для этого требуется меньше разрешений (например, если у вас нет доступа к службам).
Pro: аннотации являются постоянными, поэтому их не нужно воссоздавать, если модуль удален.
Варианты, если у вас нет полного контроля
Если у вас нет полного контроля над шаблоном модуля, у вас есть следующие возможности:
- Аннотировать существующую службу (в YAML)
Предварительные требования: иметь контроль над существующим YAML и разрешение на редактирование существующего объекта службы Kubernetes.
Pro: аннотации постоянны.
Против: Нет.
- Создать новый сервис (в YAML)
Предварительные требования Новая служба должна иметь префикс {server-name}-monitoring-
, находиться в том же пространстве имен, что и модули, и иметь разрешение на создание объекта службы Kubernetes.
Pro: у вас есть контроль над исходной рабочей нагрузкой / услугой.
Против: требуется синхронизация селектора меток. Мы поддерживаем только селектор меток.
Пример:
Примечание: Значения metrics.{server-name}.com/path
, metrics.{server-name}.com/port
и metrics.{server-name}.com/secure
зависят от используемого экспортера; адаптируйте его к вашим требованиям. Чтобы определить значение порта, см. Раздел «Распределение портов по умолчанию» для получения списка общих портов для известных экспортеров.
<kind: Service apiVersion: v1 metadata: name: {server-name}-monitoring-node-exporter namespace: kubernetes-monitoring annotations: metrics.{server-name}.com/port: '9100' metrics.{server-name}.com/scrape: 'true' metrics.{server-name}.com/secure: 'true' metrics.{server-name}.com/path: '/metrics' spec: ports: - name: {server-name}-monitoring-node-exporter-port port: 9100 selector: app.kubernetes.io/name: node-exporter clusterIP: None
- Аннотировать существующую службу (в интерфейсе командной строки)
Предварительные требования: иметь разрешение на редактирование существующего объекта службы Kubernetes.
Плюс: синхронизация селектора меток не требуется.
Против: аннотации не являются постоянными, поэтому изменения будут перезаписывать аннотации. Мы поддерживаем только селектор меток.
- Аннотировать существующие модули (в интерфейсе командной строки)
Предпосылки: Нет.
Плюс: вы можете быстро протестировать прием метрик.
Против: аннотации не являются постоянными, поэтому изменения будут перезаписывать аннотации.
Просмотр показателей на панели инструментов
Показатели из экспортеров Prometheus доступны в "Визуалиция данных" для создания настраиваемых диаграмм. Выберите метрику и Запуск запроса .
Вы можете просто найти метрические ключи всех доступных метрик и определить, как вы хотите анализировать и составлять диаграммы. После этого вы можете закрепить свои графики на дашборде.
Оповещения о показателях
Вы также можете создавать настраиваемые оповещения на основе очищенных метрик Prometheus. В меню навигации выберите « Настройки» > « Обнаружение аномалий» > « События метрик» и выберите « Добавить событие метрики» . На странице « События метрик » найдите метрику Prometheus, используя ее ключ, и определите свое оповещение.
Ограничения
Текущие ограничения интеграции метрик Prometheus следующие:
- Эта интеграция поддерживает только метрические типы Prometheus счетчиков и датчиков .
- Если вы запускаете несколько экспортеров в модуле, вам необходимо настроить
metrics.{server-name}.com/port
аннотацию, чтобы направить АппОптима к той, которую она должна использовать. - Эта интеграция поддерживает до 1000 модулей с 200 метрическими точками данных в минуту.
Мониторинг потребления
Метрики Prometheus в средах Kubernetes потребляют лицензии ВИД .
- Метрики Prometheus от экспортеров, которые работают на хостах, контролируемых ЕдинымАгентом, сначала вычитаются из квоты включенных метрик на единицу хоста . После превышения этой квоты оставшиеся метрики потребляют ВИД.
- Метрики Prometheus от экспортеров, которые работают на хостах, которые не отслеживаются ЕдинымАгентом, всегда используют ВИД .