Ssh 通过公共IP将erlang observer连接到远程计算机 背景

Ssh 通过公共IP将erlang observer连接到远程计算机 背景,ssh,erlang,elixir,Ssh,Erlang,Elixir,我有一台正在生产的机器运行elixir应用程序(无法访问iex,只能访问erl),我的任务是分析我们为什么要消耗这么多CPU。这里的想法是启动observer,查看“流程”选项卡,并查看缩减最多的流程 我如何连接? 要连接,我将遵循博客上的教程: 一, 他们的指示如下: 使用cookie和名称在生产机器中启动应用程序 从本地运行:sshuser@public_ip“epmd-names”获取应用程序的名称和使用的端口 从本地创建到远程计算机的ssh隧道:ssh-L 4369:user@pub

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

我如何连接? 要连接,我将遵循博客上的教程:

  • 一,
他们的指示如下:

  • 使用cookie和名称在生产机器中启动应用程序
  • 从本地运行:
    sshuser@public_ip“epmd-names”
    获取应用程序的名称和使用的端口
  • 从本地创建到远程计算机的ssh隧道:
    ssh-L 4369:user@public_ip:4369-L 42877:user@public_ip:42877 user@public_ip
    (默认情况下,4399是epmd端口,42877是应用程序的端口)
  • 使用节点名称从本地连接到远程计算机:
    erl-name”user@app_name“-setcookie”mah_cookie”-隐藏-运行观察者
  • 问题 现在理论上我应该可以在机器上使用observer了。但是,我遇到了以下错误:

    协议“inet\u tcp”:注册/侦听错误:epmd\u关闭

    所以,在搜索了互联网的黑暗面之后,我决定使用
    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
    
    其中:

  • erlang
    -name
    :我的应用程序名称
  • 机器用户:火焰
  • 机器公共ip:99.999.99.999(显然不是真实的)
  • 所以它告诉我,未知的主人??我很困惑,因为99.999.99.999是机器本身的公共IP

    问题
  • 我做错了什么
  • 我读到,在旧版本的erlang中,如果一台机器位于不同的网络中,我就不能用observer监视它(这种情况是这样的,因为我想从本地主机监视这台机器),但在现代我找不到任何与此相关的信息
  • 如果这实际上是不可能的,我还有什么选择呢
  • 解决方案 经过3天不间断的搜索,我终于找到了一些有用的东西。 总而言之,我把我所做的一切都放在这里

    本地计算机中的所有步骤:

  • 从远程服务器获取端口:
  • 使用以下端口创建ssh tunel:
  • ssh远程-user@remote-ip-L4369:localhost:4369-L43175:localhost:43175

  • 在本地计算机的另一个终端上,使用远程服务器中的应用程序正在使用的cookie运行iex终端。然后连接到它并启动观察者:
  • 启动观察者后,从节点菜单中选择机器

    可能的挫折 如果您尝试过此方法,但不起作用,您可以检查以下几点:

  • 检查本地计算机上的EPMD端口是否可用,如果不是,请使用它终止进程并释放它
  • 检查ssh隧道密钥和配置以获得权限。正如@Roberto Aloi所指出的,这个链接非常有用:

  • 这个问题描述了一些可能引发错误的场景:此外,由于最终目标是识别具有高约简计数的进程,您是否考虑简单地使用Erlang API <代码> Erlang:PrimeStudioFiels/1,2?
    > ssh remote-user@remote-ip "epmd -names"
    epmd: up and running on port 4369 with data:
    name super_duper_app at port 43175
    
    iex --name observer@127.0.0.1 --cookie super_duper_cookie
    Node.connect :"super_duper_app@127.0.0.1"
    > true
    :observer.start