通常在本地节点和远程节点可以使用net_adm:ping(‘xxx’)可以通的话就可用通过本地observer查看远程节点信息,那么要能ping通,首先需要ip能通,端口能通,但是在实际使用中,调试节点可能在远程服务器上,远程服务器开放的端口又有限,这时候可以通过一些曲折的办法实现。

实现原理:

  • 将本地epmd服务关了,并把本地4369端口设置正向代理到远程服务器,相当于把本低节点注册到了远程机器
  • 找到远程节点的本地端口,并把本地端口正向代理到远程服务器
  • 通过ssh tunnel方式将远程机器的端口暴露到本地

环境要求:

  • 安装本地端口代理工具,本例用MabaXterm中的MobaSSHTurnnel实现。
  • 能从本地正常通过ssh登录目标节点机器
  • 本地安装了与服务器相同版本的erlang

步骤

1. 在远程服务器查看远程节点的端口,通过epmd -name 命令查看

epmd -names
epmd: up and running on port 4369 with data:
name some_node at port 6000

2. 在本地建立4369和节点对应的端口代理

erlang_observer_ssh1.png

图形化配置非常简单,remote_server的ip是相对于ssh server的ip

erlang_observer_ssh2.png
填好两个端口转发规则后先清理本地占用的端口点击start即可.

如果远程端口刚好和我一样是6000,先关闭mabaxterm的X11服务,否则无法start。

4369端口转发无法启动,先关闭本地epmd服务,
查看4369端口是否被占用: netstat -aon|findstr 4369
查看某pid是否epmd进程:wmic process get name,executablepath,processid|findstr “pid”
终止进程: taskkill /f /pid 4369

3. 本地建立启动observer的快捷方式

本地启动节点,远程节点也需要是xxx@127.0.0.1的形式,且需要相同的cookie
“D:\Program Files\erl10.7\bin\werl.exe” -name win_debug@127.0.0.1 -setcookie test_cookie -run observer start
在快捷图片属性[目标]处填入上面命令(具体安装路径根据实际情况更改),双击启动即可使用

erlang_observer_debug_node.png

参考:
https://gist.github.com/pnc/9e957e17d4f9c6c81294