Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Настройка коллекции метрик Prometheus из кластера Kubernetes описывает, как использовать ConfigMap для настройки срезов метрик Prometheus из целевых объектов по умолчанию в кластере Kubernetes. В этой статье описывается, как использовать ConfigMap для создания пользовательских заданий сбора данных для дальнейшей настройки и добавления дополнительных целевых назначений.
ConfigMaps
В следующей таблице описаны ConfigMaps, используемые для создания пользовательских заданий сбора данных. Эти ConfigMaps по умолчанию не существуют в кластере, если включен управляемый Prometheus.
| Карта конфигурации | Description |
|---|---|
ama-metrics-prometheus-config (Рекомендуется) |
Когда создается ConfigMap с этим именем, задания слома, определенные в нем, выполняются из модуля pod реплики метрик Azure Monitor, работающего в кластере. |
ama-metrics-prometheus-config-node (Дополнительно) |
Предоставьте конфигурацию сбора данных Prometheus для дополнения DaemonSet, которое выполняется на каждом узле Linux в кластере, и для всех целевых узлов на каждом узле. Дополнительные инструкции см. в разделе "Расширенная настройка". |
ama-metrics-prometheus-config-node-windows (Дополнительно) |
Предоставьте конфигурацию схемы сбора Prometheus для дополнения DaemonSet, которое запускается на каждом узле Windows в кластере и на любом целевом ресурсе на уровне узла. Дополнительные инструкции см. в разделе "Расширенная настройка". |
Создание файла конфигурации Prometheus
Вместо прямого изменения ama-metrics-prometheus-configпроще создать файл конфигурации, а затем преобразовать его в ConfigMap. Дополнительные сведения о разных разделах этого файла см. в разделе Параметры конфигурации сбора данных ниже.
Создайте файл конфигурации Prometheus с именем prometheus-config в следующем формате. В этом списке перечислены конфигурации сбора данных в разделе scrape_configs и по желанию можно использовать глобальный раздел для настройки глобальных scrape_interval, scrape_timeout, а также external_labels. Дополнительные сведения о параметрах настройки снятия метрик см. на Prometheus.io в справочнике по настройке снятия метрик.
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Ниже приведен пример файла конфигурации Prometheus scrape:
global:
scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
scrape_interval: 60s
static_configs:
- targets: ['my-static-service.svc.cluster.local:1234']
- job_name: prometheus_example_app
scheme: http
kubernetes_sd_configs:
- role: service
relabel_configs:
- source_labels: [__meta_kubernetes_service_name]
action: keep
regex: "prometheus-example-service"
Подсказка
См. примеры конфигураций Prometheus для кластера Kubernetes.
Проверка файла конфигурации скребка
Агент использует настраиваемое promconfigvalidator средство для проверки конфигурации Prometheus, предоставленной ему с помощью ConfigMap. Если конфигурация недействительна, пользовательская конфигурация отклоняется агентом. После создания файла конфигурации Prometheus этот инструмент можно использовать для проверки конфигурации перед созданием ConfigMap для агента.
Средство promconfigvalidator поставляется в модуле надстройки метрик Azure Monitor. Вы можете использовать любой из ama-metrics-node-* pods в kube-system namespace в вашем кластере, чтобы скачать инструмент проверки. Используйте kubectl cp, чтобы скачать инструмент и его конфигурацию с помощью следующей команды.
for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator; kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done
После копирования исполняемого файла и yaml найдите путь к файлу конфигурации Prometheus. Затем замените <config path> в команде и запустите валидатор с помощью следующей команды.
./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"
При запуске валидатора создается объединенный файл конфигурации merged-otel-config.yaml, если не задан путь с помощью необязательного параметра output. Не используйте этот автоматически созданный объединенный файл, так как он используется только для проверки и отладки инструментов.
Развертывание файла конфигурации в виде ConfigMap
Пользовательский файл конфигурации Prometheus используется в качестве поля, именуемого prometheus-config внутри ama-metrics-prometheus-config, ama-metrics-prometheus-config-node или ama-metrics-prometheus-config-node-windows ConfigMap в kube-system пространстве имен. Создайте ConfigMap из файла конфигурации scrape, переименовав файл конфигурации Prometheus в prometheus-config без расширения и выполнив одну или несколько приведенных ниже команд в зависимости от того, какой ConfigMap вы хотите создать для вашей настраиваемой конфигурации scrape job.
Создайте ConfigMap для использования с помощью набора реплик:
kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system
При этом создается ConfigMap с именем ama-metrics-prometheus-config в kube-system пространстве имен. Чтобы узнать, возникли ли проблемы с проверкой конфигурации, обработкой или слиянием, можно просмотреть ama-metrics реплицированные поды.
Создайте ConfigMap для использования в Linux DaemonSet:
kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system
При этом создается ConfigMap с именем ama-metrics-prometheus-config-node в kube-system пространстве имен. Чтобы узнать, возникли ли проблемы с проверкой конфигурации, обработкой или слиянием, можно просмотреть ama-metrics-node поды DaemonSet для Linux.
Создайте ConfigMap для использования Windows DaemonSet
kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system
При этом создается ConfigMap с именем ama-metrics-prometheus-config-node-windows в kube-system пространстве имен. Чтобы узнать, возникли ли проблемы с проверкой конфигурации, обработкой или слиянием, можно просмотреть ama-metrics-win-node модули daemonset для Windows.
Устранение неполадок
Если вы успешно создали ConfigMap в пространстве имен kube-system и по-прежнему не видите, что пользовательские целевые объекты собираются, проверьте наличие ошибок в журналах реплики pod для ama-metrics-prometheus-config ConfigMap или в журналах pod для DaemonSetama-metrics-prometheus-config-node ConfigMap, используя kubectl logs, и убедитесь, что в разделе "Запуск слияния по умолчанию и настраиваемая конфигурация Prometheus" с префиксом prometheus-config-merger нет ошибок.
Очистка конфигураций
В настоящее время поддерживаемые методы обнаружения целевых объектов для конфигурации scrape config это либо static_configs, либо kubernetes_sd_configs для указания или обнаружения целевых объектов.
Статическая конфигурация содержит список статических целевых объектов и любые дополнительные метки, чтобы добавить к ним, как показано ниже.
scrape_configs:
- job_name: example
- targets: [ '10.10.10.1:9090', '10.10.10.2:9090', '10.10.10.3:9090' ... ]
- labels: [ label1: value1, label1: value2, ... ]
Целевые объекты, обнаруженные с помощью kubernetes_sd_configs, имеют разные метки __meta_* в зависимости от указанной роли. Метки в relabel_configs разделе можно использовать для фильтрации целевых объектов или замены меток для целевых объектов.
Перенастроители конфигураций
Раздел relabel_configs применяется во время обнаружения целевого объекта и применяется к каждому целевому объекту для задания. В следующих примерах показаны способы использования relabel_configs.
Добавление метки Добавьте новую метку, названную example_label, со значением example_value, для каждой метрики задания. Используйте __address__ в качестве исходной метки только потому, что эта метка всегда существует и добавляет метку для каждого целевого объекта задания.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Использование меток обнаружения служб Kubernetes
Если задание использует kubernetes_sd_configs для обнаружения целей, с каждой ролью связаны метки __meta_* для метрик. Метки __* удаляются после обнаружения целевых объектов. Чтобы фильтровать по ним на уровне метрик, сначала сохраните их с помощью relabel_configs, присвоив имя метки. Затем используется metric_relabel_configs для фильтрации.
# Use the kubernetes namespace as a label called 'kubernetes_namespace'
relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
# Keep only metrics with the kubernetes namespace 'default'
metric_relabel_configs:
- source_labels: [kubernetes_namespace]
action: keep
regex: 'default'
Перемаркировка заданий и экземпляров
Вы можете изменить значения меток job и instance на основе исходной метки, как и значения любых других меток.
# Replace the job name with the pod label 'k8s app'
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_k8s_app]
target_label: job
# Replace the instance name with the node name. This is helpful to replace a node IP
# and port with a value that is more readable
relabel_configs:
- source_labels: [__meta_kubernetes_node_name]
target_label: instance
Конфигурации перемаркировки метрик
Конфигурации перемаркировки метрик применяются после сбора и перед приемом. Используйте раздел metric_relabel_configs для фильтрации метрик после сбора. См. следующие примеры.
Удаление метрик по имени
# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
action: drop
regex: 'example_metric_name'
Сохранение только определенных метрик по имени
# Keep only the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
action: keep
regex: 'example_metric_name'
# Keep only metrics that start with 'example_'
metric_relabel_configs:
- source_labels: [__name__]
action: keep
regex: '(example_.*)'
Фильтрация метрик по меткам
# Keep metrics only where example_label = 'example'
metric_relabel_configs:
- source_labels: [example_label]
action: keep
regex: 'example'
# Keep metrics only if `example_label` equals `value_1` or `value_2`
metric_relabel_configs:
- source_labels: [example_label]
action: keep
regex: '(value_1|value_2)'
# Keep metrics only if `example_label_1 = value_1` and `example_label_2 = value_2`
metric_relabel_configs:
- source_labels: [example_label_1, example_label_2]
separator: ';'
action: keep
regex: 'value_1;value_2'
# Keep metrics only if `example_label` exists as a label
metric_relabel_configs:
- source_labels: [example_label_1]
action: keep
regex: '.+'
Переименование метрик Переименование метрик не поддерживается.
Замечание
Если вы хотите добавить метки ко всем заданиям в настраиваемой конфигурации, явно добавьте метки, использующие metrics_relabel_configs для каждого задания. Глобальные внешние метки не поддерживаются с помощью конфигурации prometheus на основе ConfigMap.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Базовая аутентификация и Bearer-токены
Если вы используете имя пользователя, пароль или учетные данные в качестве незашифрованного текста в конфигурации парсинга, дополнительные изменения не требуются. Значения, указанные в конфигурации, будут использоваться для очистки. Если вы используете username_file или password_file (или какие-либо _file параметры конфигурации) для параметров basic_auth или bearer_token в конфигурации prometheus, выполните следующие действия:
Создайте секрет в пространстве имен
kube-systemс именемama-metrics-mtls-secret.Имя ключа
password1может быть любым, если оно совпадает с именем файла в пути к файлу вpassword_fileконфигурации скребка Prometheus на следующем шаге. Значение ключа должно быть закодировано в кодировке Base64.apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: password1: <base64-encoded-string>Секрет
ama-metrics-mtls-secretмонтируется вama-metricspod’ы по пути/etc/prometheus/certs/и становится доступным для средства сбора метрик Prometheus. Ключ (password1в приведенном выше примере) будет именем файла. Это значение декодируется из Base64 и добавляется как содержимое файла в контейнере.Укажите файловый путь в настраиваемой конфигурации скребка в ConfigMap:
Базовая проверка подлинности Поле
usernameдолжно содержать фактическую строку имени пользователя. Полеpassword_fileдолжно содержать путь к файлу, который содержит пароль.# Sets the `Authorization` header on every scrape request with the # configured username and password. basic_auth: username: <username string> password_file: /etc/prometheus/certs/password1Маркер носителя Поле
bearer_token_fileдолжно содержать путь к файлу, содержаму маркер.# Sets the `Authorization` header on every scrape request with the bearer token # read from the configured file. It is mutually exclusive with `bearer_token`. bearer_token_file: /etc/prometheus/certs/password1
Дополнительные сведения об этих параметрах см. в документации по Prometheus scrape_config.
Очистка на основе TLS
Если вы хотите собирать метрики Prometheus с HTTPS-эндпоинта, в конфигурации Prometheus, PodMonitor или ServiceMonitor параметр scheme должен быть установлен в значение https, а также должны быть заданы дополнительные настройки TLS.
Создайте секрет с именем
ama-metrics-mtls-secretв пространстве именkube-system. Каждая пара «ключ-значение», указанная в секции data объекта Secret, будет смонтирована в каталоге /etc/prometheus/certs в виде отдельного файла, имя которого будет совпадать с соответствующим ключом, указанным в секции data. Значения секретов должны быть закодированы в кодировке Base64.Ниже приведен пример YAML секрета:
apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: <certfile>: base64_cert_content <keyfile>: base64_key_contentСекрет
ama-metrics-mtls-secretмонтируется в подыama-metricsпо пути/etc/prometheus/certs/и становится доступным средству сбора метрик Prometheus. Ключ будет именем файла. Это значение декодируется из Base64 и добавляется в файл в контейнере в качестве его содержимого.Укажите файловый путь в конфигурации Prometheus, PodMonitor или ServiceMonitor:
- Используйте следующий пример, чтобы указать параметр конфигурации TLS в ConfigMap:
tls_config: # CA certificate to validate API server certificate with. ca_file: /etc/prometheus/certs/<certfile> # Certificate and key files for client cert authentication to the server. cert_file: /etc/prometheus/certs/<certfile> key_file: /etc/prometheus/certs/<keyfile> # Disable validation of the server certificate. insecure_skip_verify: false
Базовая проверка подлинности и TLS
Если вы хотите использовать базовый маркер проверки подлинности или маркер носителя (учетные данные на основе файлов) и параметры проверки подлинности TLS в ConfigMap, убедитесь, что секрет ama-metrics-mtls-secret включает все ключи в разделе данных с соответствующими значениями в кодировке Base64, как показано в следующем примере:
apiVersion: v1
kind: Secret
metadata:
name: ama-metrics-mtls-secret
namespace: kube-system
type: Opaque
data:
certfile: base64_cert_content # used for TLS
keyfile: base64_key_content # used for TLS
password1: base64-encoded-string # used for basic auth
password2: base64-encoded-string # used for basic auth
Замечание
Путь /etc/prometheus/certs/ обязателен, но password1 может быть любой строкой и должен соответствовать ключу данных в секрете, созданном выше. Это связано с тем, что секрет ama-metrics-mtls-secret смонтирован по пути /etc/prometheus/certs/ внутри контейнера.
Значение, закодированное в Base64, автоматически декодируется подами ama-metrics при монтировании секрета как файла. Убедитесь, что имя секрета — ama-metrics-mtls-secret и оно находится в пространстве имен kube-system.
Сначала необходимо создать секрет, а затем создать ConfigMap, PodMonitor или ServiceMonitor в пространстве имен kube-system. Порядок создания секретов имеет значение. Если секрет отсутствует, но существует ConfigMap, PodMonitor или ServiceMonitor, указывающий на секрет, следующая ошибка будет зафиксирована в журналах контейнера ama-metrics prometheus-collector: no file found for cert....
Дополнительные сведения о параметрах конфигурации TLS см. в tls_config .
Расширенная настройка: Настройка пользовательских заданий выборки Prometheus для DaemonSet
Модуль ama-metrics pod реплики использует настраиваемую конфигурацию Prometheus и удаляет указанные целевые объекты. Для кластера с большим количеством узлов, подов и значительным объемом метрик для сбора, часть пользовательских целевых объектов может быть разгружена с одного модуля реплики ama-metrics на pod DaemonSet ama-metrics.
ama-metrics-prometheus-config-node ConfigMap аналогичен реплика-сету ConfigMap и может быть создан для настройки статических конфигураций сбора метрик на каждом узле. Конфигурация сбора данных должна быть нацелена только на один узел и не должна использовать службу обнаружения и аннотации pod. В противном случае каждый узел пытается сломать все целевые объекты и выполняет много вызовов к серверу API Kubernetes.
Пользовательские цели сбора данных могут следовать тому же формату, используя static_configs с целями и $NODE_IP переменную среды, и указывая порт для сбора. Каждый pod DaemonSet принимает конфигурацию, собирает метрики и отправляет их для данного узла.
Следующая конфигурация node-exporter является одной из целевых конфигураций по умолчанию для подов DaemonSet. Она использует $NODE_IP переменную среды, которая уже задана для каждого ama-metrics контейнера надстроек для назначения определенного порта на узле.
- job_name: nodesample
scrape_interval: 30s
scheme: http
metrics_path: /metrics
relabel_configs:
- source_labels: [__metrics_path__]
regex: (.*)
target_label: metrics_path
- source_labels: [__address__]
replacement: '$NODE_NAME'
target_label: instance
static_configs:
- targets: ['$NODE_IP:9100']
Очистка параметров конфигурации
В следующих разделах описаны параметры, поддерживаемые в файле конфигурации Prometheus, используемом в ConfigMap. Дополнительные сведения об этих параметрах см. в справочнике по конфигурации Prometheus .
Глобальные параметры
Формат конфигурации для глобальных параметров совпадает с конфигурацией OSS prometheus.
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Параметры, указанные в глобальном разделе, применяются ко всем заданиям сбора метрик (как к заданиям в ConfigMap, так и к заданиям в пользовательских ресурсах), но переопределяются, если заданы в отдельных заданиях.
Замечание
Если вы хотите использовать глобальные настройки, которые применяются ко всем заданиям сбора данных, и у вас есть только пользовательские ресурсы, вам всё равно потребуется создать ConfigMap только с глобальными настройками. Параметры в пользовательских ресурсах для каждого из этих заданий будут переопределять те, которые находятся в глобальном разделе.