數(shù)據(jù)采集哮内,分析及調(diào)用鏈追蹤

要解決的問題

對(duì)應(yīng)用進(jìn)行運(yùn)行時(shí)數(shù)據(jù)收集,提供追蹤和報(bào)告壮韭。

  • 數(shù)據(jù)采集(埋點(diǎn)或者自動(dòng)獲缺狈ⅰ)纹因,存儲(chǔ)和分析
  • 生成調(diào)用鏈 并能在UI展示
  • 自動(dòng)分析并發(fā)現(xiàn)報(bào)告問題,例如:性能
  • 和測(cè)試運(yùn)維工具集成(鲫竞?辐怕??)

相應(yīng)的組件有:

  • model:采集模型
  • agent/collector:agent提供埋點(diǎn)从绘,采集和發(fā)送
  • aggregator/storage:聚合寄疏,加工和存儲(chǔ)數(shù)據(jù)
  • analyzer:分析數(shù)據(jù)
  • UI:展示調(diào)用鏈,dashboard和問題報(bào)告僵井,告警設(shè)置和觸發(fā)

考察如下的一些開源方案:

  • Zipkin
  • Pinpoint
  • CAT

Zipkin

項(xiàng)目地址:https://github.com/openzipkin/zipkin
架構(gòu):http://zipkin.io/pages/architecture.html

以下是數(shù)據(jù)流圖


Zipkin architecture

提供REST API支持陕截,可以查詢和推送數(shù)據(jù):http://zipkin.io/zipkin-api

快速開始:下載源碼后在根目錄運(yùn)行

./mvnw -DskipTests --also-make -pl zipkin-server clean install

編譯UI模塊可能遇到node-saas找不到的信息,解決辦法:

  • 把node_modules目錄刪除重新運(yùn)行node install
  • 運(yùn)行npm rebuild node-sass
  • 升級(jí)node和npm批什,可能編譯好的node-sass和你本地的node版本不一致()农曲,會(huì)報(bào)錯(cuò):Error: Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (51),建議用nvm管理node安裝版本驻债。

啟動(dòng)通過運(yùn)行: java -jar ./zipkin-server/target/zipkin-server-*-exec.jar乳规,然后訪問: http://localhost:9411 (REST API: http://localhost:9411/api/v1/spans ...)

數(shù)據(jù)格式:

- traceId
- name
- id
- parentId
- timestamp
- duration
- annotations: [
  endpoint: {
   ...
 }
]
- binaryAnnotations: [
  {
     - key
     - value
     - endpoint: {
      ... 
    }
 }
]

數(shù)據(jù)樣例:

