通过 public IP 将 erlang observer 连接到远程机器

Connecting erlang observer to remote machine via public IP

背景

我有一台生产中的机器 运行正在使用 elixir 应用程序(无法访问 iex,只能访问 erl),我的任务是 运行ning 分析我们为什么消耗这么多CPU。这里的想法是启动观察器,检查进程选项卡并查看减少最多的进程。

我如何连接?

要连接,我正在遵循博客中的教程:

他们的使用说明如下:

  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是app的端口)
  4. 使用节点名称从本地连接到远程计算机:erl -name "user@app_name" -setcookie "mah_cookie" -hidden -run observer

问题

现在理论上我应该可以在机器上使用观察器了。相反,我遇到了以下错误:

Protocol ‘inet_tcp’: register/listen error: 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. 二郎 -name: my_app_name
  2. 机器用户:flame
  3. 机器publicip:99.999.99.999(显然不是真实的)

所以它告诉我,未知主机??我很困惑,因为 99.999.99.999 是机器本身的 public IP!

问题

  1. 我做错了什么?
  2. 我读到在旧版本的 erlang 中,如果它们在不同的网络中,我无法使用观察器监视一台机器(是这种情况,因为我想从我的本地主机监视这台机器)但我没有在现代查找有关此的任何信息。
  3. 如果这实际上是不可能的,我有什么选择?

解决方案

经过 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
  1. 使用以下端口创建 ssh 隧道:

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

  1. 在您本地计算机的另一个终端上,运行 一个 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

启动观察器后,select 节点菜单中的机器。

可能的挫折

如果您已经尝试过但没有成功,您可以检查以下几点:

  1. 检查您本地计算机上的 EPMD 端口是否空闲,如果没有,则终止使用它的进程并释放它。
  2. 检查您的 ssh 隧道密钥和配置的权限。正如@Roberto Aloi 指出的那样 link 可能很有用:https://unix.stackexchange.com/questions/14160/ssh-tunneling-error-channel-1-open-failed-administratively-prohibited-open