Portainer и Prometheus

Portainer позволяет Вам управлять контейнерами через веб интерфейс.

В этой статье мы создадим два набора контейнеров: portainer и prometheus.

Вот файловая структура, которая получится после создания всех файлов:

- /home/user/docker
  docker-compose.yml
  - data
    - prometheus
      - config
        prometheus.yml
        rules.yml
    - alertmanager
      - config
        alertmanager.yml

Файлы для Prometheus

Наш Prometheus будет выбирать метрики из Atlassian Jira и посылать алерты в Slack. Подробнее про настройку Prometheus в связке со Slack можно посмотреть в этом видео.

prometheus.yml

global:
  scrape_interval:     15s
  evaluation_interval: 15s
rule_files:
  - "/etc/prometheus/rules.yml"
alerting:
 alertmanagers:
   - static_configs:
     - targets:
       - alertmanager:9093
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'jira'
    scheme: https
    metrics_path: '/jira/plugins/servlet/prometheus/metrics'
    static_configs:
      - targets: ['localhost:8085']

rules.yml

groups:
  - name: AllInstances
    rules:
    - alert: InstanceDown
      expr: up == 0
      for: 1m
      annotations:
        title: 'Instance {{ $labels.instance }} down'
        description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute.'
      labels:
        severity: 'critical'

    - alert: TooManyUsers
      expr: jira_all_active_users_gauge > 1
      annotations:
        title: 'Too many users for {{ $labels.instance }}'
        description: '{{ $labels.instance }} of job {{ $labels.job }} has more than 1 user.'
      labels:
        severity: 'meduim'

alertmanager.yml

global:
  resolve_timeout: 30s
  slack_api_url: 'your slack api url'

route:
  receiver: 'slack-notifications'

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'
    send_resolved: true
    icon_url: https://avatars3.githubusercontent.com/u/3380462
    title: |-
      [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .Comm$
      {{- if gt (len .CommonLabels) (len .GroupLabels) -}}
        {{" "}}(
        {{- with .CommonLabels.Remove .GroupLabels.Names }}
          {{- range $index, $label := .SortedPairs -}}
            {{ if $index }}, {{ end }}
            {{- $label.Name }}="{{ $label.Value -}}"
          {{- end }}
        {{- end -}}
        )
      {{- end }}
    text: >-
      {{ range .Alerts -}}
      *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - `{{ .Labels.severity }}`{{ end }}

      *Description:* {{ .Annotations.description }}

      *Details:*
        {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
        {{ end }}

Запускаем portainer

Мы будем запускать portainer в контейнере.

Создадим файл docker-compose.yml в папке /home/user/docker folder:

version: '3'
services:
  portainer:
    image: portainer/portainer
    container_name: portainer
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer:/data
    ports:
      - 8080:9000
    expose:
      - 9000

Теперь запустим этот файл:

docker-compose up -d

Теперь наш portainer запущен на порту 8080.

Создаем Prometheus стек в portainer

Теперь зайдем в браузер и зайдем в portainer на localhost:8080.

Нас попросят задать пароль Администратора:

Введем пароль и нажмем на кнопку Create user:

Выберем Local:

Нажмем на кнопку Connect:

Нажмите на доступный docker:

Нажмите на секцию Stacks:

Нажмите на кнопку Add stack и добавьте вот такой код:

version: '2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: monitoring_prometheus
    restart: unless-stopped
    volumes:
      - /home/user/docker/data/prometheus/config:/etc/prometheus/
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    expose:
      - 9090
    ports:
      - 9090:9090
   
  alertmanager:
    image: prom/alertmanager:latest
    volumes:
      - /home/user/docker/data/alertmanager/config:/etc/alertmanager/
    ports:
      - 9093:9093
    expose:
      - 9093

Нажмите на кнопку Deploy:

Нажмите на prometheus:

Мы видим, что у нас запущен Prometheus на localhost:9090 и alertmanager на localhost:9093.

Leave a Reply

%d bloggers like this: