Метрики мониторинга

Метрики мониторинга#

ПМ собирает метрики во всех подсистемах платформы AIC и выводит информацию в дашборды. Основные метрики, которые собирает и анализирует ПМ приведены ниже:

  1. Метрики ALSE.

  2. Метрики Подсистемы виртуализации:

  • количество запущенных ВМ в кластере/зоне;

  • общее ЦПУ / использованное ЦПУ в кластере/ВМ;

  • общая память / используемая память в кластере/ВМ;

  • суммарные статус всех сервисов на хостах в кластере;

  • суммарный статус всех сервисов на fronts в кластере;

  • статус хоста;

  • сетевой трафик и скорость трафика через сетевые интерфейсы;

  • статус сервисов на выбранном хосте.

  1. Мониторинг Подсистемы контроллера домена:

  • использование ЦПУ / памяти службами ПРК;

  • проверка служб:

    • Chrony;

    • Apache2;

    • Cups;

    • Zabbix;

    • Salt-master;

    • krb5kdc;

    • ipa-custodia;

    • dirsrv;

  • проверка синхронизации времени;

  • проверка работы DNS.

  1. Мониторинг FreeIPA:

  • количество неуспешных попыток авторизации в LDAP;

  • количество заблокированных пользователей;

  • статус служб FreeIPA;

  • использование памяти;

  • нагрузка на процессор на контроллерах;

  • количество событий уровня error во всех логах системы за единицу времени;

  • количество Search запросов на контроллере домена;

  • количество логинов в web ui от пользователей с админ правами за единицу времени.

  1. Мониторинг Подсистемы резервного копирования:

  • использование ЦПУ / памяти службами ПРК;

  • проверка бэкапных тасок и их статусов;

  • проверка служб:

    • rubackup_server;

    • rubackup_client;

    • postgresql@11-main.

Примечание

Известные проблемы

Со временем файловая система на сервере мониторинга забивается полностью данными docker-контейнеров (лог-файлы внутри самих контейнеров, они не являются необходимыми, поэтому могут быть удалены).

Для того, чтобы избежать переполнения файловой системы, необходимо в файле docker-compose.yml добавить следующие строки под каждой секцией с описанием контейнера:

logging:
  options:
      max-size: 100m

В данном примере размер лога ограничен 100 МБ.

Пример docker-compose.yml:

##
##  Astra Monitoring - Compose version 0.4.1
##

version: "3.8"
volumes:
  grafana_data: {}

services:
  clickhouse:
    image: 10.205.18.64:5000/clickhouse-server:23.8.2.7
    container_name: clickhouse
    restart: unless-stopped
    logging:
      options:
        max-size: 100m
    user: ${UID}:${GID}
    volumes:
    - ./clickhouse/data:/var/lib/clickhouse
    - ./clickhouse/config/config.xml:/etc/clickhouse-server/config.xml:ro
    - ./clickhouse/init:/docker-entrypoint-initdb.d
    ports: []
    environment:
    - CLICKHOUSE_USER=astra
    - CLICKHOUSE_PASSWORD=password
    - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 3
      start_period: 3s

    clickhouse-updater:
      image: 10.205.18.64:5000/ch-cluster-update:n0.18
      container_name: ch-updater
      restart: "no"
      logging:
        options:
            max-size: 100m
    environment:
    - db_name=astra
    - db_user=astra
    - db_ip=clickhouse
    - db_port=9000
    - db_timeout=5
    - db_pass=password
    depends_on:
      clickhouse:
        condition: service_healthy

vector:
  image: 10.205.18.64:5000/vector:0.33.0-alpine
  container_name: vector
  restart: unless-stopped
  user: ${UID}:${GID}
  logging:
    options:
      max-size: 100m
  volumes:
  - ./vector/config:/etc/vector
  ports:
  - 9102:9102     # This port is used for incoming data flow
  depends_on:
    clickhouse:
      condition: service_healthy

alertmanager:
  image: 10.205.18.64:5000/alertmanager:v0.26.0
  container_name: alertmanager
  restart: unless-stopped
  user: ${UID}:${GID}
  volumes:
  - ./alertmanager/data:/alertmanager
  - ./alertmanager/config:/etc/alertmanager
  - ./alertmanager/templates:/etc/alertmanager-templates
  ports:
  - 9093:9093     # Publishing for troubleshooting
  depends_on:
  - event-adapter
  logging:
    options:
      max-size: 100m

