Иногда нам нужно следить за тем, что Группа хостов в правильном состоянии. Письмовые тесты принимают ручные. Существующие инструменты, такие как 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»