Мониторинг Ceph кластера с помощью Icinga2

Осуществляем мониторинг состояние Ceph кластера с помощью плагина Icinga2

Возможности данного плагина:

  • Статус Ceph кластера (HEALTH_OK, HEALTH_WARN)
  • Контроль состояния OSD (можно установить значения warning и critical на количество неактивных OSD)
  • Статус Placement Group (нет значения warning и critical, но есть возможность отследить, если состояние PG не active+clean )
  • Дисковое пространство (контроль свободного пространства на пуле, основано на поле Max Available, которое отображается при выводе ceph df . Это не общее значение свободного места, а свободное место с учетом репликации пула)
  • Показатель эффективности (предназначено для сбора информации для метрики, iops, количество прочитанной/записанной информации в bytes/sec)

Для работы плагина необходим клиент Ceph на сервере с Icinga2.

Выполним установку ceph-deploy

Установим необходимые пакеты и репозитории:

sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*

Подключим репозиторий Ceph /etc/yum.repos.d/ceph.repo:

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

Заменим {distro} на наш дистрибутив, в данном случае el7. Заменим {ceph-release} на стабильную версию Ceph. На момент написания статьи это infernalis.

После всех этих действий установим пакет ceph-deploy:

sudo yum update && sudo yum install ceph-deploy

Выполним установку Ceph:

ceph-deploy install {icinga2-node}

Необходимо создать пользователя icinga2 и сгенерировать ключи. (данные действия необходимо выполнять на Ceph кластере)

Пользователю нужны только права на чтение: [mon] allow r

ceph auth add client.icinga2 mon 'allow r'
ceph auth get-key client.icinga2 | tee client.icinga2.key
ceph auth get client.icinga2 -o ceph.client.icinga2.keyring
[client.icinga2]
   key = AQB64QdXqZ5aFBAAH/00usPIZf35tZOt68N00g==

Теперь нам необходимо скопировать файлы ceph.client.icinga2.keyring, ceph.client.admin.keyring и ceph.conf на Icinga2 хост в директорию /etc/ceph.

Загружаем плагин для мониторинга Ceph и помещаем в директорию с плагинами Nagios /usr/lib64/nagios/plugins

В commands.conf добавляем новый объект:

object CheckCommand "check_ceph" {
  import "plugin-check-command"
  command = [PluginDir + "/check_ceph.py"]
  timeout = 20
  arguments = {
    "-c" = "$conf$"
    "--conf" = "$conf$"
    "--id" = "$id$"
    "-k" = "$keyring$"
    "--keyring" = "$keyring$"
    "--health" = {
   set_if = "$health$"
    }
    "--osd" = {
       set_if = "$osd$"
    }
    "--pg" = {
     set_if = "$pg$"
    }
    "--df" = {
      set_if = "$df$"
    }
    "--perf" = {
      set_if = "$perf$"
    }
    "--pool" = "$pool$"
    "-b" = "$byte$"
    "--byte" = "$byte$"
    "-w" = "$warning$"
    "--warning" = "$warning$"
    "-c" = "$critical$"
    "--critical" = "$critical$"
  }
}

В services.conf добавляем новый сервис:

apply Service "ceph_health" {
  import "my-service"
  display_name = "Ceph Health"
  check_command = "check_ceph"
  assign where host.name == "YOUR_CEPH_HOSTNAME"
}

В конфигурацию хоста добавляем:

...
vars.conf = "/etc/ceph/ceph.conf"
vars.id = "icinga2"
vars.keyring = "/etc/ceph/ceph.client.icinga.keyring"
vars.health = true
vars.notification.mute = true
...

Runs health checks against a ceph cluster. This is designed to run on the monitoring server using the ceph client software. Supply a ceph.conf, keyring, and user to access the cluster.

optional arguments:

  1. h, –help show this help message and exit
  2. C CONF, –conf CONF ceph.conf file, defaults to /etc/ceph/ceph.conf.
  3. id ID, –id ID Ceph authx user
  4. k KEYRING, –keyring KEYRING

Path to ceph keyring if not in

                      /etc/ceph/client.\$id.keyring
--health              Get general health status. ex. HEALTH_OK, HEALTH_WARN
-o, --osd             OSD status. Thresholds are in number of OSDs missing
-m MON, --mon MON     MON status. Thesholds are in number of mons missing
-p, --pg              PG status. No thresholds due to the large number of pg
                      states.
--perf                collects additional ceph performance statistics
--df                  Disk/cluster usage. Reports global and all pools
                      unless --pool is used. Warning and critical are number
                      of -b free to the pools. This is not Raw Free, but Max
                      Avail to the pools based on rep or k,m settings. If
                      you do not define a pool the threshold is run agains
                      all the pools in the cluster.
-b BYTE, --byte BYTE  Format to use for displaying DF data. G=Gigabyte,
                      T=Terabyte. Use with the --df option. Defults to TB
--pool POOL           Pool. Use with df
--objects OBJECTS     Object counts based on pool
-w WARNING, --warning WARNING
                      Warning threshold. See specific checks for value types
-c CRITICAL, --critical CRITICAL
                      Critical threshold. See specific checks for value
                      types