grafana:
  image: 10.205.18.64:5000/grafana:9.5.2
  container_name: grafana
  restart: unless-stopped
  volumes:
  - ./grafana/config:/etc/grafana
  - ./grafana/dashboards:/src/grafana/dashboards
  - grafana_data:/var/lib/grafana
  - ./grafana/plugins:/var/lib/grafana/plugins
  ports:
  - 3000:3000
  environment:
  - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS="astra-astraclickhouse-datasource"
  - GF_SECURITY_ADMIN_USER=admin
  - GF_SECURITY_ADMIN_PASSWORD=password
  - GF_USERS_ALLOW_SIGN_UP=false
  - GF_USERS_DEFAULT_THEME=dark
  - GF_EXPLORE_ENABLED=true
  - GF_ALERTING_ENABLED=false
  - GF_UNIFIED_ALERTING_ENABLED=true
  logging:
    options:
      max-size: 100m

postgresql:
  image: 10.205.18.64:5000/pg-events-db-image:0.04
  container_name: postgresql
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - "-c"
  - "config_file=/var/lib/postgresql/postgresql.conf"
  volumes:
  - ./postgresql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  - ./postgresql/postgresql.conf:/var/lib/postgresql/postgresql.conf:ro
  - ./postgresql/pg_hba.conf:/var/lib/postgresql/pg_hba.conf:ro
  - ./postgresql/data:/var/lib/postgresql/data
  ports: []
  environment:
  - POSTGRES_USER=astra
  - POSTGRES_DB=astra
  - POSTGRES_PASSWORD=password
  - PGDATA=/var/lib/postgresql/data/pgdata
  healthcheck:
    test: ["CMD-SHELL", "pg_isready --host=localhost --username=astra"]
    interval: 30s
    timeout: 10s
    retries: 3
    start_period: 30s
  logging:
    options:
      max-size: 100m

postgresql_updater:
  image: 10.205.18.64:5000/pg-update-db:0.51.0
  container_name: pg-updater
  restart: "no"
  environment:
  - db_name=astra
  - db_user=astra
  - db_ip=postgresql
  - db_port=5432
  - db_timeout=5
  - db_pass=password
  depends_on:
    postgresql:
      condition: service_healthy

prometheus:
  image: 10.205.18.64:5000/prometheus:v2.48.0
  container_name: prometheus
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - --storage.tsdb.retention=12h
  - --storage.tsdb.path=/prometheus
  - --config.file=/etc/prometheus/prometheus.yml
  - --web.enable-lifecycle
  volumes:
  - ./prometheus/config:/etc/prometheus
  - ./prometheus/data:/prometheus
  ports:
  - 9090:9090
  logging:
    options:
      max-size: 100m

vmetrics:
  image: 10.205.18.64:5000/victoria-metrics:v1.93.8
  container_name: vmetrics
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - --vmalert.proxyURL=http://vmalert:8880
  volumes:
  - ./victoria-metrics/data:/victoria-metrics-data
  ports:
  - 8428:8428
  healthcheck:
    test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8428/metrics"]
    interval: 30s
    timeout: 10s
    retries: 3
    start_period: 5s
  logging:
    options:
      max-size: 100m

