鏈路追蹤工具Zipkin整合

前言

Zipkin 是一個(gè)開放源代碼分布式的跟蹤系統(tǒng)悲龟,每個(gè)服務(wù)向zipkin報(bào)告計(jì)時(shí)數(shù)據(jù)采转,zipkin會(huì)根據(jù)調(diào)用關(guān)系通過Zipkin UI生成依賴關(guān)系圖受扳。

Zipkin提供了可插拔數(shù)據(jù)存儲(chǔ)方式:In-Memory鞋真、MySql均函、Cassandra以及Elasticsearch螟凭。為了方便在開發(fā)環(huán)境我直接采用了In-Memory方式進(jìn)行存儲(chǔ)虚青,生產(chǎn)數(shù)據(jù)量大的情況則推薦使用Elasticsearch。

基本術(shù)語

  1. Span:基本工作單元螺男,例如棒厘,在一個(gè)新建的span中發(fā)送一個(gè)RPC等同于發(fā)送一個(gè)回應(yīng)請求給RPC,span通過一個(gè)64位ID唯一標(biāo)識(shí)下隧,trace以另一個(gè)64位ID表示奢人,span還有其他數(shù)據(jù)信息,比如摘要淆院、時(shí)間戳事件何乎、關(guān)鍵值注釋(tags)、span的ID、以及進(jìn)度ID(通常是IP地址)
    span在不斷的啟動(dòng)和停止支救,同時(shí)記錄了時(shí)間信息抢野,當(dāng)你創(chuàng)建了一個(gè)span,你必須在未來的某個(gè)時(shí)刻停止它各墨。
  2. Trace:一系列spans組成的一個(gè)樹狀結(jié)構(gòu)指孤,例如,如果你正在跑一個(gè)分布式大數(shù)據(jù)工程欲主,你可能需要?jiǎng)?chuàng)建一個(gè)trace邓厕。
  3. Annotation:用來及時(shí)記錄一個(gè)事件的存在,一些核心annotations用來定義一個(gè)請求的開始和結(jié)束
    • cs - Client Sent -客戶端發(fā)起一個(gè)請求扁瓢,這個(gè)annotion描述了這個(gè)span的開始
    • sr - Server Received -服務(wù)端獲得請求并準(zhǔn)備開始處理它详恼,如果將其sr減去cs時(shí)間戳便可得到網(wǎng)絡(luò)延遲
    • ss - Server Sent -注解表明請求處理的完成(當(dāng)請求返回客戶端),如果ss減去sr時(shí)間戳便可得到服務(wù)端需要的處理請求時(shí)間
    • cr - Client Received -表明span的結(jié)束引几,客戶端成功接收到服務(wù)端的回復(fù)昧互,如果cr減去cs時(shí)間戳便可得到客戶端從服務(wù)端獲取回復(fù)的所有所需時(shí)間
      將Span和Trace在一個(gè)系統(tǒng)中使用Zipkin注解的過程圖形化:
zipkin.png

構(gòu)建zipkin服務(wù)端

在spring Cloud為Finchley版本時(shí),如果只需要默認(rèn)的實(shí)現(xiàn)伟桅,則不需要自己構(gòu)建Zipkin Server了敞掘,只需要下載jar即可,下載地址:

https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

這里我下載的是zipkin-server-2.12.2-exec.jar版本的jar包

通過以下命令啟動(dòng)服務(wù)楣铁,默認(rèn)INFO級(jí)別可以不設(shè)置logging

java -jar zipkin-server-2.12.2-exec.jar --logging.level.zipkin2=INFO

服務(wù)啟動(dòng)后默認(rèn)可以通過9411端口訪問zipkin的監(jiān)控頁面

http://127.0.0.1:9411

通過ElasticSearch進(jìn)行存儲(chǔ)

默認(rèn)啟動(dòng)方式會(huì)將日志數(shù)據(jù)存在內(nèi)存中玖雁,一旦服務(wù)重啟會(huì)清空數(shù)據(jù),建議使用es進(jìn)行持久化存儲(chǔ)盖腕。啟動(dòng)示例如下:

STORAGE_TYPE=elasticsearch ES_HOSTS=http://myhost:9200 java -jar zipkin-server-2.12.2-exec.jar

另外還有一些其它可配置參數(shù)

* `ES_HOSTS`: A comma separated list of elasticsearch base urls to connect to ex. http://host:9200.
              Defaults to "http://localhost:9200".
* `ES_PIPELINE`: Only valid when the destination is Elasticsearch 5+. Indicates the ingest
                 pipeline used before spans are indexed. No default.
* `ES_TIMEOUT`: Controls the connect, read and write socket timeouts (in milliseconds) for
                Elasticsearch Api. Defaults to 10000 (10 seconds)
* `ES_MAX_REQUESTS`: Only valid when the transport is http. Sets maximum in-flight requests from
                     this process to any Elasticsearch host. Defaults to 64.
* `ES_INDEX`: The index prefix to use when generating daily index names. Defaults to zipkin.
* `ES_DATE_SEPARATOR`: The date separator to use when generating daily index names. Defaults to '-'.
* `ES_INDEX_SHARDS`: The number of shards to split the index into. Each shard and its replicas
                     are assigned to a machine in the cluster. Increasing the number of shards
                     and machines in the cluster will improve read and write performance. Number
                     of shards cannot be changed for existing indices, but new daily indices
                     will pick up changes to the setting. Defaults to 5.
