Невозможно включить API жизненного цикла Prometheus в экземплярах контейнеров Azure

У меня возникли трудности с добавлением флага --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.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы включить 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

Ссылка-

Прометей | Прометей

Можете ли вы подчеркнуть, чем то, что вы сделали, отличается от попытки ФП, пожалуйста?

markalex 15.07.2024 11:55

При попытке OP неясно, гарантировал ли он/она, что учетная запись хранения и общий файловый ресурс были правильно настроены и доступны ACI. Мое решение явно загружает необходимые файлы конфигурации в общий файловый ресурс и правильно монтирует эти тома в контейнер Prometheus. Массив команд явно включает --web.enable-lifecycle и --config.file=/etc/prometheus/prometheus.yml, что гарантирует запуск Prometheus с правильной конфигурацией.

Arko 15.07.2024 12:19

Я могу подтвердить, что мой общий файловый ресурс и учетная запись хранения настроены правильно. Я подтвердил это, добавив цели в мой файл конфигурации Prometheus в моем файловом ресурсе и увидев, что они добавляются в графический интерфейс браузера Prometheus при переходе к IP/порту. В журналах экземпляра контейнера Azure я также вижу, что файл конфигурации загружен правильно. Однако я не вижу никаких упоминаний о включении API жизненного цикла. Я также не уверен, увижу ли я журнал, относящийся к этому, если он работает правильно.

Greggo 15.07.2024 13:35

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

Greggo 19.07.2024 18:29

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