Подключение erlang наблюдателя к удаленной машине через публичный IP - PullRequest
0 голосов
/ 28 января 2019

Справочная информация

У меня в работе машина, на которой запущено приложение elixir (нет доступа к iex, только к erl), и мне поручено провести анализ того, почему мы потребляем так много ЦП.Идея состоит в том, чтобы запустить обозреватель, проверить вкладку процессов и увидеть процессы с наибольшим сокращением.

Как я подключаюсь?

Для подключения я следую учебному пособию из блога:

Их инструкции следующие:

  1. запустить приложение на рабочей машине с файлом cookieи имя
  2. из локального запуска: ssh user@public_ip "epmd -names" для получения имени приложения и используемого порта
  3. из локального создания туннеля ssh к удаленной машине: ssh -L 4369:user@public_ip:4369 -L 42877:user@public_ip:42877 user@public_ip (4369порт epmd по умолчанию, 42877 - это порт приложения)
  4. из локального соединения с удаленным компьютером, используя имя узла: erl -name "user@app_name" -setcookie "mah_cookie" -hidden -run observer

Проблема

И теперь теоретически я должен иметь возможность использовать наблюдателя на машине.Однако вместо этого меня встречает следующая ошибка:

Протокол 'inet_tcp': ошибка регистрации / прослушивания: epmd_close

Итак, прочесав темную сторону Интернета, ярешил использовать sudo journalctl -f, чтобы проверить все журналы машины, и я нашел это:

channel 3: open failed: administratively prohibited: open failed
my_app_name sshd[8917]: error: connect_to flame@99.999.99.999: unknown host (Name or service not known)
/scripts/watchdog.sh")
my_app_name CRON[9985]: pam_unix(cron:session): session closed for user flame

Где:

  1. erlang -name: my_app_name
  2. пользователь машины: пламя
  3. публичный IP-адрес машины: 99.999.99.999 (очевидно, не настоящий)

, так что он говорит мне, неизвестный хост ??Я запутался, так как 99.999.99.999 является публичным IP-адресом самой машины!

Вопросы

  1. Что я делаю не так?
  2. Я читал это в старых версияхиз erlang Я не могу контролировать машину с помощью наблюдателя, если они находятся в разных сетях (что имеет место, потому что я хочу контролировать эту машину с моего локального хоста), но я не нашел никакой информации об этом в наши дни.
  3. Если это на самом деле невозможно, какие у меня есть альтернативы?

1 Ответ

0 голосов
/ 31 января 2019

Решение

После 3 дней непрерывного поиска я наконец нашел то, что работает.Подводя итог, я помещаю здесь все, что я сделал.

Все шаги на локальной машине:

  1. получение портов с удаленного сервера:
> ssh remote-user@remote-ip "epmd -names"
epmd: up and running on port 4369 with data:
name super_duper_app at port 43175
создать ssh-туннель с портами:

ssh remote-user@remote-ip -L4369:localhost:4369 -L43175:localhost:43175

На другом терминале на вашем локальном компьютере запустите терминал iex с файлом cookie, который используется приложением на вашем удаленном сервере.Затем подключитесь к нему и запустите наблюдатель:
iex --name observer@127.0.0.1 --cookie super_duper_cookie
Node.connect :"super_duper_app@127.0.0.1"
> true
:observer.start

При запущенном наблюдателе выберите машину из меню узлов.

Возможные неудачи

Если вы попыталисьэто и не сработало. Есть несколько вещей, которые вы можете проверить:

  1. Проверьте, свободен ли порт EPMD на вашем локальном компьютере, если нет, завершите процесс, используя его, и освободите его.
  2. Проверьте ваши ключи SSH туннелирования и конфигурации для разрешений.Как отметил @Roberto Aloi, эта ссылка может быть полезна: https://unix.stackexchange.com/questions/14160/ssh-tunneling-error-channel-1-open-failed-administratively-prohibited-open
...