У меня возникли трудности с добавлением флага --web.enable-lifecycle
в Prometheus, чтобы включить API жизненного цикла.
У меня это работает локально с помощью Docker Compose, вот так:
prometheus:
image: prom/prometheus
volumes:
- ./tmp/prometheus:/prometheus
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/targets:/etc/prometheus/targets
networks:
- localprom
ports:
- 9090:9090
command:
- --web.enable-lifecycle
- --config.file=/etc/prometheus/prometheus.yml
Но формат YAML Azure для создания/обновления экземпляров контейнера немного отличается от формата Docker. Вот мой YAML-файл:
apiVersion: 2021-10-01
location: useast
name: my-prometheus-container-instances
tags: { environment: development }
type: Microsoft.ContainerInstance/containerGroups
properties:
containers:
- name: prometheus
properties:
image: prom/prometheus:v2.45.6
command:
- /bin/prometheus
- --config.file=/etc/prometheus/prometheus.yml
- --web.enable-lifecycle
resources:
requests:
cpu: 1
memoryInGb: 1.5
ports:
- port: 9090
volumeMounts:
- name: prometheus-fileshare-volume
mountPath: /etc/prometheus/
subnetIds:
- id: MY_SUBNET_ID
osType: Linux
volumes:
- name: prometheus-fileshare-volume
azureFile:
shareName: prometheus-fileshare
readOnly: true
storageAccountName: prometheus-storage-account
storageAccountKey: MY_ACCESS_KEY
RestartPolicy: OnFailure
ipAddress:
type: Private
ports:
- protocol: tcp
port: 9090
Обратите внимание, что для файла Azure YAML требуется - /bin/prometheus
в массиве команд, а для docker — нет. Без этого прометей не запустится после развертывания. Я также подтвердил, что команда --config.file
работает, и задаюсь вопросом, может ли быть что-то еще, что может помешать мне включить API жизненного цикла после развертывания в Azure.
Чтобы включить API жизненного цикла Prometheus в экземпляре контейнера Azure с помощью конфигурации YAML, необходимо убедиться, что массив команд настроен правильно и все необходимые параметры переданы правильно.
Создать учетную запись хранения
az storage account create --name prometheusstorageacct --resource-group arkorg --location eastus --sku Standard_LRS
Создать файлообменник
az storage share create --name prometheusfileshare --account-name prometheusstorageacct
Получить ключ хранилища
Создайте файлы конфигурации Prometheus. Я просто использую базовый пример, вы редактируете его по своему усмотрению.
прометей.yml:
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds.
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Example job to scrape metrics from a target
- job_name: 'example'
static_configs:
- targets: ['example.com:80']
цели.yml:
- targets:
- 'target1.example.com:9100'
- 'target2.example.com:9100'
Загрузите файлы конфигурации в общий файловый ресурс Azure.
az storage file upload --share-name prometheusfileshare --source ./prometheus.yml --account-name prometheusstorageacct --account-key $STORAGE_KEY
az storage file upload --share-name prometheusfileshare --source ./targets.yml --account-name prometheusstorageacct --account-key $STORAGE_KEY
Создайте экземпляр контейнера Azure.
apiVersion: 2021-10-01
location: eastus
name: my-prometheus-container-instances
type: Microsoft.ContainerInstance/containerGroups
properties:
containers:
- name: prometheus
properties:
image: prom/prometheus:v2.45.6
command:
- /bin/prometheus
- --config.file=/etc/prometheus/prometheus.yml
- --web.enable-lifecycle
resources:
requests:
cpu: 1
memoryInGb: 1.5
ports:
- port: 9090
volumeMounts:
- name: prometheus-fileshare-volume
mountPath: /etc/prometheus/
osType: Linux
volumes:
- name: prometheus-fileshare-volume
azureFile:
shareName: prometheusfileshare
readOnly: true
storageAccountName: prometheusstorageacct
storageAccountKey: ...6tNg==
restartPolicy: OnFailure
ipAddress:
type: Public
ports:
- protocol: tcp
port: 9090
Развертывание экземпляра контейнера Azure
az container create --resource-group arkorg --file prometheus-aci.yaml
Подтвердить и получить доступ к Prometheus
az container show --resource-group arkorg --name my-prometheus-container-instances
получить доступ к Прометею, получив IP
az container show --resource-group arkorg --name my-prometheus-container-instances --query "ipAddress.ip" --output tsv
зайдите в браузер и укажите IP-адрес, который вы видите в качестве вывода для приведенной выше команды.
http://<container-ip>:9090
.
вы можете проверить свой жизненный цикл, используя что-то вроде
локон -X ПОСТ http://52.188.24.225:9090/-/reload
Ссылка-
При попытке OP неясно, гарантировал ли он/она, что учетная запись хранения и общий файловый ресурс были правильно настроены и доступны ACI. Мое решение явно загружает необходимые файлы конфигурации в общий файловый ресурс и правильно монтирует эти тома в контейнер Prometheus. Массив команд явно включает --web.enable-lifecycle и --config.file=/etc/prometheus/prometheus.yml, что гарантирует запуск Prometheus с правильной конфигурацией.
Я могу подтвердить, что мой общий файловый ресурс и учетная запись хранения настроены правильно. Я подтвердил это, добавив цели в мой файл конфигурации Prometheus в моем файловом ресурсе и увидев, что они добавляются в графический интерфейс браузера Prometheus при переходе к IP/порту. В журналах экземпляра контейнера Azure я также вижу, что файл конфигурации загружен правильно. Однако я не вижу никаких упоминаний о включении API жизненного цикла. Я также не уверен, увижу ли я журнал, относящийся к этому, если он работает правильно.
Моя проблема закончилась путаницей с моей стороны. У нас есть несколько тестовых виртуальных сетей, настроенных с разными экземплярами контейнеров, и я смотрел не на тот экземпляр. Я одобряю этот ответ, поскольку он очень подробный, и, потратив много времени на поиск такого ответа, я думаю, что он будет чрезвычайно полезен для людей в будущем.
Можете ли вы подчеркнуть, чем то, что вы сделали, отличается от попытки ФП, пожалуйста?