APM體系概述

APM體系

APM(Application Performance Management

核心思想是什么? 在服務(wù)各節(jié)點(diǎn)彼此調(diào)用的時候撞反,記錄并傳遞一個應(yīng)用級別的標(biāo)記妥色,這個標(biāo)記可以用來關(guān)聯(lián)各個服務(wù)節(jié)點(diǎn)之間的關(guān)系。比如兩個節(jié)點(diǎn)之間使用 HTTP 作為請求協(xié)議的話遏片,那么這些標(biāo)記就會被加入到 HTTP 頭中嘹害。因此如何傳遞這些標(biāo)記是與節(jié)點(diǎn)之間使用的通訊協(xié)議有關(guān)的,有些協(xié)議就很容易加入這樣的內(nèi)容吮便,但有些協(xié)議就相對困難甚至不可能笔呀,因此這一點(diǎn)就直接決定了實(shí)現(xiàn)分布式追蹤系統(tǒng)的難度。

img

監(jiān)控對象

  • 數(shù)據(jù)維度 從數(shù)據(jù)類型劃分髓需,大體可分為:

    • 日志(logs):自動埋點(diǎn)/手動埋點(diǎn)
    • 指標(biāo)監(jiān)控(metrics):服務(wù)许师、端點(diǎn)、實(shí)例的各項(xiàng)指標(biāo)
    • 調(diào)用鏈(tracing): 同一TraceId的調(diào)用序列
  • 功能維度 從業(yè)務(wù)角度劃分,可分為:

    • 基礎(chǔ)監(jiān)控 :應(yīng)用服務(wù)的基本性能枯跑,物理機(jī)/虛擬機(jī)的指標(biāo)
    • 中間件監(jiān)控:kafka Db Redis Zk 等依賴項(xiàng)的性能
    • 業(yè)務(wù)監(jiān)控:根據(jù)業(yè)務(wù)需求定制監(jiān)控內(nèi)容
監(jiān)控象限

功能模塊

所有現(xiàn)有的解決方案惨驶,都需要如下模塊的支持:

? 數(shù)據(jù)采集:如何在廣度效率上進(jìn)行數(shù)據(jù)采集 ——> Agent

? 數(shù)據(jù)加工:數(shù)據(jù)統(tǒng)一格式的整理、調(diào)用鏈集合 ——> Collector

? 數(shù)據(jù)存儲:將計(jì)算出的指標(biāo)和聚合鏈路信息實(shí)時保存起來 ——> Storeage

? 數(shù)據(jù)展示:高顏值敛助、多功能顯示 ——> UI

Skywalking & Pinpoint 生態(tài)下的四大組件

image-20200415155233587

使用人群

image-20200414203658711

現(xiàn)有的方法

目前的實(shí)現(xiàn)方式SkyWalking這種直接使用javaagent技術(shù)修改字節(jié)碼來自動埋點(diǎn)粗卜;也有類似于cat這種直接編碼進(jìn)行手動埋點(diǎn)的,雖然方式不同纳击,但是解決的問題相同续扔。

  • 收集組件的異構(gòu)化。開發(fā)語言可能有java焕数,也可能有golang
  • 組件的多樣化纱昧。從前端埋點(diǎn)開始,nginx堡赔、中間件识脆、db等鏈路都需要包含
  • 調(diào)用鏈的完整性,技術(shù)難點(diǎn)的攻關(guān)善已,如異步灼捂、進(jìn)程間上下文傳遞等
  • 時效采樣。尤其在海量調(diào)用時换团,既要保證準(zhǔn)確性悉稠,也要保證效率

調(diào)用鏈難題 & OpenTracing

相比較普通監(jiān)控和日志,調(diào)用鏈APM等就復(fù)雜的多了艘包。除了有大量的數(shù)據(jù)產(chǎn)生源的猛,也要有相應(yīng)的業(yè)務(wù)組件來支持調(diào)用鏈聚合和展示∠牖ⅲ看似展示的結(jié)果很直接簡答卦尊,但是過程卻很復(fù)雜。器復(fù)雜性主要體現(xiàn)在調(diào)用鏈數(shù)據(jù)的收集上舌厨。

如何統(tǒng)一囊括記錄日志岂却、指標(biāo)和調(diào)用鏈三個維度的數(shù)據(jù)?這是關(guān)鍵挑戰(zhàn)邓线。

—— “Dapper, a Large-Scale Distributed Systems Tracing Infrastructure”

關(guān)于Tracing的數(shù)據(jù)結(jié)構(gòu)淌友,為了解決不同的分布式追蹤系統(tǒng) API 不兼容的問題煌恢,誕生了 OpenTracingopentracing.io/ ) 規(guī)范骇陈。本質(zhì)上說是一套接口定義,主流的調(diào)用鏈服務(wù)端實(shí)現(xiàn)都兼容此規(guī)范瑰抵,OpenTracing大有一統(tǒng)天下的架勢你雌,它在其中融合Tracing、Log、Metrics的概念婿崭。

