Как написать сценарий Bash, который будет реагировать на кластер Ceph на основе результатов отслеживания для Linux - PullRequest
0 голосов
/ 11 июля 2020

Итак, вот проблема, с которой я столкнулся: у меня есть кластер Ceph, который подвергается балансировке, но иногда я получаю сообщение Slow Requests из вывода ceph -s. У меня есть два терминала, открытых для кластера ceph. Один терминал настроен на активное наблюдение за медленными запросами с помощью следующей команды:

watch "ceph -s | grep -i 'slow'"

В результате я вижу два результата. Один вывод выглядит так:

Every 2.0s: ceph -s | grep -i 'slow'          Sun Jul 12 02:17:49 2020

            107 slow requests are blocked > 32 sec. Implicated osds 17
,27,37,51,58,81,118,122,124,137,153,160,181,197,205,217,236,259,267,28
3,309,318,323,328,343

На этом этапе, если я вижу, что появляются медленные запросы, мне нужно немедленно установить кластер на следующее:

rbarrett@osd001:~$ sudo ceph osd set norecover
norecover is set

После чего медленные запросы в конечном итоге исчезнут, и вам придется настроить кластер для продолжения восстановления.

Every 2.0s: ceph -s | grep -i 'slow'          Sun Jul 12 02:20:07 2020

После исчезновения slow requests я должен отключить опцию norecover

rbarrett@osd001:~$ sudo ceph osd unset norecover
norecover is unset

Итак, вот мой вопрос: как я могу написать сценарий в bash для запуска в качестве процесса или службы, чтобы сделать это за меня?

Моя первая мысль была бы использовать переменную для этой команды watch, но тогда как я могу настроить запуск скрипта и следить за кластером?

Я не против использовать python, но предпочел бы bash скрипт.

Я подумал использовать что-то подобное, но я не знаю, будет ли он работать постоянно.

#!/bin/bash
check=$(ceph -s | grep -i "slow requests")
echo $check
if [[ -n $check   ]];then
  echo "setting norecover flag"
  sudo ceph osd set norecover
else
  echo "no slow requests"
  sudo ceph osd unset norecover
fi

Кто-нибудь, пожалуйста, подтвердите, будет ли это работать?

1 Ответ

1 голос
/ 12 июля 2020

Вы можете использовать al oop вокруг своего скрипта, чтобы запускать его бесконечно.

#!/bin/bash

while : ; do
    if sudo ceph -s | grep -i "slow requests"; then
        echo "setting norecover flag"
        sudo ceph osd set norecover
    else
        echo "no slow requests"
        sudo ceph osd unset norecover
    fi
    
    sleep 2
fi

Я добавил 2-секундный сон между проверками, чтобы избежать высокой загрузки ЦП с помощью this скрипт (который в противном случае мог бы значительно увеличить нагрузку на кластер). Вы можете изменить это значение в зависимости от ваших потребностей (я бы предложил не менее 2 секунд).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...