摘要:請谷歌一波,會有遍地的解釋。網(wǎng)絡(luò)抓包實現(xiàn)使用實現(xiàn)網(wǎng)絡(luò)抓包非常容易。得益于谷歌的包這里我舉一個監(jiān)聽網(wǎng)卡的主要代碼網(wǎng)卡名這段代碼就是監(jiān)聽某個網(wǎng)卡,通過規(guī)則過濾點無用網(wǎng)絡(luò)包,規(guī)則語法與一樣。網(wǎng)絡(luò)抓包監(jiān)控的優(yōu)缺點優(yōu)點應(yīng)用無關(guān)性,監(jiān)控工具通用性強。
微服務(wù)是什么?
此話題不是本文重點,如你還不知道。請谷歌一波,會有遍地的解釋。引用下圖說明下微服務(wù)可能呈現(xiàn)的形態(tài):
監(jiān)控的目的是為了讓集群中所有的服務(wù)組件,不管是HTTP服務(wù),數(shù)據(jù)庫服務(wù),還是中間件服務(wù)。都能夠健康穩(wěn)定得運行,能發(fā)現(xiàn)問題,遇到問題能找到原因。
在過去,監(jiān)控工具側(cè)重于基礎(chǔ)設(shè)施或單一軟件組件以及衡量運營健康。這些工具在實現(xiàn)這一目標(biāo)方面只取得了一定的成功,但是對于單一的,傳統(tǒng)的應(yīng)用程序和基礎(chǔ)設(shè)施來說效果不錯。微服務(wù)的出現(xiàn)暴露了工具中的弱點。
現(xiàn)在,組件托管在位于私有云,公共云或兩者的混合體之間的虛擬化機器或容器內(nèi)。獲悉我并不需要關(guān)心服務(wù)cpu用了多少,內(nèi)存用了多少?確保這些服務(wù)相互通信以提供所需的結(jié)果需要從監(jiān)控的角度重要看幾件事情:
微服務(wù)集群中是否所有的服務(wù)的吞吐率,響應(yīng)時間都正常?
服務(wù)調(diào)用線中哪些線負(fù)載過大,哪些線負(fù)載過小?
服務(wù)的錯誤率,例如HTTP 500錯誤。
我們想要監(jiān)控分析應(yīng)用,從它的服務(wù)狀態(tài)出發(fā)是否更直接呢?
已有監(jiān)控方案目前有些廠商提出了微服務(wù)的監(jiān)控解決方案。
從APM角度監(jiān)控服務(wù)端到端狀態(tài)。
為每種類型服務(wù)開發(fā)agent收集應(yīng)用狀態(tài)信息。
通過產(chǎn)生統(tǒng)一的應(yīng)用日志分析監(jiān)控方案
其他方案
每一種商業(yè)或開源方案都有它的優(yōu)勢所在??梢愿鶕?jù)你的需求來進行選擇。例如你的所有服務(wù)都是自己研發(fā),日志標(biāo)準(zhǔn)一致or能夠統(tǒng)一處理。所有訪問信息都能打出日志,那么我認(rèn)為日志分析可能是你最適合的方案。但是對于公有云平臺,那就不同了。
好雨云幫采用的方案好雨云幫提供了公有云和私有化的部署方式,平臺內(nèi)部署的服務(wù)各式各樣。各種通信協(xié)議,各種日志標(biāo)準(zhǔn)。我們怎么實現(xiàn)對所有服務(wù)的應(yīng)用狀態(tài)監(jiān)控?好雨云幫完善的租戶網(wǎng)絡(luò),環(huán)境隔離,因此我們提供用戶在自己環(huán)境下安裝自己的監(jiān)控組件,我們的基礎(chǔ)數(shù)據(jù)收集是通過網(wǎng)絡(luò)分析。下文詳細(xì)講解:
kubernetes POD共享機制kubernetes中pod內(nèi)容器共享網(wǎng)絡(luò)空間,掛在卷等為我們監(jiān)控pod內(nèi)主服務(wù)容器提供方便。其實按照官方對pod的定義的使用面來說:
* content management systems, file and data loaders, local cache managers, etc. * log and checkpoint backup, compression, rotation, snapshotting, etc. * data change watchers, log tailers, logging and monitoring adapters, event publishers, etc. * proxies, bridges, and adapters * controllers, managers, configurators, and updaters
pod內(nèi)除了主服務(wù)外我們可以部署一些附屬服務(wù)。之前的文章我談過使用pod的插件服務(wù)收集處理日志。今天我再談使用pod的網(wǎng)絡(luò)便利監(jiān)控主服務(wù)應(yīng)用級指標(biāo)。
通過共享的網(wǎng)卡抓包分析網(wǎng)絡(luò)流量反應(yīng)應(yīng)用狀況我們拿一個http服務(wù)為例,我們監(jiān)控網(wǎng)絡(luò)流量能拿到幾乎所有訪問和服務(wù)返回信息。例如1分鐘內(nèi)多少request,分別請求哪些path,多長時間服務(wù)返回了。返回狀態(tài)碼等等信息。
要獲得以上的數(shù)據(jù),我們需要獲取到網(wǎng)絡(luò)包,解碼網(wǎng)絡(luò)包然后獲得http協(xié)議數(shù)據(jù)。
我們WatchData服務(wù)容器與應(yīng)用容器在同pod中,經(jīng)過應(yīng)用容器eth0網(wǎng)卡的流量我們再WatchData容器中eth0網(wǎng)卡獲取。通過解碼網(wǎng)絡(luò)包獲取http報文頭關(guān)鍵信息,每一個Response形成一個消息發(fā)送到server端完成分析,存儲然后形成連續(xù)的實時的監(jiān)控數(shù)據(jù)。下圖展現(xiàn)個簡要的整體架構(gòu)圖:
當(dāng)然,上文已經(jīng)說了,我們采取此方案主要就是為了能夠監(jiān)控各種應(yīng)用,只是http怎么行。不通的通信應(yīng)用使用不同的通信協(xié)議,比如mysql的協(xié)議,mongodb的協(xié)議。TCP/IP網(wǎng)絡(luò)協(xié)議棧分為應(yīng)用層(Application)、傳輸層(Transport)、網(wǎng)絡(luò)層(Network)和鏈路層(Link)四層。。我們抓取到的網(wǎng)絡(luò)包信息也是四層模型。
網(wǎng)絡(luò)抓包Golang實現(xiàn)使用golang實現(xiàn)網(wǎng)絡(luò)抓包非常容易。得益于谷歌的包:
github.com/google/gopacket github.com/google/gopacket/layers github.com/google/gopacket/pcap
這里我舉一個監(jiān)聽網(wǎng)卡的Demo主要代碼
//device 網(wǎng)卡名 if handle, err := pcap.OpenLive(device, int32(n.Option.Snaplen), true, n.Option.TimeOut); err != nil { log.With("error", err.Error()).Errorln("PCAP OpenLive Error.") return 1 } else if err := handle.SetBPFFilter(n.Option.Expr); err != nil { // optional log.With("error", err.Error()).Errorln("PCAP SetBPFFilter Error.", n.Option.Expr) return 1 } else { log.Infoln("Start listen the device ", device) packetSource := gopacket.NewPacketSource(handle, handle.LinkType()) go func(close chan struct{}, h *pcap.Handle) { for { select { case packet := <-packetSource.Packets(): n.handlePacket(packet) // Do something with a packet here. case <-close: log.Infoln("stop listen the device.") h.Close() return } } }(n.Option.Close, handle) }
這段代碼就是監(jiān)聽某個網(wǎng)卡,通過n.Option.Expr規(guī)則過濾點無用網(wǎng)絡(luò)包,規(guī)則語法與linux tcpdump一樣。參考:PCAP-FILTER
接收到網(wǎng)絡(luò)包一般有多種類型:2層模型的包,和4層模型的包。如果你不關(guān)注tcp握手這種類型的包你只需要關(guān)注具有四層模型的網(wǎng)絡(luò)包。
n.handlePacket(packet)處理網(wǎng)絡(luò)包。
app := packet.ApplicationLayer() if app != nil { //log.With("type", app.LayerType().String()).Infoln("Receive a application layer packet") //log.Infoln(packet.String()) go func() { sd := &SourceData{ Source: app.Payload(), ReceiveDate: packet.Metadata().Timestamp, } tran := packet.TransportLayer() if tran != nil { src, dst := tran.TransportFlow().Endpoints() sd.SourcePoint = &src sd.TargetPoint = &dst if tran.LayerType().Contains(layers.LayerTypeTCP) { tcp := &layers.TCP{} err := tcp.DecodeFromBytes(tran.LayerContents(), gopacket.NilDecodeFeedback) if err != nil { log.With("error", err.Error()).Errorln("Decode bytes to TCP error") } else { sd.TCP = tcp } } } netL := packet.NetworkLayer() if netL != nil { src, dst := packet.NetworkLayer().NetworkFlow().Endpoints() sd.SourceHost = &src sd.TargetHost = &dst } decode := FindDecode(n.Option.Protocol) if decode != nil { decode.Decode(sd) } else { log.Debugf("%s protol can not be supported ", n.Option.Protocol) }
如上代碼簡單處理四層模型網(wǎng)絡(luò)包。一般你可以從網(wǎng)絡(luò)層獲取雙方ip地址,從傳輸層獲取雙方端口以及tcp包的相關(guān)信息。從應(yīng)用層獲取應(yīng)用數(shù)據(jù)。
具體的怎么優(yōu)化和實踐就留給大家自己嘗試吧。
優(yōu)點:
應(yīng)用無關(guān)性,監(jiān)控工具通用性強。
數(shù)據(jù)全面性,你可以獲取很多直接和間接反應(yīng)應(yīng)用狀態(tài)的數(shù)據(jù)。
不侵入代碼,一般不影響網(wǎng)絡(luò)。
高并發(fā)下不影響應(yīng)用。
缺點:
資源消耗,抓包分析包是一個物理資源消耗的過程。
需要自己開發(fā)。
總之,就像上文說得一樣。如果你的需求只是想監(jiān)控一個應(yīng)用。你就別考慮這個方案了。如果你想監(jiān)控集群中所有應(yīng)用,你可以嘗試。
云盟認(rèn)證成員:barnett
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/32524.html
摘要:大家好今天我分享的主題與游戲行業(yè)相關(guān),為大家介紹的是在騰訊游戲中的應(yīng)用實踐。隨著技術(shù)的興起,我們開始調(diào)研在游戲容器化方面的應(yīng)用。也就是說,將不同游戲業(yè)務(wù)部署到同一臺母機,采用綁定核的方式。在母機上架部署時,創(chuàng)建設(shè)備和設(shè)備并將它們進行關(guān)聯(lián)。 今天小數(shù)的推送內(nèi)容來自騰訊互娛高級工程師黃惠波,讓我們一起來看看吧~~~ 黃惠波,騰訊互娛高級工程師目前主要負(fù)責(zé)游戲計算資源容器化平臺的研發(fā)工作,包...
摘要:容器云將支持應(yīng)用的一鍵式部署交付,提供負(fù)載均衡,私有域名綁定,性能監(jiān)控等應(yīng)用生命周期管理服務(wù)。本容器云平臺,對接持續(xù)集成發(fā)布系統(tǒng)。 前言 在移動互聯(lián)網(wǎng)時代,新的技術(shù)需要新技術(shù)支持環(huán)境、新的軟件交付流程和IT架構(gòu),從而實現(xiàn)架構(gòu)平臺化,交付持續(xù)化,業(yè)務(wù)服務(wù)化。容器將成為新一代應(yīng)用的標(biāo)準(zhǔn)交付件,容器云將幫助企業(yè)用戶構(gòu)建研發(fā)流程和云平臺基礎(chǔ)設(shè)施。縮短應(yīng)用向云端交付的周期,降低運營門檻。加速向互...
摘要:容器云將支持應(yīng)用的一鍵式部署交付,提供負(fù)載均衡,私有域名綁定,性能監(jiān)控等應(yīng)用生命周期管理服務(wù)。本容器云平臺,對接持續(xù)集成發(fā)布系統(tǒng)。 前言 在移動互聯(lián)網(wǎng)時代,新的技術(shù)需要新技術(shù)支持環(huán)境、新的軟件交付流程和IT架構(gòu),從而實現(xiàn)架構(gòu)平臺化,交付持續(xù)化,業(yè)務(wù)服務(wù)化。容器將成為新一代應(yīng)用的標(biāo)準(zhǔn)交付件,容器云將幫助企業(yè)用戶構(gòu)建研發(fā)流程和云平臺基礎(chǔ)設(shè)施??s短應(yīng)用向云端交付的周期,降低運營門檻。加速向互...
摘要:阿里云容器服務(wù)已經(jīng)發(fā)布了基于容器集群的開源區(qū)塊鏈解決方案,利用容器技術(shù)可以在分鐘之內(nèi)部署完成一個生產(chǎn)級別安全高可用的區(qū)塊鏈應(yīng)用運行環(huán)境,幫助企業(yè)可以加速業(yè)務(wù)創(chuàng)新。對節(jié)點,阿里云服務(wù)會自動開啟相應(yīng)調(diào)度能力。 摘要: 阿里云ECS彈性裸金屬服務(wù)器(神龍)已經(jīng)與其容器服務(wù)全面兼容,用戶可以選擇在彈性裸金屬服務(wù)器上直接運行容器、管控Kubernetes/Docker容器集群,如此將會獲得非常出...
摘要:本文中,我們將描述系統(tǒng)的架構(gòu)開發(fā)演進過程,以及背后的驅(qū)動原因。應(yīng)用管理層提供基本的部署和路由,包括自愈能力彈性擴容服務(wù)發(fā)現(xiàn)負(fù)載均衡和流量路由。 帶你了解Kubernetes架構(gòu)的設(shè)計意圖、Kubernetes系統(tǒng)的架構(gòu)開發(fā)演進過程,以及背后的驅(qū)動原因。 showImg(https://segmentfault.com/img/remote/1460000016446636?w=1280...
閱讀 4015·2023-04-26 02:13
閱讀 2260·2021-11-08 13:13
閱讀 2748·2021-10-11 10:59
閱讀 1745·2021-09-03 00:23
閱讀 1314·2019-08-30 15:53
閱讀 2293·2019-08-28 18:22
閱讀 3061·2019-08-26 10:45
閱讀 744·2019-08-23 17:58