img
img

目前看標(biāo)準(zhǔn)化是大趨勢(CNCF Jaeger拨拓,SpringCloud,Elastic APM)氓栈,至于國內(nèi)大公司的產(chǎn)品渣磷,也都在主動向其靠攏(阿里的鷹眼、聽云授瘦、OpenApm)醋界。

系統(tǒng)架構(gòu)實(shí)現(xiàn)方案

整體來說,整個APM體系就是將大三類數(shù)據(jù)(logs提完、metrics形纺、trace)應(yīng)用到四大模塊中(收集、加工徒欣、存儲逐样、展示),并在四個難點(diǎn)(程序異構(gòu)打肝,組件多樣脂新,鏈路完整,時效采樣)上不斷優(yōu)化

全開源方案

不同數(shù)據(jù)采取不同采樣數(shù)據(jù)源闯睹,過于笨重戏羽。依賴過多無法維護(hù)

image

https://openapm.io/landscape

根據(jù)自己的技術(shù)棧,DIY APM框架

[Dapper] (https://bigbully.github.io/Dapper-translation/)

  • 通過AGENT生成調(diào)用鏈日志楼吃。

  • 通過logstash采集日志到kafka始花。

  • kafka負(fù)責(zé)提供數(shù)據(jù)給下游消費(fèi)。

  • storm計(jì)算匯聚指標(biāo)結(jié)果并落到es孩锡。

  • storm抽取trace數(shù)據(jù)并落到es酷宵,這是為了提供比較復(fù)雜的查詢。比如通過時間維度查詢調(diào)用鏈躬窜,可以很快查詢出所有符合的traceID浇垦,根據(jù)這些traceID再去 Hbase 查數(shù)據(jù)就快了。

  • logstash將kafka原始數(shù)據(jù)拉取到hbase中荣挨。hbase的rowkey為traceID男韧,根據(jù)traceID查詢是很快的。

pinpoint

在框架中引進(jìn)kafaka:

  1. 可以削峰填谷默垄,防止大數(shù)據(jù)量的沖擊
  2. 實(shí)現(xiàn)數(shù)據(jù)的多同步此虑,擴(kuò)展性也提高

PinPoint

利用HBase來存儲實(shí)時數(shù)據(jù)

pinPoint

鷹眼

16年開始完全放棄HDFS,引入流式計(jì)算 口锭,改有HBASE列存儲朦前。


鷹眼

SkyWalking

在Apache“云原生”生態(tài)中的布局

image.png

部署框架

skywakling

方案對比

方案 skywalking cat pinpoint zipkin
依賴 Java 8+ maven3.0+ nodejs zookeeper/k8s elasticsearch Java 6 7 8介杆、Maven 3+ MySQL 5.6 5.7、Linux 2.6+ hadoop可選 Java 6韭寸,7春哨,8 maven3+ Hbase0.94+ Java 6,7恩伺,8 Maven3.2+ rabbitMQ
實(shí)現(xiàn)方式 java探針赴背,字節(jié)碼增強(qiáng) 代碼埋點(diǎn)(攔截器,注解晶渠,過濾器等) java探針癞尚,字節(jié)碼增強(qiáng) 攔截請求,發(fā)送(HTTP乱陡,mq)數(shù)據(jù)至zipkin服務(wù)
存儲 elasticsearch , H2 mysql , hdfs HBase in-memory 浇揩, mysql , Cassandra 憨颠, Elasticsearch
jvm監(jiān)控 支持 不支持 支持 不支持
trace查詢 支持 支持 需要二次開發(fā) 支持
stars 13k 13.1k 10.2k 12.7k
侵入 低, 也可以手動埋點(diǎn) 高胳徽,需要埋點(diǎn) 高,需要開發(fā)
部署成本 較低爽彤,集群部署需要中間支持 較高
數(shù)據(jù)導(dǎo)出 需要開發(fā)养盗,ES 支持分索引定時導(dǎo)出 不容易,hdfs 太重 HBase 實(shí)時同步較容易 較容易
定制化監(jiān)控 基于端口可以支持适篙,再細(xì)粒度需要二次開發(fā) 支持往核,手動埋點(diǎn)來實(shí)現(xiàn)

SkyWalking

功能展示

SkyWalking是分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)嚷节、云原生架構(gòu)和基于容器(Docker聂儒、K8S、Mesos)架構(gòu)而設(shè)計(jì)

