====== Мониторинг 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}}