[
    {
      "traceId": "bd7a977555f6b982",
      "name": "get",
      "id": "bd7a977555f6b982",
      "timestamp": 1458702548467000,
      "duration": 386000,
      "annotations": [
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548467000,
          "value": "sr"
        },
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548853000,
          "value": "ss"
        }
      ],
      "binaryAnnotations": []
    },
    {
      "traceId": "bd7a977555f6b982",
      "name": "get-traces",
      "id": "ebf33e1a81dc6f71",
      "parentId": "bd7a977555f6b982",
      "timestamp": 1458702548478000,
      "duration": 354374,
      "annotations": [],
      "binaryAnnotations": [
        {
          "key": "lc",
          "value": "JDBCSpanStore",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        },
        {
          "key": "request",
          "value": "QueryRequest{serviceName=zipkin-query, spanName=null, annotations=[], binaryAnnotations={}, minDuration=null, maxDuration=null, endTs=1458702548478, lookback=86400000, limit=1}",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        }
      ]
    },
    {
      "traceId": "bd7a977555f6b982",
      "name": "query",
      "id": "be2d01e33cc78d97",
      "parentId": "ebf33e1a81dc6f71",
      "timestamp": 1458702548786000,
      "duration": 13000,
      "annotations": [
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548786000,
          "value": "cs"
        },
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548799000,
          "value": "cr"
        }
      ],
      "binaryAnnotations": [
        {
          "key": "jdbc.query",
          "value": "select distinct `zipkin_spans`.`trace_id` from `zipkin_spans` join `zipkin_annotations` on (`zipkin_spans`.`trace_id` = `zipkin_annotations`.`trace_id` and `zipkin_spans`.`id` = `zipkin_annotations`.`span_id`) where (`zipkin_annotations`.`endpoint_service_name` = ? and `zipkin_spans`.`start_ts` between ? and ?) order by `zipkin_spans`.`start_ts` desc limit ?",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        },
        {
          "key": "sa",
          "value": true,
          "endpoint": {
            "serviceName": "spanstore-jdbc",
            "ipv4": "127.0.0.1",
            "port": 3306
          }
        }
      ]
    },
    {
      "traceId": "bd7a977555f6b982",
      "name": "query",
      "id": "13038c5fee5a2f2e",
      "parentId": "ebf33e1a81dc6f71",
      "timestamp": 1458702548817000,
      "duration": 1000,
      "annotations": [
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548817000,
          "value": "cs"
        },
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548818000,
          "value": "cr"
        }
      ],
      "binaryAnnotations": [
        {
          "key": "jdbc.query",
          "value": "select `zipkin_spans`.`trace_id`, `zipkin_spans`.`id`, `zipkin_spans`.`name`, `zipkin_spans`.`parent_id`, `zipkin_spans`.`debug`, `zipkin_spans`.`start_ts`, `zipkin_spans`.`duration` from `zipkin_spans` where `zipkin_spans`.`trace_id` in (?)",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        },
        {
          "key": "sa",
          "value": true,
          "endpoint": {
            "serviceName": "spanstore-jdbc",
            "ipv4": "127.0.0.1",
            "port": 3306
          }
        }
      ]
    },
    {
      "traceId": "bd7a977555f6b982",
      "name": "query",
      "id": "37ee55f3d3a94336",
      "parentId": "ebf33e1a81dc6f71",
      "timestamp": 1458702548827000,
      "duration": 2000,
      "annotations": [
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548827000,
          "value": "cs"
        },
        {
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          },
          "timestamp": 1458702548829000,
          "value": "cr"
        }
      ],
      "binaryAnnotations": [
        {
          "key": "jdbc.query",
          "value": "select `zipkin_annotations`.`trace_id`, `zipkin_annotations`.`span_id`, `zipkin_annotations`.`a_key`, `zipkin_annotations`.`a_value`, `zipkin_annotations`.`a_type`, `zipkin_annotations`.`a_timestamp`, `zipkin_annotations`.`endpoint_ipv4`, `zipkin_annotations`.`endpoint_port`, `zipkin_annotations`.`endpoint_service_name` from `zipkin_annotations` where `zipkin_annotations`.`trace_id` in (?) order by `zipkin_annotations`.`a_timestamp` asc, `zipkin_annotations`.`a_key` asc",
          "endpoint": {
            "serviceName": "zipkin-query",
            "ipv4": "192.168.1.2",
            "port": 9411
          }
        },
        {
          "key": "sa",
          "value": true,
          "endpoint": {
            "serviceName": "spanstore-jdbc",
            "ipv4": "127.0.0.1",
            "port": 3306
          }
        }
      ]
    }
  ]  

在UI上的展示:


Pinpoint

https://github.com/naver/pinpoint
https://github.com/naver/pinpoint/wiki/Technical-Overview-Of-Pinpoint
https://sconts.com/11

  • 對(duì)代碼無侵入,分析request/response
  • 插件式
  • 支持的代碼文件有限

美團(tuán)CAT

http://tech.meituan.com/CAT_in_Depth_Java_Application_Monitoring.html
http://unidal.org/cat/r/home?op=view&docName=develop
https://github.com/dianping/cat

  • 埋點(diǎn)收集
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末合呐,一起剝皮案震驚了整個(gè)濱河市暮的,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淌实,老刑警劉巖冻辩,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拆祈,居然都是意外死亡恨闪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門放坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咙咽,“玉大人,你說我怎么就攤上這事淤年【ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵互亮,是天一觀的道長犁享。 經(jīng)常有香客問我,道長豹休,這世上最難降的妖魔是什么炊昆? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上凤巨,老公的妹妹穿的比我還像新娘视乐。我一直安慰自己,他們只是感情好敢茁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布佑淀。 她就那樣靜靜地躺著,像睡著了一般彰檬。 火紅的嫁衣襯著肌膚如雪伸刃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天逢倍,我揣著相機(jī)與錄音捧颅,去河邊找鬼。 笑死较雕,一個(gè)胖子當(dāng)著我的面吹牛碉哑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亮蒋,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扣典,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了慎玖?” 一聲冷哼從身側(cè)響起贮尖,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凄吏,沒想到半個(gè)月后远舅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闰蛔,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痕钢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了序六。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片任连。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖例诀,靈堂內(nèi)的尸體忽然破棺而出随抠,到底是詐尸還是另有隱情,我是刑警寧澤繁涂,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布拱她,位于F島的核電站,受9級(jí)特大地震影響扔罪,放射性物質(zhì)發(fā)生泄漏秉沼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唬复。 院中可真熱鬧矗积,春花似錦、人聲如沸敞咧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休建。三九已至乍恐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間测砂,已是汗流浹背禁熏。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邑彪,地道東北人瞧毙。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像寄症,于是被迫代替她去往敵國和親宙彪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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