====== Мониторинг 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}'' на стабильную версию [[http://docs.ceph.com/docs/master/releases/|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''. [[https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/ceph/check_ceph.py|Загружаем плагин]] для мониторинга **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: - h, –help show this help message and exit - C CONF, –conf CONF ceph.conf file, defaults to /etc/ceph/ceph.conf. - id ID, –id ID Ceph authx user - 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 ==== Примеры уведомлений в Telegram ==== {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/ceph/004.png?nolink&385x338}}