演示地址:

集成方式

  • agent 自動無侵入埋點(diǎn)

    • JVM參數(shù)中添加 -javaagent:/path/to/skywalking-package/agent/skywalking-agent.jar硫痰,并且確保這個參數(shù)在-jar參數(shù)之前衩婚。

    • 注意 需要和agent包一起使用

      java -javaagent:/Users/rongxin.srx/Downloads/apache-skywalking-apm-bin/agent/skywalking-agent.jar \
      -DSW_AGENT_NAME=sw-test-demo-app \
      -Dskywalking.collector.backend_service=<ip>:<port> \
      -Dspring.profiles.active=local,nosso  \
      -jar is-kcloud-1.0-SNAPSHOT.jar 
      
  • 提供SDK 手動埋點(diǎn)

服務(wù)端功能

  • 性能大盤

  • 服務(wù)依賴拓?fù)?/p>

  • 請求調(diào)用追蹤

  • 性能采樣分析

  • 業(yè)務(wù)告警

  • 指標(biāo)對比

需要解決的問題

  • 運(yùn)維依賴復(fù)雜

    • SkyWalking 集群部署依賴 Zk 或者 部署在 k8s

    • 數(shù)據(jù)存儲依賴集群 ES集群

  • 大數(shù)據(jù)量下穩(wěn)定性

    • 缺乏數(shù)據(jù)緩沖池,需要引入MQ

    • 依賴ES的穩(wěn)定性 (ES可能出現(xiàn)性能抖動)

  • 可擴(kuò)展性效斑,ES中的數(shù)據(jù)不易導(dǎo)出 非春,進(jìn)行多備份 (考慮使用多方監(jiān)聽MQ中的數(shù)據(jù),進(jìn)行備份)

  • 二次開發(fā):agent插件開發(fā)比較專業(yè)缓屠,服務(wù)端邏輯復(fù)雜奇昙,需要時間消化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市敌完,隨后出現(xiàn)的幾起案子储耐,更是在濱河造成了極大的恐慌,老刑警劉巖蠢挡,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弧岳,死亡現(xiàn)場離奇詭異,居然都是意外死亡业踏,警方通過查閱死者的電腦和手機(jī)禽炬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勤家,“玉大人腹尖,你說我怎么就攤上這事》ゲ保” “怎么了热幔?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讼庇。 經(jīng)常有香客問我绎巨,道長,這世上最難降的妖魔是什么蠕啄? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任场勤,我火速辦了婚禮,結(jié)果婚禮上歼跟,老公的妹妹穿的比我還像新娘和媳。我一直安慰自己,他們只是感情好哈街,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布留瞳。 她就那樣靜靜地躺著,像睡著了一般骚秦。 火紅的嫁衣襯著肌膚如雪她倘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天作箍,我揣著相機(jī)與錄音帝牡,去河邊找鬼。 笑死蒙揣,一個胖子當(dāng)著我的面吹牛靶溜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懒震,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼罩息,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了个扰?” 一聲冷哼從身側(cè)響起瓷炮,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎递宅,沒想到半個月后娘香,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苍狰,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年烘绽,在試婚紗的時候發(fā)現(xiàn)自己被綠了淋昭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡安接,死狀恐怖翔忽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盏檐,我是刑警寧澤歇式,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站胡野,受9級特大地震影響材失,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硫豆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一豺憔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧够庙,春花似錦恭应、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剔难,卻和暖如春胆屿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偶宫。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工非迹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纯趋。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓憎兽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吵冒。 傳聞我的和親對象是個殘疾皇子纯命,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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

  • 個人專題目錄 實(shí)現(xiàn)全鏈路監(jiān)控 SkyWalking https://github.com/apache/skywa...
    Java及SpringBoot閱讀 5,328評論 1 11
  • 說明:本次對比基于skywalking-6.0.0-GA和Pinpoint-1.8.2(截止2019-02-19最...
    阿飛的博客閱讀 15,147評論 0 31
  • TestFlight是蘋果允許用戶在app上架前做一個上架前的beta版測試的一個機(jī)制。 那么TestFlight...
    Rijkaa閱讀 3,584評論 0 1
  • 我們的小家 已經(jīng)走過了12個春秋痹栖,回憶以前的點(diǎn)點(diǎn)滴滴亿汞,有悲傷也有高興的。這些年里揪阿,最讓我高興的是有了你們疗我。 ...
    然然_8f89閱讀 220評論 0 2
  • 時光飛逝咆畏, 不知不覺已到了而立之年。 人們都說吴裤, 青春是人生最美好的時光旧找, 但對于我來說, 痛苦和掙扎是青春的主旋...
    海王星1984閱讀 789評論 0 2