Molten應(yīng)用透明鏈路追蹤工具
Molten 是應(yīng)用透明鏈路追蹤工具。
Molten 追蹤php核心調(diào)用庫(kù)運(yùn)行時(shí)信息并且按照zipkin/optracing格式輸出信息。
Molten 提供多種sapi, 多種采樣類(lèi)型, 上報(bào)追蹤狀態(tài), 模塊控制和多種數(shù)據(jù)落地 類(lèi)型等功能。
依賴(lài)于Molten 很容易構(gòu)建基于php語(yǔ)言的分布式全鏈路追蹤系統(tǒng) 目前已經(jīng)運(yùn)行在生產(chǎn)環(huán)境上千臺(tái)機(jī)器上。
安裝
以下是你需要做的安裝molten在你的系統(tǒng)上。
phpize ./configure make && make install
make install 復(fù)制 molten.so 到確切的位置, 但是你還需要開(kāi)啟模塊在php配置中,編輯你自己的php.ini或者添加molten.ini在/etc/php5/conf.d, 并且添加如下內(nèi)容:extension=molten.so。
在./configure 階段, 你也可以添加 --enable-zipkin-header=yes 支持zipkin B3 header。
快速開(kāi)始
cd example sh run.sh
在瀏覽器中打開(kāi) http://127.0.0.1:9411/zipkin/, 能夠看見(jiàn)鏈路信息。
如果你認(rèn)為上述太簡(jiǎn)單,你可以做下面的操作。
cd example sh complex.sh
怎么樣,是不是很酷。
注意 如果沒(méi)有看到詳細(xì)信息,那么EndTime選項(xiàng)中添加1小時(shí)。
配置
基礎(chǔ)配置
molten.enable 1開(kāi)啟0關(guān)閉, 默認(rèn) 1。
molten.service_name 設(shè)置應(yīng)用服務(wù)名, 默認(rèn)default。
molten.tracing_cli 1追蹤cli模式下信息, 0關(guān)閉, 默認(rèn)0。
采樣配置
molten.sampling_type 類(lèi)型類(lèi)型, 1采樣率控制, 2通過(guò)每分鐘request數(shù), 默認(rèn)是1。
molten.sampling_request 采樣類(lèi)型是請(qǐng)求數(shù)采樣,每分鐘的采樣請(qǐng)求數(shù), 默認(rèn)是10。
molten.sampling_rate_base 采樣類(lèi)型是采樣率時(shí),每個(gè)請(qǐng)求的采樣幾率, 默認(rèn)是256。
控制模塊配置
molten.notify_uri 通知管理中心的uri。
上報(bào)模塊配置
上報(bào)模塊使用和數(shù)據(jù)模塊相同的輸出類(lèi)型。
molten.report_interval 數(shù)據(jù)模塊調(diào)用間隔, 默認(rèn) 60。
molten.report_limit 數(shù)據(jù)上報(bào)請(qǐng)求上限, 默認(rèn) 100。
數(shù)據(jù)模塊
molten.sink_type 數(shù)據(jù)落地類(lèi)型, 1 寫(xiě)入文件, 文件地址依賴(lài)molten.sink_log_path, 2 寫(xiě)入到標(biāo)準(zhǔn)輸出, 3 寫(xiě)入到syslog中, 4 通過(guò)curl發(fā)送, 發(fā)送地址依賴(lài) molten.sink_http_uri.
molten.output_type 輸出全部追蹤塊(span)(1) 或者一行輸出一個(gè)塊(2)。
molten.sink_log_path 寫(xiě)入文件地址。
molten.sink_http_uri 發(fā)送http地址。
molten.sink_syslog_unix_socket 發(fā)送日志到syslog udp unixdomain日志收集源中。
追蹤塊配置
molten.span_format 追蹤塊格式(span), 不同的追蹤系統(tǒng)選擇zipkin 或者 zipkin_v2或者 opentracing。
函數(shù)
molten_span_format() 獲取當(dāng)前追蹤系統(tǒng)span格式, 返回zipkin或者opentracing字符串。
molten_get_traceid() 獲取當(dāng)前上下文的traceiid,返回16進(jìn)制的字符串。
molten_set_traceid($trace_id) 設(shè)置當(dāng)前上下文的額traceiid, 無(wú)返回。
驗(yàn)證
php -d extension=molten.so -d molten.enable=1 -d molten.sink_type=2 -d molten.tracing_cli=1 -d molten.sampling_rate=1 -r '$c=curl_init("http://localhost:12345");curl_exec($c);'
可以看到如下輸出:
[{"traceId":"%s","name":"php_curl","version":"php-4","id":"1.1","parentId":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"cs","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"cr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"http.url","value":"http:\/\/localhost:12345\/","endpoint":{"serviceName":"%s","ipv4":"%s"}},{"key":"error","value":"Failed
connect to localhost:12345; Connection
refused","endpoint":{"serviceName":"%s","ipv4":"%s"}}]},{"traceId":"%s","name":"cli","version":"php-4","id":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"sr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"ss","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"path","value":"-","endpoint":{"serviceName":"%s","ipv4":"%s"}}]}]
功能
從上述配置中,你可以看到我們提供的功能。
攔截器
molten 攔截 curl,pdo,mysqli,redis,mongodb,memcached擴(kuò)展,構(gòu)建運(yùn)行時(shí)追蹤信息. 支持全鏈路追蹤功能, molten 替換了curl_exec,curl_setopt,curl_setopt_array函數(shù), 并且在請(qǐng)求中添加了鏈路頭(x-w-traceid, x-w-spanid and so on)。
定制化的鏈路格式, 支持兩個(gè)流行格式(zipkin 和 opentracing)。
采樣
兩種不同的采樣方式并且能夠通過(guò)控制模塊進(jìn)行修改。
數(shù)據(jù)落地
molten當(dāng)前支持3種數(shù)據(jù)落地方式,標(biāo)準(zhǔn)輸出,文件,http。并且能夠選擇輸出的位置。
控制
使用http協(xié)議控制探針的行為。
查看molten的狀態(tài), 通過(guò)GET方法請(qǐng)求http://domain/molten/status。
輸出內(nèi)容如下,已經(jīng)適配了prometheus格式。
# HELP molten_request_all Number of all request. # TYPE molten_request_all counter molten_request_all %d # HELP molten_request_capture Number of request be capture. # TYPE molten_request_capture counter molten_request_capture %d # HELP molten_sampling_type the type of sampling. # TYPE molten_sampling_type gauge molten_sampling_type %d # HELP molten_sampling_rate the rate of sampling. # TYPE molten_sampling_rate gauge molten_sampling_rate %d # HELP molten_sampling_request the request be capture one min. # TYPE molten_sampling_request gauge molten_sampling_request %d
修改molten采樣方式, 使用POST方法請(qǐng)求http://domain/molten/status。
數(shù)據(jù)是json格式,字段和配置項(xiàng)中的含義是一致的。
{"enable":1,"samplingType":2,"samplingRate":20,"samplingRequest":100}
上報(bào)
上報(bào)模塊能夠記錄,molten并沒(méi)有采樣樣到的關(guān)鍵數(shù)據(jù)信息。
