Отправка метрик Prometheus в рабочую область Log Analytics с помощью аналитики контейнеров
В этой статье описывается, как отправлять метрики Prometheus из кластера Kubernetes, отслеживаемого аналитикой контейнеров, в рабочую область Log Analytics. Прежде чем выполнить эту конфигурацию, необходимо сначала убедиться, что вы удаляете метрики Prometheus из кластера с помощью управляемой службы Azure Monitor для Prometheus, который является рекомендуемыми способами для мониторинга кластеров. Используйте конфигурацию, описанную в этой статье, только если вы также хотите отправить эти данные в рабочую область Log Analytics, где можно проанализировать ее с помощью запросов журналов и оповещений поиска по журналам.
Для этой конфигурации требуется настроить надстройку мониторинга для агента Azure Monitor, которая является той же, которая используется аналитикой контейнеров для отправки данных в рабочую область Log Analytics. Для этого необходимо предоставить конечную точку метрик Prometheus через экспортеров или модулей pod, а затем настроить надстройку мониторинга для агента Azure Monitor, используемого аналитикой контейнеров, как показано на следующей схеме.
Параметры очистки Prometheus (для метрик, хранящихся в виде журналов)
Активная очистка метрик из Prometheus выполняется с одной из двух перспектив ниже, а метрики отправляются в настроенную рабочую область Log Analytics:
- На уровне кластера: определено в разделе ConfigMap [Prometheus data_collection_settings.cluster].
- На уровне узла: определено в разделе ConfigMap [Prometheus_data_collection_settings.node].
Конечная точка | Область | Пример |
---|---|---|
Заметка Pod | На уровне кластера | prometheus.io/scrape: "true" prometheus.io/path: "/mymetrics" prometheus.io/port: "8000" prometheus.io/scheme: "http" |
Служба Kubernetes | На уровне кластера | http://my-service-dns.my-namespace:9100/metrics http://metrics-server.kube-system.svc.cluster.local/metrics |
URL-адрес/конечная точка | На узел или на уровне кластера | http://myurl:9101/metrics |
Если указан URL-адрес, то аналитика контейнеров собирает только данные конечной точки. Если указана служба Kubernetes, имя службы разрешается с помощью DNS-сервера кластера для получения IP-адреса, а затем извлекаются данные разрешенной службы.
Область | Ключ | Тип данных | значение | Описание |
---|---|---|---|---|
На уровне кластера | Укажите один из следующих трех методов получения конечных точек для метрик. | |||
urls |
Строка | Массив с разделителями-запятыми | Конечная точка HTTP (указан IP-адрес или допустимый URL-путь). Например: urls=[$NODE_IP/metrics] . ($NODE_IP — это специальный параметр для аналитики контейнеров, который можно использовать вместо IP-адреса узла. Необходимо использовать прописные буквы.) |
|
kubernetes_services |
Строка | Массив с разделителями-запятыми | Массив служб Kubernetes для сбора метрик из kube-state-metrics. Здесь следует использовать полные доменные имена. Например: kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics] . |
|
monitor_kubernetes_pods |
Логический | true или false | Если задано значение true в параметрах на уровне кластера, агент аналитики контейнеров удаляет модули pod Kubernetes во всем кластере для следующих заметок Prometheus:prometheus.io/scrape: prometheus.io/scheme: prometheus.io/path: prometheus.io/port: |
|
prometheus.io/scrape |
Логический | true или false | Включает извлечение объекта pod, monitor_kubernetes_pods должен иметь значение true . |
|
prometheus.io/scheme |
Строка | HTTP | По умолчанию для извлечения данных по HTTP. | |
prometheus.io/path |
Строка | Массив с разделителями-запятыми | Путь к HTTP-ресурсу, на котором следует получать метрики. Если для пути метрик не указано /metrics , укажите его с помощью этой заметки. |
|
prometheus.io/port |
Строка | 9102 | Укажите порт для сбора данных. Если порт не задан, по умолчанию используется значение 9102. | |
monitor_kubernetes_pods_namespaces |
Строка | Массив с разделителями-запятыми | Список разрешенных пространств имен для сбора метрик из модулей Kubernetes. Например: monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"] |
|
На уровне узла | urls |
Строка | Массив с разделителями-запятыми | Конечная точка HTTP (указан IP-адрес или допустимый URL-путь). Например: urls=[$NODE_IP/metrics] . ($NODE_IP — это специальный параметр для аналитики контейнеров, который можно использовать вместо IP-адреса узла. Необходимо использовать прописные буквы.) |
На уровне узла или на уровне кластера | interval |
Строка | 60 с | Интервал сбора по умолчанию равен одной минуте (60 секунд). В параметрах сбора можно изменить единицы времени для [prometheus_data_collection_settings.node] и (или) [prometheus_data_collection_settings.cluster], указать, например, с, мин., час. |
На уровне узла или на уровне кластера | fieldpass fielddrop |
Строка | Массив с разделителями-запятыми | Можно указать определенные метрики, которые следует или не следует собирать в конечной точке, задав список разрешений (fieldpass ) и запретов (fielddrop ). Сначала необходимо задать список разрешений. |
Настройка ConfigMaps для указания конфигурации скребка Prometheus (для метрик, хранящихся в виде журналов)
Выполните следующие действия, чтобы настроить файл конфигурации ConfigMap для кластера. ConfigMaps представляет собой глобальный список, и к агенту можно применить только один ConfigMap. Другой список ConfigMaps, аннулирующий сбор данных, недопустим.
Скачайте файл YAML шаблона ConfigMap и сохраните его как container-azm-ms-agentconfig.yaml. Если вы уже развернули ConfigMap в кластере и хотите обновить его, используя новую конфигурацию, можно изменить ранее использовавшийся файл ConfigMap,
Чтобы извлекать метрики Prometheus, измените YAML-файл ConfigMap, дополнив настройки.
Для сбора данных из служб Kubernetes на уровне кластера, настройте файл ConfigMap, используя следующий пример.
prometheus-data-collection-settings: |- # Custom Prometheus metrics data collection settings [prometheus_data_collection_settings.cluster] interval = "1m" ## Valid time units are s, m, h. fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
Выполните следующую команду kubectl:
kubectl apply -f <configmap_yaml_file.yaml>
.Пример:
kubectl apply -f container-azm-ms-agentconfig.yaml
.
Изменение конфигурации и ее вступление в силу может занять несколько минут. Все модули pod ama-logs в кластере перезагрузятся. По завершении перезапусков появится сообщение, подобное приведенному ниже, с результатом configmap "container-azm-ms-agentconfig" created
.
Проверка конфигурации
Чтобы убедиться в успешном применении конфигурации к кластеру, выполните следующую команду для проверки журналов из объекта pod агента: kubectl logs ama-logs-fdf58 -n=kube-system
.
Если из модулей pod агента Azure Monitor возникают ошибки конфигурации, выходные данные отображают ошибки, аналогичные следующему примеру:
***************Start Config Processing********************
config::unsupported/missing config schema version - 'v21' , using defaults
Ошибки, связанные с применением изменений конфигурации, также доступны для просмотра. Следующие параметры позволяют выполнить дополнительные действия по устранению неполадок в изменениях конфигурации и при сборе метрик Prometheus.
Из журналов объектов pod агента с помощью той же команды
kubectl logs
.Из динамических данных. В журналах динамических данных отображаются ошибки, аналогичные следующему примеру:
2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
Из таблицы KubeMonAgentEvents в рабочей области Log Analytics. Данные отправляются каждый час с уровнем серьезности Предупреждение для ошибок сбора и уровнем Ошибка для ошибок конфигурации. Если ошибки отсутствуют, запись в таблице содержит данные с информацией о серьезности, которая не сообщает об ошибках. Свойство Теги содержит дополнительные сведения об объекте pod и идентификаторе контейнера, в которых произошла ошибка, а также о первом и последнем случае ошибок и их количестве за последний час.
Для Azure Red Hat OpenShift версии 3.x и версии 4.x проверьте журналы агента Azure Monitor, выполнив поиск в таблице ContainerLog , чтобы проверить, включена ли коллекция журналов openshift-azure-log.
Ошибки предотвращают синтаксический анализ файла агентом Azure Monitor, что приводит к перезапуску и использованию конфигурации по умолчанию. После исправления ошибок в ConfigMap для кластеров, отличных от Azure Red Hat OpenShift версии 3.x, сохраните YAML-файл и примените обновленный ConfigMaps, выполнив команду kubectl apply -f <configmap_yaml_file.yaml
.
Для Azure Red Hat OpenShift версии 3.x измените и сохраните обновленный ConfigMaps, выполнив команду oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging
.
Запрос данных метрик Prometheus
Чтобы просмотреть метрики Prometheus, скребированные Azure Monitor, и любые ошибки конфигурации и слома, сообщаемые агентом, просмотрите данные метрик запроса Prometheus.
Просмотр метрик Prometheus в Grafana
Аналитика контейнеров поддерживает просмотр метрик, хранящихся в рабочей области Log Analytics, на панелях мониторинга Grafana. Мы предоставили шаблон, который можно скачать из репозитория панели мониторинга Grafana. Используйте его в качестве отправной точки и образца, когда будете учиться запрашивать другие данных из отслеживаемых кластеров для визуализации на пользовательских панелях мониторинга Grafana.