Иногда нам нужно следить за тем, что Группа хостов в правильном состоянии. Письмовые тесты принимают ручные. Существующие инструменты, такие как Goss или Inspec, хороши, но им не хватает гибкости. Всегда есть что -то, что не покрывается предоставленным API.
Новый Воробей6 плагин SSH-Bulk-проверка Позволяет писать сценарии проверки для проверки состояний группы хостов SSH неограниченным образом.
Это чрезвычайно гибкий и всеобъемлющий, потому что полагается на Воробей6 Проверка задачи DSL и простые сценарии Bash, которые способны покрывать практически любые варианты использования.
Позвольте мне показать, как это работает.
ZEF установить https://github.com/melezhik/sparrow6.git
Экспорт:///TMP/Repo
mkdir -p/tmp/repo
s6 -repo_init/tmp/репо
git Clone https://github.com/melezhik/sparrow-plugins.git
CD Sparrow -Plugins && find -maxDepth 2 -mindepth 2 -name Sparrow.json -Execdir s6 -Upload \;
Скажем, у нас есть группа узлов, где каждый узел должен иметь одно и то же состояние:
каталог
/var/data
существуютразмер
/TMP
не более 1 ГБNginx бежит с большим количеством 2 работников.
Это довольно образный пример, но вы, вероятно, поймали эту идею.
Давайте создадим скрипт оболочки, который запускается тест команды первыми:
MKDIR -файлы
nano files/cmd.sh
echo '===' echo "check /var/data dir" ls -d /var/data && echo "/var/data is a directory" echo "end check" echo '===' echo "check /tmp/ dir size" sudo du -sh /tmp/ echo "end check" echo '===' echo "check if nginx is alive" ps uax| grep nginx| grep -v grep echo "end check" echo '==='
Теперь давайте определим правила проверки, что анализировать Вывод cmd.sh
сценарий Я использую Sparrow6 TaskCheck DSL с выражением диапазона, так что, чтобы сказать один чек от другого:
between: { 'check /var/data dir' } { end \s+ check } /var/data is a directory end: note: === between: { '/tmp/ dir size' } { end \s+ check } regexp: ^^ \d+(\w+) \s+ '/tmp/' generator: <[0]; print "assert: ", ( $order eq 'G' ? 0 : 1 ), " the size of /tmp dir is less then 1 GB\n"; } HERE end: note: === between: { 'check if nginx is alive' } { end \s+ check } /usr/sbin/nginx -g daemon on; master_process on; regexp: ^^ 'www-data' \s+ .* \s+ worker \s+ process $$ generator: <
Мы почти настроены, теперь давайте запустим все наши чеки против хостов SSH, мы будем использовать Sparrowdo Task Runner в -localhost
Режим, потому что мы запускаем тесты от Localhost, используя SSH/SSHPASS
Утилиты:
Воробей
#!perl6 task-run "check my hosts", "ssh-bulk-check", %( cmd => "files/cmd.sh", state => "files/state.check", hosts => [ "192.168.0.1" ], );
Чтобы запустить тест, просто скажите:
Воробейдо -Локалхост
Вот результат:
20:01:46 04/29/2019 [check my hosts] check host [192.168.0.1] 20:01:46 04/29/2019 [check my hosts] === 20:01:46 04/29/2019 [check my hosts] check /var/data dir 20:01:46 04/29/2019 [check my hosts] /var/data 20:01:46 04/29/2019 [check my hosts] /var/data is a directory 20:01:46 04/29/2019 [check my hosts] end check 20:01:46 04/29/2019 [check my hosts] === 20:01:46 04/29/2019 [check my hosts] check /tmp/ dir size 20:01:46 04/29/2019 [check my hosts] 40K /tmp/ 20:01:46 04/29/2019 [check my hosts] end check 20:01:46 04/29/2019 [check my hosts] === 20:01:46 04/29/2019 [check my hosts] check if nginx is alive 20:01:46 04/29/2019 [check my hosts] root 1243 0.0 0.0 140628 1500 ? Ss 18:32 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; 20:01:46 04/29/2019 [check my hosts] www-data 1244 0.0 0.0 143300 6264 ? S 18:32 0:00 nginx: worker process 20:01:46 04/29/2019 [check my hosts] www-data 1245 0.0 0.0 143300 6264 ? S 18:32 0:00 nginx: worker process 20:01:46 04/29/2019 [check my hosts] end check 20:01:46 04/29/2019 [check my hosts] === 20:01:46 04/29/2019 [check my hosts] end check host [192.168.0.1] [task check] ==================================================== [task check] check results [task check] ==================================================== [task check] stdout match (r) True [task check] === [task check] stdout match (r) <^^ \d+(\w+) \s+ '/tmp/'> True [task check]True [task check] === [task check] stdout match (r) True [task check] stdout match (r) <^^ 'www-data' \s+ .* \s+ worker \s+ process $$> True [task check] True
Для этого примера я использую только один хост — 192.168.0.1
Но мы можем добавить столько хостов, сколько нам нужно, плагин проверит их все в одной транзакции.
Это мертва, легко написать практически любую проверку с этим плагином. Пожалуйста, поделитесь своими вариантами использования, и я буду рад помочь вам, как использовать SSH-Bulk-проверка
для них
Оригинал: «https://dev.to/melezhik/ssh-bulk-check-super-flexible-check-of-group-of-nodes-by-ssh-42ff»