* `ES_INDEX_REPLICAS`: The number of replica copies of each shard in the index. Each shard and
                       its replicas are assigned to a machine in the cluster. Increasing the
                       number of replicas and machines in the cluster will improve read
                       performance, but not write performance. Number of replicas can be changed
                       for existing indices. Defaults to 1. It is highly discouraged to set this
                       to 0 as it would mean a machine failure results in data loss.
* `ES_USERNAME` and `ES_PASSWORD`: Elasticsearch basic authentication, which defaults to empty string.
                                   Use when X-Pack security (formerly Shield) is in place.
* `ES_HTTP_LOGGING`: When set, controls the volume of HTTP logging of the Elasticsearch Api.
                     Options are BASIC, HEADERS, BODY

注:zipkin會(huì)在es中創(chuàng)建以zipkin開頭日期結(jié)尾的index赫冬,并且默認(rèn)以天為單位分割,使用該存儲(chǔ)模式時(shí)溃列,zipkin中的依賴信息會(huì)無法顯示劲厌,需要通過zipkin-dependencies工具包計(jì)算。

zipkin-dependencies生成依賴鏈

zipkin-dependencies基于spark job來生成全局的調(diào)用鏈听隐,下載地址:https://github.com/openzipkin/zipkin-dependencies

STORAGE_TYPE=elasticsearch ES_HOSTS=127.0.0.1:9200 java -jar zipkin-dependencies-2.0.8.jar &

下載完成后通過上述命令啟動(dòng)zipkin-dependencies补鼻,這里要注意的是程序只會(huì)根據(jù)當(dāng)日的zipkin數(shù)據(jù)實(shí)時(shí)計(jì)算一次依賴關(guān)系,并以索引zipkin:dependency-2019-03-14方式存入es中雅任,然后就退出了风范,因此要做到實(shí)時(shí)更新依賴的話需要自己想辦法實(shí)現(xiàn)周期性執(zhí)行zipkin-dependencies

依賴配置

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

由于已經(jīng)引入了spring-cloud-dependencies沪么,因此可以直接依賴spring-cloud-starter-zipkin

參數(shù)配置

spring:
  zipkin:
    base-url: http://127.0.0.1:9411
  sleuth:
    sampler:
      percentage: 1.0

這里的base-url是zipkin服務(wù)端的地址乌企,percentage是采樣比例,設(shè)置為1.0時(shí)代表全部強(qiáng)求都需要采樣成玫。Sleuth默認(rèn)采樣算法的實(shí)現(xiàn)是Reservoir sampling加酵,具體的實(shí)現(xiàn)類是PercentageBasedSampler拳喻,默認(rèn)的采樣比例為: 0.1(即10%)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猪腕,一起剝皮案震驚了整個(gè)濱河市冗澈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陋葡,老刑警劉巖亚亲,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腐缤,居然都是意外死亡捌归,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門岭粤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惜索,“玉大人,你說我怎么就攤上這事剃浇〗碚祝” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵虎囚,是天一觀的道長角塑。 經(jīng)常有香客問我,道長淘讥,這世上最難降的妖魔是什么圃伶? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蒲列,結(jié)果婚禮上留攒,老公的妹妹穿的比我還像新娘。我一直安慰自己嫉嘀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布魄揉。 她就那樣靜靜地躺著剪侮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洛退。 梳的紋絲不亂的頭發(fā)上瓣俯,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音兵怯,去河邊找鬼彩匕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛媒区,可吹牛的內(nèi)容都是我干的驼仪。 我是一名探鬼主播掸犬,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绪爸!你這毒婦竟也來了湾碎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤奠货,失蹤者是張志新(化名)和其女友劉穎介褥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體递惋,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柔滔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萍虽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睛廊。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贩挣,靈堂內(nèi)的尸體忽然破棺而出喉前,到底是詐尸還是另有隱情,我是刑警寧澤王财,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布卵迂,位于F島的核電站,受9級(jí)特大地震影響绒净,放射性物質(zhì)發(fā)生泄漏见咒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一挂疆、第九天 我趴在偏房一處隱蔽的房頂上張望改览。 院中可真熱鬧,春花似錦缤言、人聲如沸宝当。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庆揩。三九已至,卻和暖如春跌穗,著一層夾襖步出監(jiān)牢的瞬間订晌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工蚌吸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锈拨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓羹唠,卻偏偏與公主長得像奕枢,于是被迫代替她去往敵國和親娄昆。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 原來今年我三姐回家過年验辞,不知道二姐回不回家稿黄,他家離得更近,應(yīng)該是要回去的跌造,四姐仍在廣東過年杆怕,我哥過完年以后,也要回...
    魂歸瀟湘閱讀 135評(píng)論 0 0
  • 今天早上來上班的時(shí)候壳贪,居然看到一輛摩拜陵珍,就在我非常想要找摩拜的時(shí)候,他就出現(xiàn)在我的面前违施,當(dāng)時(shí)他是沒有上鎖的互纯,然后我...
    Richard1015閱讀 310評(píng)論 0 1
  • 前言:這是一篇轉(zhuǎn)載文,確實(shí)寫的不錯(cuò)磕蒲,今天分享給大家留潦,希望大家能集百家之長,學(xué)到更多有用的知識(shí)~ 摘要:這是一篇20...
    強(qiáng)哥科技興閱讀 449評(píng)論 0 0
  • “有幸”生活圈里面遇見幾個(gè)愛折騰的人。 對于我們這種被21世紀(jì)“快餐文化”站削、“碎片化”影響的一代人坊萝,讓我看到超過三...
    小弟桑pc閱讀 3,026評(píng)論 0 0