vmalert:
  image: 10.205.18.64:5000/vmalert:v1.91.3
  container_name: vmalert
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - --datasource.url=http://vmetrics:8428/
  - --remoteRead.url=http://vmetrics:8428/
  - --remoteWrite.url=http://vmetrics:8428/
  - --notifier.url=http://event-adapter:8082/
  - --notifier.url=http://alertmanager:9093/
  - --rule=/etc/alerts/*.yaml
  volumes:
  - ./vmalert/config:/etc/alerts
  ports:
  - 8880:8880
  depends_on:
    vmetrics:
      condition: service_healthy
  logging:
    options:
      max-size: 100m

gatekeeper:
  image: 10.205.18.64:5000/gatekeeper:2.9.3
  container_name: gatekeeper
  restart: unless-stopped
  command:
  - --discovery-url=http://${SERVER_HOST}:8081/realms/astra-monitoring
  - --client-id=admin-ui
  - --client-secret=TOKEN
  - --listen=0.0.0.0:8080  # unix sockets format unix://path
  - --enable-refresh-tokens=true
  - --encryption-key=AgXa7xRcoClDEU0ZDSH4X0XhL5Qy2Z2j
  - --upstream-url=http://admin-ui:80
  - --enable-default-deny=true
  - --enable-logout-redirect=true
  - --cookie-access-name=AccessTokenCookie
  - --cookie-refresh-name=RefreshTokenCookie
  - --skip-openid-provider-tls-verify=true
  - --redirection-url=http://${SERVER_HOST}/
  - --enable-request-id=true
  - --secure-cookie=false
  - --enable-login-handler
  ports:
  - 80:8080
  depends_on:
    keycloak:
      condition: service_healthy
  logging:
    options:
      max-size: 100m

admin-ui:
  image: 10.205.18.64:5000/admin-console-ui:0.0.52
  container_name: admin-ui
  restart: unless-stopped
  volumes:
  - ./admin-ui/config/nginx.conf:/etc/nginx/nginx.conf:ro
  ports: []
  depends_on:
    - admin-back
  logging:
    options:
      max-size: 100m

admin-back:
  image: 10.205.18.64:5000/admin-console-api:0.0.52
  container_name: admin-back
  restart: unless-stopped
  volumes: []
  ports:
  - 8000:8000
  environment:
  - grafana_base_url=${SERVER_HOST}:3000
  - db_name=astra
  - db_pass=password
  - db_user=astra
  - db_type=postgres
  - db_host=postgresql
  - db_port=5432
  depends_on:
    postgresql:
      condition: service_healthy
  logging:
    options:
      max-size: 100m

event-adapter:
  image: 10.205.18.64:5000/event-adapter:0.0.22
  container_name: event-adapter
  restart: unless-stopped
  volumes: []
  environment:
  - db_name=astra
  - db_pass=password
  - db_user=astra
  - db_type=postgres
  - db_host=postgresql
  - db_port=5432
  - PORT=8082
  depends_on:
    postgresql:
      condition: service_healthy
  logging:
    options:
      max-size: 100m

keycloak-db:
  image: 10.205.18.64:5000/pg-events-db-image:0.04
  container_name: keycloak-db
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - "-c"
  - "config_file=/var/lib/postgresql/postgresql.conf"
  ports: []
  volumes:
  - ./postgresql/postgresql.conf:/var/lib/postgresql/postgresql.conf:ro
  - ./postgresql/pg_hba.conf:/var/lib/postgresql/pg_hba.conf:ro
  - ./keycloak/data:/var/lib/postgresql/data
  environment:
  - POSTGRES_USER=keycloak
  - POSTGRES_DB=keycloak
  - POSTGRES_PASSWORD=password
  - PGDATA=/var/lib/postgresql/data/pgdata
  healthcheck:
    test: ["CMD-SHELL", "pg_isready --host=localhost --username=keycloak"]
    interval: 10s
    timeout: 3s
    retries: 3
    start_period: 10s
  logging:
    options:
      max-size: 100m

keycloak:
  image: 10.205.18.64:5000/keycloak:23.0.1-017
  container_name: keycloak
  restart: unless-stopped
  user: ${UID}:${GID}
  command:
  - start
  - --optimized
  - --import-realm
  ports:
  - 8081:8080
  volumes:
  - ./keycloak/realm-astra-monitoring.json:/opt/keycloak/data/import/realm-astra-monitoring.json:ro
  - ./keycloak/tmp:/opt/keycloak/data/tmp
  environment:
  - KC_HOSTNAME_URL=http://${SERVER_HOST}:8081
  - KC_HOSTNAME_ADMIN_URL=http://${SERVER_HOST}:8081
  - KEYCLOAK_ADMIN=admin
  - KEYCLOAK_ADMIN_PASSWORD=password
  - KC_PROXY=edge
  - KC_DB=postgres
  - KC_DB_URL_HOST=keycloak-db
  - KC_DB_USERNAME=keycloak
  - KC_DB_PASSWORD=password
  - KC_FILE=/opt/keycloak/data/import/realm-astra-monitoring.json
  - KC_OVERRIDE=true
  - ADMIN_UI_TOKEN=password
  healthcheck:
    test: ['CMD-SHELL', '[ -f /tmp/HealthCheck.java ] || echo "public class HealthCheck { public static void main(String[] args) throws java.lang.Throwable { System.exit(java.net.HttpURLConnection.HTTP_OK == ((java.net.HttpURLConnection)new java.net.URL(args[0]).openConnection()).getResponseCode() ? 0 : 1); } }" > /tmp/HealthCheck.java && java /tmp/HealthCheck.java http://localhost:8080/health/ready']
    interval: 30s
    timeout: 3s
    retries: 50
    start_period: 10s
  depends_on:
    keycloak-db:
      condition: service_healthy
  logging:
    options:
      max-size: 100m

keycloak-init:
  image: 10.205.18.64:5000/keycloak-init:23.0.1-017
  container_name: keycloak-init
  restart: "no"
  command:
  - --wait-for
  - "1"
  environment:
  - KEYCLOAK_BASE_URL=http://keycloak:8080
  - KEYCLOAK_ADMIN_USER=admin
  - KEYCLOAK_ADMIN_PASSWORD=password
  - KEYCLOAK_REALM=astra-monitoring
  - USERNAME=admin-internal
  - EMAIL=admin-internal@localhost
  - PASSWORD=admin
  depends_on:
    keycloak:
      condition: service_healthy