Files
arthas/tunnel.html
T
2022-03-03 16:40:36 +08:00

404 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="zh-CN" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="zh-CN" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Arthas Tunnel &mdash; Arthas 3.5.6 文档</title>
<link rel="shortcut icon" href="_static/favicon.ico"/>
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/translations.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/overrides.css" type="text/css" />
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="next" title="Http API" href="http-api.html" />
<link rel="prev" title="Arthas 命令行快捷键" href="keymap.html" />
<script>
if (window.location.href.startsWith("https://alibaba.github.io/arthas/")) {
window.location.href = "https://arthas.aliyun.com/doc/" + window.location.href.substr("https://alibaba.github.io/arthas/".length);
}
</script>
<script src="_static/center_page.js"></script>
<link rel="stylesheet" href="https://g.alicdn.com/code/lib/highlight.js/9.13.1/styles/github.min.css">
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Arthas
</a>
<div class="version">
3.5.6
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference external" href="https://arthas.aliyun.com/">首页</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arthas.aliyun.com/doc/en/">English Docs</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn">在线教程(katacoda)</a></li>
<li class="toctree-l1"><a class="reference external" href="https://start.aliyun.com/handson-lab?category=arthas">在线教程(阿里云)</a></li>
<li class="toctree-l1"><a class="reference internal" href="install-detail.html">安装</a></li>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载</a></li>
<li class="toctree-l1"><a class="reference internal" href="quick-start.html">快速入门</a></li>
<li class="toctree-l1"><a class="reference internal" href="advanced-use.html">进阶使用</a></li>
<li class="toctree-l1"><a class="reference internal" href="commands.html">命令列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="web-console.html">WebConsole</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Arthas Tunnel</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#arthas-tunnel-server">下载部署arthas tunnel server</a></li>
<li class="toctree-l2"><a class="reference internal" href="#arthastunnel-server">启动arthas时连接到tunnel server</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id1">最佳实践</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tunnel-server">Tunnel Server的管理页面</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">权限管理</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">集群方式管理</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">Arthas tunnel server的工作原理</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="http-api.html">Http API</a></li>
<li class="toctree-l1"><a class="reference internal" href="docker.html">Docker</a></li>
<li class="toctree-l1"><a class="reference internal" href="spring-boot-starter.html">Arthas Spring Boot Starter</a></li>
<li class="toctree-l1"><a class="reference internal" href="idea-plugin.html">IDEA 插件</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/issues?q=label%3Auser-case">用户案例</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq.html">FAQ/常见问题</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas">Star me at GitHub</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md#">编译调试/参与贡献</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/releases">Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="contact-us.html">QQ群/钉钉群</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Arthas</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>Arthas Tunnel</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/tunnel.md" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="arthas-tunnel">
<h1>Arthas Tunnel<a class="headerlink" href="#arthas-tunnel" title="永久链接至标题"></a></h1>
<p>通过Arthas Tunnel Server/Client 来远程管理/连接多个Agent。</p>
<p>比如,在流式计算里,Java进程可以是在不同的机器启动的,想要使用Arthas去诊断会比较麻烦,因为用户通常没有机器的权限,即使登陆机器也分不清是哪个Java进程。</p>
<p>在这种情况下,可以使用Arthas Tunnel Server/Client。</p>
<p>参考:</p>
<ul class="simple">
<li><p>1: <a class="reference internal" href="web-console.html"><span class="doc">Web Console</span></a></p></li>
<li><p>2: <a class="reference internal" href="spring-boot-starter.html"><span class="doc">Arthas Spring Boot Starter</span></a></p></li>
</ul>
<div class="section" id="arthas-tunnel-server">
<h2>下载部署arthas tunnel server<a class="headerlink" href="#arthas-tunnel-server" title="永久链接至标题"></a></h2>
<p><a class="reference external" href="https://github.com/alibaba/arthas/releases">https://github.com/alibaba/arthas/releases</a></p>
<ul class="simple">
<li><p>从Maven仓库下载:<a class="reference external" href="https://arthas.aliyun.com/download/arthas-tunnel-server/latest_version?mirror=aliyun"><img alt="Arthas" src="https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg?style=flat-square" /></a></p></li>
<li><p>从Github Releases页下载: <a class="reference external" href="https://github.com/alibaba/arthas/releases">https://github.com/alibaba/arthas/releases</a></p></li>
</ul>
<p>Arthas tunnel server是一个spring boot fat jar应用,直接<code class="docutils literal notranslate"><span class="pre">java</span> <span class="pre">-jar</span></code>启动:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">java -jar arthas-tunnel-server.jar</pre></div>
</div>
<p>默认情况下,arthas tunnel server的web端口是<code class="docutils literal notranslate"><span class="pre">8080</span></code>arthas agent连接的端口是<code class="docutils literal notranslate"><span class="pre">7777</span></code></p>
<p>启动之后,可以访问 <a class="reference external" href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a> ,再通过<code class="docutils literal notranslate"><span class="pre">agentId</span></code>连接到已注册的arthas agent上。</p>
<p>通过Spring Boot的Endpoint,可以查看到具体的连接信息: <a class="reference external" href="http://127.0.0.1:8080/actuator/arthas">http://127.0.0.1:8080/actuator/arthas</a> ,登陆用户名是<code class="docutils literal notranslate"><span class="pre">arthas</span></code>,密码在arthas tunnel server的日志里可以找到,比如:</p>
<div class="highlight-default notranslate"><pre class="literal-block">32851 [main] INFO o.s.b.a.s.s.UserDetailsServiceAutoConfiguration
Using generated security password: f1dca050-3777-48f4-a577-6367e55a78a2</pre>
</div>
</div>
<div class="section" id="arthastunnel-server">
<h2>启动arthas时连接到tunnel server<a class="headerlink" href="#arthastunnel-server" title="永久链接至标题"></a></h2>
<p>在启动arthas,可以传递<code class="docutils literal notranslate"><span class="pre">--tunnel-server</span></code>参数,比如:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">as.sh --tunnel-server &#x27;ws://127.0.0.1:7777/ws&#x27;</pre></div>
</div>
<p>也可以使用下面的测试地址(不保证一直可用):</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">as.sh --tunnel-server &#x27;ws://47.75.156.201:80/ws&#x27;</pre></div>
</div>
<ul class="simple">
<li><p>如果有特殊需求,可以通过<code class="docutils literal notranslate"><span class="pre">--agent-id</span></code>参数里指定agentId。默认情况下,会生成随机ID。</p></li>
</ul>
<p>attach成功之后,会打印出agentId,比如:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash"> ,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. &#x27;&#x27;--. .--&#x27;| &#x27;--&#x27; | / O \ &#x27; .-&#x27;
| .-. || &#x27;--&#x27;.&#x27; | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-&#x27; |
`--&#x27; `--&#x27;`--&#x27; &#x27;--&#x27; `--&#x27; `--&#x27; `--&#x27;`--&#x27; `--&#x27;`-----&#x27;
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.1.2
pid 86183
time 2019-08-30 15:40:53
id URJZ5L48RPBR2ALI5K4V</pre></div>
</div>
<p>如果是启动时没有连接到 tunnel server,也可以在后续自动重连成功之后,通过 session命令来获取 agentId</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">[arthas@86183]$ session
Name Value
-----------------------------------------------------
JAVA_PID 86183
SESSION_ID f7273eb5-e7b0-4a00-bc5b-3fe55d741882
AGENT_ID URJZ5L48RPBR2ALI5K4V
TUNNEL_SERVER ws://47.75.156.201:80/ws</pre></div>
</div>
<p>以上面的为例,在浏览器里访问 <a class="reference external" href="http://47.75.156.201/arthas/?port=80">http://47.75.156.201/arthas/?port=80</a> ,输入 <code class="docutils literal notranslate"><span class="pre">agentId</span></code>,就可以连接到本机上的arthas了。</p>
<p><img alt="_images/arthas-tunnel-server.png" src="_images/arthas-tunnel-server.png" /></p>
</div>
<div class="section" id="id1">
<h2>最佳实践<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<blockquote>
<div><p>注意,agentId要保持唯一,否则会在tunnel server上冲突,不能正常工作。</p>
</div></blockquote>
<p>如果 arthas agent配置了 <code class="docutils literal notranslate"><span class="pre">appName</span></code>,则生成的agentId会带上<code class="docutils literal notranslate"><span class="pre">appName</span></code>的前缀。</p>
<p>比如在加上启动参数:<code class="docutils literal notranslate"><span class="pre">as.sh</span> <span class="pre">--tunnel-server</span> <span class="pre">'ws://127.0.0.1:7777/ws'</span> <span class="pre">--app-name</span> <span class="pre">demoapp</span></code> ,则生成的agentId可能是<code class="docutils literal notranslate"><span class="pre">demoapp_URJZ5L48RPBR2ALI5K4V</span></code></p>
<p>Tunnel server会以<code class="docutils literal notranslate"><span class="pre">_</span></code>做分隔符,提取出<code class="docutils literal notranslate"><span class="pre">appName</span></code>,方便按应用进行管理。</p>
<blockquote>
<div><p>另外,也可以在解压的arthas目录下的 <code class="docutils literal notranslate"><span class="pre">arthas.properties</span></code>,或者在spring boot应用的<code class="docutils literal notranslate"><span class="pre">application.properties</span></code>里配置<code class="docutils literal notranslate"><span class="pre">appName</span></code></p>
</div></blockquote>
</div>
<div class="section" id="tunnel-server">
<h2>Tunnel Server的管理页面<a class="headerlink" href="#tunnel-server" title="永久链接至标题"></a></h2>
<p>在本地启动tunnel-server,然后使用<code class="docutils literal notranslate"><span class="pre">as.sh</span></code> attach,并且指定应用名<code class="docutils literal notranslate"><span class="pre">--app-name</span> <span class="pre">test</span></code></p>
<div class="highlight-default notranslate"><pre class="literal-block">$ as.sh --tunnel-server &#x27;ws://127.0.0.1:7777/ws&#x27; --app-name test
telnet connecting to arthas server... current timestamp is 1627539688
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is &#x27;^]&#x27;.
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. &#x27;&#x27;--. .--&#x27;| &#x27;--&#x27; | / O \ &#x27; .-&#x27;
| .-. || &#x27;--&#x27;.&#x27; | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-&#x27; |
`--&#x27; `--&#x27;`--&#x27; &#x27;--&#x27; `--&#x27; `--&#x27; `--&#x27;`--&#x27; `--&#x27;`-----&#x27;
wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.5.3
main_class demo.MathGame
pid 65825
time 2021-07-29 14:21:29
id test_PE3LZO9NA9ENJYTPGL9L</pre>
</div>
<p>然后访问 tunnel-server,可以看到所有连接的应用列表:</p>
<p><a class="reference external" href="http://localhost:8080/apps.html">http://localhost:8080/apps.html</a></p>
<p><img alt="_images/tunnel-server-apps.png" src="_images/tunnel-server-apps.png" /></p>
<p>再打开详情,则可以看到连接的所有agent列表:</p>
<p><a class="reference external" href="http://localhost:8080/agents.html?app=test">http://localhost:8080/agents.html?app=test</a></p>
<p><img alt="_images/tunnel-server-agents.png" src="_images/tunnel-server-agents.png" /></p>
</div>
<div class="section" id="id2">
<h2>权限管理<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<p>目前tunnel server没有专门的权限管理,用户需要自行开发,对app name鉴权。</p>
</div>
<div class="section" id="id3">
<h2>集群方式管理<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>如果希望部署多台 tunnel server,可以通过nginx做转发,redis来保存agent信息。</p>
<ul class="simple">
<li><p>nginx需要配置sticky session,保证用户web socket连接到同一个后端tunnel server上。简单的配置方式是用<code class="docutils literal notranslate"><span class="pre">ip_hash</span></code></p></li>
</ul>
</div>
<div class="section" id="id4">
<h2>Arthas tunnel server的工作原理<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<div class="highlight-default notranslate"><pre class="literal-block">browser &lt;-&gt; arthas tunnel server &lt;-&gt; arthas tunnel client &lt;-&gt; arthas agent</pre>
</div>
<p><a class="reference external" href="https://github.com/alibaba/arthas/blob/master/tunnel-server/README.md#">tunnel-server/README.md</a></p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="http-api.html" class="btn btn-neutral float-right" title="Http API" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="keymap.html" class="btn btn-neutral float-left" title="Arthas 命令行快捷键" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2018-2020, Alibaba Middleware Group, and contributors
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<div class="github-fork-ribbon-wrapper right">
<div class="github-fork-ribbon">
<a href="https://github.com/alibaba/arthas" target="_blank">Fork me at GitHub</a>
</div>
</div>
<script type="text/javascript" src="_static/add_badges.js"></script>
<script src="https://g.alicdn.com/code/lib/highlight.js/9.13.1/highlight.min.js"></script>
<script src="https://g.alicdn.com/code/lib/highlightjs-line-numbers.js/2.5.0/highlightjs-line-numbers.min.js"></script>
<script>
document.querySelectorAll('div.hljs > pre').forEach(function(block) {
hljs.highlightBlock(block);
hljs.lineNumbersBlock(block);
});
</script>
<script type="text/javascript">document.write(unescape("%3Cspan style='display:none;' id='cnzz_stat_icon_1279151497'%3E%3C/span%3E%3Cscript src='https://s4.cnzz.com/z_stat.php%3Fid%3D1279151497' type='text/javascript'%3E%3C/script%3E"));</script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body>
</html>