Сценарий

Сервис работает, но недоступен

Процесс жив, в своём логе пишет, что слушает порт, и с самой машины отвечает. Снаружи до него не достучаться.

Мониторинг третий час пишет, что orders-api недоступен. Дежурный зашёл на машину, проверил и не понял: процесс запущен, порт слушается, запрос проходит. Тикет закрыли как ложную тревогу. Мониторинг продолжает ругаться.

Симптом

С самой машины всё в порядке. С любой другой - соединение не устанавливается.

$ sudo service orders-api status
orders-api is running

$ curl -s http://localhost:8080/
orders-api ok

$ curl -sS --max-time 3 http://$(hostname -I | awk '{print $1}'):8080/
curl: (7) Failed to connect to 172.18.0.5 port 8080 after 0 ms: Couldn't connect to server

Обрати внимание на последнюю команду. hostname -I печатает адрес машины в сети (у тебя он будет другим). Именно по нему к сервису ходят все, кроме тебя.

Что надо получить

Три условия. Сервис слушает на всех адресах машины, а не только на петлевом (127.0.0.1). По внешнему адресу машины API отвечает строкой orders-api ok. И файл программы /usr/local/bin/orders-api остался неизменным: этот сценарий про настройку, код в нём переписывать не нужно.

Как разбирать «сервис работает, но недоступен»

Первое: «процесс запущен» и «сервис доступен» - это два разных утверждения, и проверяются они разными командами. ps отвечает на первое. На второе отвечает ss -ltnp: -l - слушающие сокеты, -t - TCP, -n - порты числами, -p

Бесплатно с аккаунтом

Дальше бесплатно, нужен только аккаунт

Урок открывается после входа. Создай бесплатный аккаунт, чтобы дочитать его и запустить лабораторию.

Создать бесплатный аккаунт

Уже есть аккаунт? Войти