Утилита для проверки "сетевой доступности" хостов. Реализовано три способа проверки доступности хостов:
- Через отправку ICMP echo пакета (ping) и ожидание ответа от указанного хоста;
- Через попытку открыть TCP-подключение к хосту по указанному порту;
- Через HTTP GET запрос к указанному URL.
Проверка доступности различных хостов происходит непрерывно с заданной степенью параллелизма. Можно задать период проверки доступности хостов и указать таймаут, по истечении которого проверка считается неуспешной, а хост недоступным. Статус указанных хостов выводится на экран раз в 5 секунд.
Программа написана на Scala для JVM. Для корректной работы программы необходима Java 8+. Работа программы протестирована на Linux, она также должна работать на других системах.
Программу можно встроить в Scala (Java) web-приложение для проверки доступности бэкэндов и настройки мониторинга.
Для запуска программы нужно указать список хостов для проверки в нужном формате (через файл или опцию командной строки).
-f
,--targets-file
- имя файла с хостами для проверки доступности, хост должен быть на новой строчке.-ts
,--targets
- хосты для проверки доступности, через запятую.
Также нужно выбрать способ проверки доступности.
-tcp
,--tcp-connect
- проверка доступности через TCP-подключение. Вариант по умолчанию. Хосты для тестирования должны быть заданы в виде<host>:<port>
.-r
,--reachable
- проверка доступности через ping. На входе нужно указать только хост.-h
,--http
- проверка доступности через HTTP GET запрос. На входе нужно указать URL.
Остальные параметры опциональны.
-p
,--parallelism
- максимальное количество проверок доступности, которые выполняются одновременно. Целое число. Значение по умолчанию - 10.-i
,--interval
- максимальное время, которое должно пройти перед повторной проверкой доступности хоста. Целое число в секндах. Значение по умолчанию - 10 секунд.-t
,--timeout
- таймаут при выполнени проверки доступности хоста. Целое число в секундах. Значение по умолчанию - 5 секунд.
Для выведения подсказки нужно запустить программу без параметров.
Раз в 5 секунд выводится информация о протестированных хостах: результат тестирования (успех или разные ошибки), длительность теста, время последнего теста и время, прошедшее с момента последнего теста.
Все примеры ниже запускаются из директории с репозиторием.
java -jar network-access-test.jar -tcp -f example/tcp-connect-small.txt
================================================================================
Testing results at 2022-01-17T00:50:16.474
--------------------------------------------------------------------------------
target status test duration test time
--------------------------------------------------------------------------------
173.194.222.139:80 ok 28ms 2022-01-17T00:50:15 803ms ago
8.8.8.8:80 timeout 5s 2022-01-17T00:50:15 507ms ago
8.8.8.8:53 ok 27ms 2022-01-17T00:50:15 804ms ago
baidu.com:80 ok 488ms 2022-01-17T00:50:16 135ms ago
google.com:80 ok 60ms 2022-01-17T00:50:15 724ms ago
linkedin.com:80 ok 20ms 2022-01-17T00:50:15 805ms ago
other-unresolvable.dum:321 dns_err 12ms 2022-01-17T00:50:15 846ms ago
unresolvable.fake:123 dns_err 13ms 2022-01-17T00:50:15 846ms ago
wikipedia.org:80 ok 61ms 2022-01-17T00:50:15 723ms ago
youtube.com:80 ok 59ms 2022-01-17T00:50:15 725ms ago
================================================================================
Для корректной работы этого способа java нужны повышенные привелегии.
sudo java -jar network-access-test.jar -r -f example/reachable-small.txt
================================================================================
Testing results at 2022-01-17T01:04:07.338
--------------------------------------------------------------------------------
target status test duration test time
--------------------------------------------------------------------------------
173.194.222.139 ok 19ms 2022-01-17T01:04:01 5s ago
8.8.8.8 ok 18ms 2022-01-17T01:04:01 5s ago
baidu.com ok 448ms 2022-01-17T01:04:03 4s ago
facebook.com ok 16ms 2022-01-17T01:04:02 4s ago
google.com ok 18ms 2022-01-17T01:04:01 5s ago
linkedin.com ok 2ms 2022-01-17T01:04:01 5s ago
other-unresolvable.dum dns_err 5ms 2022-01-17T01:04:01 5s ago
unresolvable.fake dns_err 6ms 2022-01-17T01:04:01 5s ago
wikipedia.org ok 52ms 2022-01-17T01:04:01 5s ago
youtube.com ok 17ms 2022-01-17T01:04:01 5s ago
================================================================================
Редиректы считаются успехом.
java -jar network-access-test.jar -h -f example/http-small.txt
================================================================================
Testing results at 2022-01-17T01:10:33.443
--------------------------------------------------------------------------------
target status test duration test time
--------------------------------------------------------------------------------
http://8.8.8.8/ timeout 5s 2022-01-17T01:10:32 853ms ago
http://baidu.com/ http_ok(200) 554ms 2022-01-17T01:10:28 5s ago
http://facebook.com/ http_ok(301) 113ms 2022-01-17T01:10:23 9s ago
http://linkedin.com/ http_err(503) 6ms 2022-01-17T01:10:32 544ms ago
http://other-unresolvable.... dns_err 4ms 2022-01-17T01:10:32 711ms ago
http://twitter.com/ http_ok(301) 183ms 2022-01-17T01:10:25 7s ago
http://unresolvable.fake/ dns_err 4ms 2022-01-17T01:10:32 710ms ago
http://wikipedia.org/ http_ok(301) 177ms 2022-01-17T01:10:24 9s ago
http://www.google.com/ http_ok(200) 461ms 2022-01-17T01:10:28 5s ago
http://youtube.com/ http_ok(301) 63ms 2022-01-17T01:10:33 54ms ago
================================================================================