Molten 功能簡介以及使用指南
<h1 id="molten">Molten 功能簡介以及使用指南</h1>
<p>Molten項目地址:https://github.com/chuan-yun/Molten</p>
<h2 id="">簡介</h2>
<p>現今隨著應用間調用的復雜化,php 開發者們在復雜調用鏈路追蹤上並沒有特別好的工具和方法, 流行的php問題定位工具譬如phptrace,xhprof等並不會針對於遠程調用進行重點分析,比較適合單機應用。當php分布式系統需要明確組件調用關系的時候,這些工具很難發揮作用。 </p>
<p>在這裏我們拋出google在2010年提出的概念<code>dapper-大規模分布式應用追蹤系統</code>,其中提出的分布式追蹤系統的構想已經被一些公司或組織所實現,譬如<code>zipkin</code> 、<code>opentracing</code>。但是遺憾的是,現今沒有比較讓人認可應用透明php追蹤方式。</p>
<p>chuan-yun組織實現的php擴展<a href="https://github.com/chuan-yun/Molten">Molten</a>已經解決了這個問題,它部署簡單、應用透明、配置項豐富、兼容zipkin和opentracing標準、能夠追蹤眾多基礎組件,並且通過修改http請求header實現了應用透明的鏈路串聯。</p>
<h2 id="-1">快速開始</h2>
<p>我們能夠用molten追蹤php應用http、redis、mysql、memcached、mongodb等組件的調用信息。</p>
<p>請看項目簡介中“QuickStart”部分,安裝完molten擴展之後, 只需要兩個步驟就可以看到追蹤的鏈路信息。 </p>
<p>cd example && sh run.sh:</p>
<p>在瀏覽器中打開http://127.0.0.1:9411/zipkin/ 就可以看到鏈路信息。腳本中使用了curl請求一個不存在的http地址,已經在圖中標紅:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28860441-42ae32c4-778f-11e7-97f7-ef9466112e37.png" alt="image" /></p>
<p>也就是說我們部署完molten,配置好zipkin server 就能夠搭建一個簡單的全鏈路追蹤系統,方便易用。</p>
<p>下圖是我們<a href="https://github.com/chuan-yun">chuanyun</a>系統的截圖,其中memcache, redis,mysql的調用一覽無余,並且不需要用戶修改任何業務代碼。</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28860236-4cc8dea4-778e-11e7-9beb-b48d758c045c.png" alt="image" /></p>
<p>連接的數據庫信息也是一覽無余:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28863906-46ba458e-779d-11e7-9632-7b8330f7676a.png" alt="image" /></p>
<p>上述示例太小?咱們展示一個復雜的鏈路追蹤。</p>
<p>示例中啟動了3個server,t1<em>server和t2</em>server都去請求base_server 這些http 請求構建成了一個完整的鏈路信息,構建了一個php全鏈路系統就是這麽就簡單!!</p>
<p>Cd example && sh complex.sh:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28860504-8535f758-778f-11e7-8814-d6dec1bd0689.png" alt="image" /></p>
<p>其中http的詳細信息也會體現出來:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28860730-55017426-7790-11e7-99c8-c1874cf2a749.png" alt="image" /></p>
<p>chuan-yun系統通過Molten,最終能夠構建出一個應用、接口間的拓撲關系:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28863832-0483c4a6-779d-11e7-988b-6bc38676de95.png" alt="image" /></p>
<p>研發們的同學們再也不用為調用關系發愁了,我們可以監控到你想要的!!!</p>
<p>以上功能是不是很cool, Molten能夠幫助你了解應用系統調用的方方面面,讓你站在一個更高的位置進行系統的調優。</p>
<h2 id="-2">功能</h2>
<p>現在<a href="https://github.com/chuan-yun/Molten">Molten</a>提供curl、pdo、mysqli、redis、mongodb、memcached等組件的攔截,這些信息攔截都是應用透明,開箱即用,輸出zipkin格式非常方便。我們接下來還會增加攔截的組件,如果你也有想要攔截的組件,可以提issue給我們偶!!項目地址<a href="https://github.com/chuan-yun/Molten">Molten</a>。</p>
<p>查看molten是否正常啟動了,可以訪問:http://your.domain/molten/status:</p>
<p><img src="https://user-images.githubusercontent.com/9278779/28856084-7dc17a2c-7773-11e7-9248-d86a188e8180.png" alt="image" /></p>
<p>面輸出內容格式讓人感到疑惑,其實這個是prometheus監控exporter輸出格式,輸出這種格式方便和prometheus集成。</p>
<p>還可以通過POST http://your.domain/molten/status修改探針采樣的方式,內容如下:</p>
<pre><code class="json language-json">{"enable":1,"samplingType":2,"samplingRate":20,"samplingRequest":100}
</code></pre>
<p>其中samplingType是采樣類型:1是根據采樣率采樣,2是根據每分鐘的請求數。</p>
<p>samplingRate是采樣率,即多少個請求采樣一個,samplingRequest是每分鐘的前多少個請求被采樣。采樣是降低性能損耗的有效方式,通過還能夠根據系統的承載量動態的調整。</p>
<p>還可通過molten.sink_type設置數據輸出方式, 1是輸出到文件中, 2輸出到標準輸出,4 通過http發送。</p>
<p>Molten在phptrace數據分析的基礎上進行大量的開發, 本身性能在開啟采樣率的情況下影響較小。應用影響如下: </p>
<p>開啟探針傳遞鏈路信息對比(采樣率) | 性能影響
-- | --
1 | 21%
4 | 12%
8 | 8%
32 | 6%
64 | 9%
256 | 8%</p>
<h2 id="-3">貢獻</h2>
<p>這個項目是不是勾起了你的好奇心? 來吧讓你的issue砸向我們,我們會提供更加豐富和完善的功能。最後請不要吝惜你的start :)。</p>
<h2 id="-4">加入我們</h2>
<p><a href="https://github.com/chuan-yun/Molten/wiki/%E5%8A%A0%E5%85%A5%E6%88%91%E4%BB%AC">微信群</a></p>
<h2 id="-5">項目文檔</h2>
<p>項目地址:https://github.com/chuan-yun/Molten</p>
<p>中文文檔:https://github.com/chuan-yun/Molten/blob/master/README_ZH.md</p>
<p>英文文檔:https://github.com/chuan-yun/Molten/blob/master/README.md</p>
<p>穿雲組織:https://github.com/chuan-yun</p>
<p>穿雲doc:https://www.gitbook.com/book/chuan-yun/chuanyun-docs/details</p>
本文出自 “13171443” 博客,請務必保留此出處http://13181443.blog.51cto.com/13171443/1953813
Molten 功能簡介以及使用指南