成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

百度工程師淺談分布式日志

開發(fā) 架構(gòu)
在萬(wàn)物上云的時(shí)代,通過搭建合適的日志運(yùn)維平臺(tái)來(lái)賦予數(shù)據(jù)搜索、分析和監(jiān)控預(yù)警的能力,讓沉寂在服務(wù)器的日志"動(dòng)"起來(lái),可以幫助我們?cè)跀?shù)據(jù)分析,問題診斷,系統(tǒng)改進(jìn)的工作中更加順利的進(jìn)行,希望本文的內(nèi)容對(duì)大家的實(shí)踐有所幫助。

1、什么是日志

日志是一種按照時(shí)間順序存儲(chǔ)記錄的數(shù)據(jù),它記錄了什么時(shí)間發(fā)生了什么事情,提供精確的系統(tǒng)記錄,根據(jù)日志信息可以定位到錯(cuò)誤詳情和根源。按照APM概念的定義,日志的特點(diǎn)是描述一些離散的(不連續(xù)的)事件。

日志是按照錯(cuò)誤級(jí)別分級(jí)的,常見的錯(cuò)誤級(jí)別有 FATAL / WARNING / NOTICE / DEBUG / TRACE 5種類型。通常我們會(huì)在項(xiàng)目里面定義一個(gè)日志打印級(jí)別,高于這個(gè)級(jí)別的錯(cuò)誤日志會(huì)數(shù)據(jù)落盤。

圖片

2、什么時(shí)候記錄日志

在大型網(wǎng)站系統(tǒng)架構(gòu)里面,日志是其中的重要功能組成部分。它可以記錄下系統(tǒng)所產(chǎn)生的所有行為,并按照某種規(guī)范表達(dá)出來(lái)。我們可以使用日志系統(tǒng)所記錄的信息為系統(tǒng)進(jìn)行排錯(cuò),優(yōu)化性能。通過統(tǒng)計(jì)用戶行為日志,幫助產(chǎn)品運(yùn)營(yíng)同學(xué)做業(yè)務(wù)決策。在安全領(lǐng)域,日志可以反應(yīng)出很多的安全攻擊行為,比如登錄錯(cuò)誤,異常訪問等。日志能告訴你很多關(guān)于網(wǎng)絡(luò)中所發(fā)生事件的信息,包括性能信息、故障檢測(cè)和入侵檢測(cè)。還可以為審計(jì)進(jìn)行審計(jì)跟蹤,日志的價(jià)值是顯而易見的。

3、日志的價(jià)值

在大型網(wǎng)站系統(tǒng)架構(gòu)里面,日志是其中的重要功能組成部分。它可以記錄下系統(tǒng)所產(chǎn)生的所有行為,并按照某種規(guī)范表達(dá)出來(lái)。我們可以使用日志系統(tǒng)所記錄的信息為系統(tǒng)進(jìn)行排錯(cuò),優(yōu)化性能。通過統(tǒng)計(jì)用戶行為日志,幫助產(chǎn)品運(yùn)營(yíng)同學(xué)做業(yè)務(wù)決策。在安全領(lǐng)域,日志可以反應(yīng)出很多的安全攻擊行為,比如登錄錯(cuò)誤,異常訪問等。日志能告訴你很多關(guān)于網(wǎng)絡(luò)中所發(fā)生事件的信息,包括性能信息、故障檢測(cè)和入侵檢測(cè)。還可以為審計(jì)進(jìn)行審計(jì)跟蹤,日志的價(jià)值是顯而易見的。

4、分布式架構(gòu)的日志運(yùn)維

4.1 為什么要有運(yùn)維工具

微服務(wù)發(fā)展迅猛的今天,松耦合的設(shè)計(jì)層出不窮,為簡(jiǎn)化服務(wù)服務(wù)帶來(lái)了極大的便利。業(yè)務(wù)方向分工明確,研發(fā)同學(xué)只需要關(guān)心自己模塊的版本迭代上線就好。隨著整個(gè)業(yè)務(wù)架構(gòu)的擴(kuò)大,服務(wù)實(shí)例的數(shù)量迎來(lái)了爆炸性的增長(zhǎng),往往帶來(lái)以下問題:

  • 由不同團(tuán)隊(duì)開發(fā),使用不同的編程語(yǔ)言,日志格式不規(guī)范統(tǒng)一;
  • 微服務(wù)迭代速度快,日志漏記、級(jí)別使用錯(cuò)誤、難以提取有效信息;
  • 容器實(shí)例分布在成千上萬(wàn)臺(tái)服務(wù)器上,橫跨多個(gè)數(shù)據(jù)中心,異構(gòu)部署,難以串聯(lián)請(qǐng)求鏈路。

沒有工具的情況下,需要登錄服務(wù)實(shí)例,查看原始日志,在日志文件中通過grep、awk方式獲得自己想要的信息。但在規(guī)模較大的場(chǎng)景中,此方法效率低下,面臨問題包括日志量太大不易歸檔、文本搜索太慢、不方便多維度查詢。這時(shí)候需要更加高效的運(yùn)維工具來(lái)代替人工訪問日志。常見解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點(diǎn)上的日志統(tǒng)一收集,管理,訪問。

4.2 運(yùn)維工具建設(shè)

我們希望通過原始日志可以理解系統(tǒng)行為,這需要建設(shè)具備性能分析,問題定位的能力的工具平臺(tái)。它能夠支持:

  • 在故障發(fā)生前,分析風(fēng)險(xiǎn)和系統(tǒng)瓶頸;
  • 在故障發(fā)生時(shí),及時(shí)通知,快速定位解決問題;
  • 在故障發(fā)生后,有歷史數(shù)據(jù)迅速?gòu)?fù)盤。

通過建設(shè)具備日志即時(shí)收集、分析、存儲(chǔ)等能力的工具平臺(tái)。用戶可以快速高效地進(jìn)行問題診斷、系統(tǒng)運(yùn)維、流量穩(wěn)定性監(jiān)控、業(yè)務(wù)數(shù)據(jù)分析等操作。比如搭建鏈路追蹤系統(tǒng),能追蹤并記錄請(qǐng)求在系統(tǒng)中的調(diào)用順序,調(diào)用時(shí)間等一系列關(guān)鍵信息,從而幫助我們定位異常服務(wù)和發(fā)現(xiàn)性能瓶頸,提升了系統(tǒng)的『可觀測(cè)性』。前面提到日志在APM標(biāo)準(zhǔn)的定義下日志的特點(diǎn)是描述一些離散的(不連續(xù)的)事件。這里說(shuō)下APM是什么,方便更好的構(gòu)建監(jiān)控方面的知識(shí)體系。

5、APM和可觀測(cè)性

APM 是Application Performance Managment的縮寫,即:“應(yīng)用性能管理”。可以把它理解成一種對(duì)分布式架構(gòu)進(jìn)行觀測(cè)分析優(yōu)化的理念和方法論。監(jiān)控系統(tǒng)(包括告警)作為SLA體系的一個(gè)重要組成部分,不僅在業(yè)務(wù)和系統(tǒng)中充當(dāng)保鏢發(fā)現(xiàn)問題、排查問題的作用。

隨著系統(tǒng)不斷演進(jìn)完善,我們可以獲得越多幫助于了解業(yè)務(wù)和系統(tǒng)的數(shù)據(jù)和信息,這些信息可以更進(jìn)一步的幫助我們進(jìn)行系統(tǒng)上的優(yōu)化,由于可以梳理請(qǐng)求鏈路得出用戶的瀏覽偏好,甚至可以影響業(yè)務(wù)上的關(guān)鍵決策。

整體來(lái)說(shuō),整個(gè)APM體系就是將大三類數(shù)據(jù)(logs、metrics、trace)應(yīng)用到四大模塊中(收集、加工、存儲(chǔ)、展示),并在四個(gè)難點(diǎn)(程序異構(gòu),組件多樣,鏈路完整,時(shí)效采樣)上不斷優(yōu)化。

可觀測(cè)性 是APM的一大特征,主要由以下三大支柱構(gòu)成,分別是Logging(日志),Metrics(指標(biāo)),以及Tracing(應(yīng)用跟蹤)。

  • Logging:自動(dòng)埋點(diǎn)/手動(dòng)埋點(diǎn),展現(xiàn)的是應(yīng)用運(yùn)行而產(chǎn)生的事件或者程序在執(zhí)行的過程中間產(chǎn)生的一些日志,可以詳細(xì)解釋系統(tǒng)的運(yùn)行狀態(tài),但是存儲(chǔ)和查詢需要消耗大量的資源。
  • Metrics:服務(wù)、端點(diǎn)、實(shí)例的各項(xiàng)指標(biāo),是一種聚合數(shù)值,存儲(chǔ)空間很小,可以觀察系統(tǒng)的狀態(tài)和趨勢(shì),對(duì)于問題定位缺乏細(xì)節(jié)展示,最節(jié)省存儲(chǔ)資源。
  • Tracing:同一TraceId的調(diào)用序列,面向的是請(qǐng)求,可以輕松分析出請(qǐng)求中異常點(diǎn),資源可能消耗較大,不過依據(jù)具體功能實(shí)現(xiàn)相對(duì)可控。

圖片

5.1 Metrics和Prometheus

Metrics:指標(biāo)。

I think that the defining characteristic of metrics is that they are aggregatable: they are the atoms that compose into a single logical gauge, counter, or histogram over a span of time.

大致上可理解為一些可進(jìn)行聚合計(jì)算的原子型數(shù)據(jù)。舉些例子:cpu占用情況、系統(tǒng)內(nèi)存占用、接口響應(yīng)時(shí)間、接口響應(yīng)QPS、服務(wù)gc次數(shù)、訂單量等。這些都是根據(jù)時(shí)間序列存儲(chǔ)的數(shù)據(jù)值,可以在一段時(shí)間內(nèi)進(jìn)行一些求和、求平均、百分位等聚合計(jì)算。指標(biāo)在監(jiān)控系統(tǒng)中不可或缺,我們都需要收集每種指標(biāo)在時(shí)間線上的變化,并作同比、環(huán)比上的分析。metrics的存儲(chǔ)形式為有時(shí)間戳標(biāo)記的數(shù)據(jù)流,通常存儲(chǔ)在TSDB(時(shí)間序列數(shù)據(jù)庫(kù))中。

Metrics側(cè)重于各種報(bào)表數(shù)據(jù)的收集和展示,常用在大規(guī)模業(yè)務(wù)的可用性建設(shè)、性能優(yōu)化、容量管理等場(chǎng)景,通過可視化儀表盤可高效地進(jìn)行日常系統(tǒng)巡檢、快速查看應(yīng)用健康狀況,可以精準(zhǔn)感知可用性和性能問題,為產(chǎn)品的穩(wěn)定運(yùn)行保駕護(hù)航。

Prometheus 是一個(gè)開源的監(jiān)控解決方案,它能夠提供監(jiān)控指標(biāo)數(shù)據(jù)的采集、存儲(chǔ)、查詢以及監(jiān)控告警等功能。作為云原生基金會(huì)(CNCF)的畢業(yè)項(xiàng)目,Prometheus 已經(jīng)在云原生領(lǐng)域得到了大范圍的應(yīng)用,并逐漸成為了業(yè)界最流行的監(jiān)控解決方案之一。

下圖為Prometheus的工作流程,可以簡(jiǎn)單理解為:Prometheus server定期拉取目標(biāo)實(shí)例的采集數(shù)據(jù),時(shí)間序列存儲(chǔ),一方面通過配置報(bào)警規(guī)則,把觸發(fā)的報(bào)警發(fā)送給接收方,一方面通過組件Grafana把數(shù)據(jù)以圖形化形式展示給用戶。

圖片

5.2 Logging和ELK

Logging:日志。

I think that the defining characteristic of logging is that it deals with discrete events.

日志是系統(tǒng)運(yùn)行時(shí)發(fā)生的一個(gè)個(gè)事件的記錄。Logging的典型特征就是它和孤立的事件(Event)強(qiáng)關(guān)聯(lián),一個(gè)事件的產(chǎn)生所以導(dǎo)致了一條日志的產(chǎn)生。舉個(gè)例子就是一個(gè)網(wǎng)絡(luò)請(qǐng)求是一個(gè)事件,它被云端接到后Nginx產(chǎn)生了一個(gè)訪問log。大量的不同外部事件間基本是離散的,比如多個(gè)用戶訪問云端業(yè)務(wù)時(shí)產(chǎn)生的5個(gè)事件間沒有必然的關(guān)系,所以在一個(gè)服務(wù)節(jié)點(diǎn)的角度上看這些事件產(chǎn)生的日志間也是離散的。

關(guān)于日志管理平臺(tái),相信很多同學(xué)聽說(shuō)過最多的就是ELK(elastic stack),ELK是三款軟件的簡(jiǎn)稱,分別是Elasticsearch、 Logstash、Kibana組成。在APM體系中,它可以實(shí)現(xiàn)關(guān)鍵字的分布式搜索和日志分析,能夠快速定位到我們想要的日志,通過可視化平臺(tái)的展示,能夠從多個(gè)維度來(lái)對(duì)日志進(jìn)行細(xì)化跟蹤。

?Elasticsearch基于java,是個(gè)開源分布式搜索引擎,它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。是當(dāng)前流行的企業(yè)級(jí)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定,可靠,快速,安裝使用方便。它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等。

Kibana基于nodejs,是一款開源的數(shù)據(jù)分析和可視化平臺(tái),它是Elastic Stack成員之一,設(shè)計(jì)用于和Elasticsearch協(xié)作。您可以使用Kibana對(duì)Elasticsearch索引中的數(shù)據(jù)進(jìn)行搜索、查看、交互操作。您可以很方便的利用圖表、表格及地圖對(duì)數(shù)據(jù)進(jìn)行多元化的分析和呈現(xiàn)。

Logstash基于java,是一個(gè)開源的用于收集,分析和存儲(chǔ)日志的工具,能夠同時(shí)從多個(gè)來(lái)源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到最喜歡的存儲(chǔ)庫(kù)中(我們的存儲(chǔ)庫(kù)當(dāng)然是ElasticSearch)。?

下面是ELK的工作原理: 

圖片

ELK中的L理解成Logging Agent比較合適。Elasticsearch和Kibana是存儲(chǔ)、檢索和分析log的標(biāo)準(zhǔn)方案。在高負(fù)載的ELK平臺(tái)迭代實(shí)踐中,常常采用一些優(yōu)化策略。比如:ElasticSearch 做冷熱數(shù)據(jù)分離,歷史索引數(shù)據(jù)關(guān)閉;Filebeat更加輕量,對(duì)資源消耗更少,替代Logstash作為數(shù)據(jù)收集引擎;增加消息隊(duì)列做數(shù)據(jù)緩沖,通過解耦處理過程實(shí)現(xiàn)削峰平谷,幫助平臺(tái)頂住突發(fā)的訪問壓力。

ELK的缺點(diǎn)也是明顯的,部署這樣一套日志分析系統(tǒng),不論是存儲(chǔ)還是分析所需要占用的機(jī)器成本是挺大的。業(yè)務(wù)日志是時(shí)時(shí)打印的,大規(guī)模的在線服務(wù)一天日志量可能達(dá)到TB級(jí)別,如果采用ELK平臺(tái),在保證關(guān)鍵日志信息入庫(kù)的同時(shí),有針對(duì)性的對(duì)所需日志文件進(jìn)行采集和過濾是必不可少的。

5.3 Tracing、OpenTracing和Apache SkyWalking

.Tracing:鏈路。

I think that the single defining characteristic of tracing , then, is that it deals with information that is request-scoped.

鏈路可理解為某個(gè)最外層請(qǐng)求下的所有調(diào)用信息。在微服務(wù)中一般有多個(gè)調(diào)用信息,如從最外層的網(wǎng)關(guān)開始,A服務(wù)調(diào)用B服務(wù),調(diào)用數(shù)據(jù)庫(kù)、緩存等。在鏈路系統(tǒng)中,需要清楚展現(xiàn)某條調(diào)用鏈中從主調(diào)方到被調(diào)方內(nèi)部所有的調(diào)用信息。這不僅有利于梳理接口及服務(wù)間調(diào)用的關(guān)系,還有助于排查慢請(qǐng)求產(chǎn)生的原因或異常發(fā)生的原因。

Tracing最早提出是來(lái)自Google的論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,它讓Tracing流行起來(lái)。而Twitter基于這篇論文開發(fā)了Zipkin并開源了這個(gè)項(xiàng)目。再之后業(yè)界百花齊放,誕生了一大批開源和商業(yè)Tracing系統(tǒng)。

Tracing 以請(qǐng)求的維度,串聯(lián)服務(wù)間的調(diào)用關(guān)系并記錄調(diào)用耗時(shí),即保留了必要的信息,又將分散的日志事件通過Span層串聯(lián), 幫助我們更好的理解系統(tǒng)的行為、輔助調(diào)試和排查性能問題。它的基本概念如下兩點(diǎn):

  1. Trace(調(diào)用鏈):OpenTracing中的Trace(調(diào)用鏈)通過歸屬于此調(diào)用鏈的Span來(lái)隱性的定義。一條Trace(調(diào)用鏈)可以被認(rèn)為是一個(gè)由多個(gè)Span組成的有向無(wú)環(huán)圖(DAG圖),可以簡(jiǎn)單理解成一次事務(wù);
  2. Span(跨度):可以被翻譯為跨度,可以被理解為一次方法調(diào)用,一個(gè)程序塊的調(diào)用,或者一次RPC/數(shù)據(jù)庫(kù)訪問,只要是一個(gè)具有完整時(shí)間周期的程序訪問,都可以被認(rèn)為是一個(gè)Span。

對(duì)于一個(gè)組件來(lái)說(shuō),一次處理過程產(chǎn)生一個(gè) Span,這個(gè) Span 的生命周期是從接收到請(qǐng)求到返回響應(yīng)這段過程,在單個(gè)Trace中,存在多個(gè)Span。

舉個(gè)例子,比如一個(gè)請(qǐng)求用戶訂單信息的接口,流量分發(fā)到了應(yīng)用層實(shí)例(Span A)來(lái)處理請(qǐng)求,應(yīng)用層實(shí)例(Span A)需要請(qǐng)求訂單中心服務(wù)實(shí)例(Span B)來(lái)獲取訂單數(shù)據(jù),同時(shí)請(qǐng)求用戶中心服務(wù)實(shí)例(Span C)來(lái)獲取用戶數(shù)據(jù)。基礎(chǔ)服務(wù)B、C可能還有其他依賴服務(wù)鏈路,則如下圖所示結(jié)構(gòu),Span間的因果關(guān)系如下:

[Span A]  ←←←(the root span)
|
+------+------+
| |
[Span B] [Span C] ←←←(Span C 是 Span A 的孩子節(jié)點(diǎn), ChildOf)
| |
[Span D] +---+-------+
| |
[Span E] [Span F] >>> [Span G] >>> [Span H]



(Span G 在 Span F 后被調(diào)用, FollowsFrom)

OpenTracing是一個(gè)中立的(廠商無(wú)關(guān)、平臺(tái)無(wú)關(guān))分布式追蹤的API 規(guī)范,提供統(tǒng)一接口,可方便開發(fā)者在自己的服務(wù)中集成一種或多種分布式追蹤的實(shí)現(xiàn)。由于近年來(lái)各種鏈路監(jiān)控產(chǎn)品層出不窮,當(dāng)前市面上主流的工具既有像Datadog這樣的一攬子商業(yè)監(jiān)控方案,也有AWS X-Ray和Google Stackdriver Trace這樣的云廠商產(chǎn)品,還有像Zipkin、Jaeger這樣的開源產(chǎn)品。

云原生基金會(huì)(CNCF) 推出了OpenTracing標(biāo)準(zhǔn),推進(jìn)Tracing協(xié)議和工具的標(biāo)準(zhǔn)化,統(tǒng)一Trace數(shù)據(jù)結(jié)構(gòu)和格式。OpenTracing通過提供平臺(tái)無(wú)關(guān)、廠商無(wú)關(guān)的API,使得開發(fā)人員能夠方便添加(或更換)追蹤系統(tǒng)的實(shí)現(xiàn)。比如從Zipkin替換成Jaeger/Skywalking等后端。

圖片

在眾多Tracing產(chǎn)品中,值得一提的是國(guó)人自研開源的產(chǎn)品Skywalking。它是一款優(yōu)秀的APM工具,專為微服務(wù)、云原生架構(gòu)和基于容器架構(gòu)而設(shè)計(jì),支持Java、.Net、NodeJs等探針方式接入項(xiàng)目,數(shù)據(jù)存儲(chǔ)支持Mysql、Elasticsearch等。功能包括了分布式鏈路追蹤,性能指標(biāo)分析和服務(wù)依賴分析等。2017年加入Apache孵化器,2019年4月17日Apache董事會(huì)批準(zhǔn)SkyWalking成為頂級(jí)項(xiàng)目,目前百度廠內(nèi)有一些業(yè)務(wù)線采用skywalking作為主要的日志運(yùn)維平臺(tái)。

5.4 Metrics,Logging和 Tracing 結(jié)合

指標(biāo)、日志、鏈路在監(jiān)控中是相輔相成的。現(xiàn)在再來(lái)看上圖中,兩兩相交的部分:

  1. 通過指標(biāo)和日志維度,我們可以做一些事件的聚合統(tǒng)計(jì),例如,繪制流量趨勢(shì)圖,某應(yīng)用每分鐘的錯(cuò)誤日志數(shù)
  2. 通過鏈路和日志系統(tǒng),我們可以得到某個(gè)請(qǐng)求詳細(xì)的請(qǐng)求信息,例如請(qǐng)求的入?yún)ⅰ⒊鰠ⅰ㈡溌分型痉椒ù蛴〕龅娜罩拘畔ⅲ?/span>
  3. 通過指標(biāo)和鏈路系統(tǒng),我們可以查到請(qǐng)求調(diào)用信息,例如 SQL執(zhí)行總時(shí)長(zhǎng)、各依賴服務(wù)調(diào)用總次數(shù);

可見,通過這三種類型數(shù)據(jù)相互作用,可以得到很多在某種類型數(shù)據(jù)中無(wú)法呈現(xiàn)的信息。例如下圖是一個(gè)故障排查的示例,首先,我們從消息通知中發(fā)現(xiàn)告警,進(jìn)入metrics指標(biāo)面板,定位到有問題的數(shù)據(jù)圖表,再通過指標(biāo)系統(tǒng)查詢到詳細(xì)的數(shù)據(jù),在logging日志系統(tǒng)查詢到對(duì)應(yīng)的錯(cuò)誤,通過tracing鏈路追蹤系統(tǒng)查看鏈路中的位置和問題(當(dāng)然也可以先用鏈路追蹤系統(tǒng)進(jìn)行故障的定位,再查詢?cè)敿?xì)日志),最后修復(fù)故障。這是一個(gè)典型的將三個(gè)系統(tǒng)串聯(lián)起來(lái)應(yīng)用的示例。

圖片

6、文庫(kù)在日志運(yùn)維上的實(shí)踐

6.1 匯聚監(jiān)控

文庫(kù)App對(duì)于域名、中間件、依賴服務(wù)等流量穩(wěn)定性,機(jī)器資源的監(jiān)控,基于廠內(nèi)現(xiàn)有的解決方案(Bns+Argus監(jiān)控系統(tǒng)+Sia可視化平臺(tái))實(shí)現(xiàn)。工作流程可以理解為:

  1. 在日志采集平臺(tái)(Argus)配置數(shù)據(jù)采集規(guī)則,異常判斷規(guī)則和報(bào)警配置規(guī)則;
  2. 通過服務(wù)實(shí)例映射配置(Bns)獲取到要采集日志的實(shí)例列表,實(shí)例服務(wù)的log format要符合采集規(guī)則的正則表達(dá)式;
  3. Agent上報(bào)日志分析數(shù)據(jù)給MQ消化,MQ存入TSDB;
  4. 日志匯聚后的分析計(jì)算結(jié)果符合異常判斷規(guī)則,則觸發(fā)對(duì)應(yīng)配置的報(bào)警規(guī)則;
  5. 報(bào)警規(guī)則可以配置多維度分級(jí)分時(shí)間和不同方式提醒到接收人。同時(shí),通過配置群聊機(jī)器人對(duì)包括資源,接入層,運(yùn)行層,服務(wù)及底層依賴的等服務(wù),依據(jù)閥值進(jìn)行基本實(shí)時(shí)的監(jiān)控報(bào)警;
  6. 可視化平臺(tái)(Sia)通過 metric 配置從 TSDB 中讀出相應(yīng)數(shù)據(jù),進(jìn)行圖形化展示。

圖片

6.2 批量查詢

即時(shí)日志撈取工具在我們業(yè)務(wù)開發(fā)中也是比較常見的,通常通過批量并發(fā)執(zhí)行遠(yuǎn)程服務(wù)器指令來(lái)實(shí)現(xiàn),解決依次執(zhí)行的繁鎖,讓運(yùn)維操作更安全便捷。

這種工具不依賴agent,只通過ssh就可以工作,一般通過中控機(jī)或者賬戶密碼等方式做ssh訪問控制,執(zhí)行g(shù)rep,tail等命令獲取日志,然后對(duì)logs進(jìn)行分析,可以解決日常中很多的需求。簡(jiǎn)化代碼如下。

package main


import (
"fmt"
"log"
"os/exec"
"runtime"
"sync"
)


// 并發(fā)環(huán)境
var wg sync.WaitGroup


func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
instancesHost := getInstances()
wg.Add(len(instancesHost))
for _, host := range instancesHost {
go sshCmd(host)
}
wg.Wait()
fmt.Println("over!")
}


// 執(zhí)行查詢命令
func sshCmd(host string) {
defer wg.Done()
logPath := "/xx/xx/xx/"
logShell := "grep 'FATAL' xx.log.20230207"
cmd := exec.Command("ssh", "PasswordAuthenticatinotallow=no", "Cnotallow=1", host, "-l", "root", "cd", logPath, "&&", logShell)
out, err := cmd.CombinedOutput()
fmt.Printf("exec: %s\n", cmd)
if err != nil {
fmt.Printf("combined out:\n%s\n", string(out))
log.Fatalf("cmd.Run() failed with %s\n", err)
}
fmt.Printf("combined out:\n%s\n", string(out))
}


// 獲取要查詢的實(shí)例ip地址庫(kù)
func getInstances() []string {
return []string{
"x.x.x.x",
"x.x.x.x",
"x.x.x.x",
}
}

把如上代碼部署在中控機(jī)上ssh免密登錄,通過go run batch.go或執(zhí)行g(shù)o build后的二進(jìn)制文件,可以實(shí)現(xiàn)批量查詢?nèi)罩镜幕A(chǔ)能力。在此基礎(chǔ)上增加傳參,可以實(shí)現(xiàn)指定集群實(shí)例,指定exec命令,并發(fā)度控制,優(yōu)化輸出等功能。

6.3 鏈路跟蹤

文庫(kù)自研的全鏈路日志跟蹤平臺(tái),支持trace全鏈路日志跟蹤,指標(biāo)匯聚,關(guān)鍵信息高亮,搜索范圍覆蓋nginx,nodejs,php,go等異構(gòu)微服務(wù),還支持動(dòng)態(tài)繪制調(diào)用鏈路圖。用戶可以通過查詢tracid的方式獲得一個(gè)請(qǐng)求鏈路的http分析,調(diào)用服務(wù)的次數(shù)匯聚,日志list和拓?fù)滏溌穲D。

透?jìng)鱰race的底層流程是在接入層nginx擴(kuò)展生成的一個(gè)20 -26位長(zhǎng)、編碼了nginx所在機(jī)器ip和請(qǐng)求時(shí)間的純數(shù)字字符串。這個(gè)字符串在請(qǐng)求日志、服務(wù)運(yùn)行日志、rpc日志中記錄,通過Http Header向下透?jìng)鳎诜?wù)間調(diào)用過程中,在當(dāng)前層記錄調(diào)用的下一層實(shí)例ip:port信息,保證trace參數(shù)維持。

綠色的節(jié)點(diǎn)為鏈路調(diào)用的起始節(jié)點(diǎn),一般是文庫(kù)接入層。鼠標(biāo)hover到哪個(gè)節(jié)點(diǎn)會(huì)title展示詳情,并在整個(gè)鏈路中隱去與之不相關(guān)的節(jié)點(diǎn)鏈路。如果節(jié)點(diǎn)有fatal,warning的日志,節(jié)點(diǎn)背景色會(huì)以紅色,黃色展示。

圖片

7、日志的壞味道

  1. 信息不明確。后果:執(zhí)行效率降低;
  2. 格式不規(guī)范。后果:不可讀,無(wú)法采集;
  3. 日志過少,缺乏關(guān)鍵信息。后果:降低定位問題效率;
  4. 參雜了臨時(shí)、冗余、無(wú)意義的日志。后果:生產(chǎn)打印大量日志消耗性能;
  5. 日志錯(cuò)誤級(jí)別使用混亂。后果:導(dǎo)致監(jiān)控誤報(bào);
  6. 使用字符串拼接方式,而非占位符。后果:可維護(hù)性較低;
  7. 代碼循環(huán)體打非必要的日志。后果:有宕機(jī)風(fēng)險(xiǎn);
  8. 敏感數(shù)據(jù)未脫敏。后果:有隱私信息泄露風(fēng)險(xiǎn);
  9. 日志文件未按小時(shí)分割轉(zhuǎn)儲(chǔ)。后果:不易磁盤空間回收;
  10. 服務(wù)調(diào)用間沒有全局透?jìng)鱰race信息。后果:不能構(gòu)建全鏈路日志跟蹤。

8、日志 good case

  1. 能快速的定位問題;
  2. 能提取有效信息,了解原因;
  3. 了解線上系統(tǒng)的運(yùn)行狀態(tài);
  4. 匯聚日志關(guān)鍵信息,可以發(fā)現(xiàn)系統(tǒng)的瓶頸;
  5. 日志隨著項(xiàng)目迭代,同步迭代;
  6. 日志的打印和采集、上報(bào)服務(wù),不能影響系統(tǒng)的正常運(yùn)行。

9、結(jié)語(yǔ)

在萬(wàn)物上云的時(shí)代,通過搭建合適的日志運(yùn)維平臺(tái)來(lái)賦予數(shù)據(jù)搜索、分析和監(jiān)控預(yù)警的能力,讓沉寂在服務(wù)器的日志"動(dòng)"起來(lái),可以幫助我們?cè)跀?shù)據(jù)分析,問題診斷,系統(tǒng)改進(jìn)的工作中更加順利的進(jìn)行,希望本文的內(nèi)容對(duì)大家的實(shí)踐有所幫助。


責(zé)任編輯:武曉燕 來(lái)源: 百度Geek說(shuō)
相關(guān)推薦

2012-08-24 10:01:56

百度前端工程師

2023-03-01 18:40:54

應(yīng)用程序代碼

2012-11-25 15:42:47

互聯(lián)網(wǎng)百度搜索

2020-03-23 08:34:50

百度工程師判刑

2011-08-12 10:58:51

Hadoop

2021-07-14 07:17:37

Springboot分布式UIDGenerato

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2016-04-15 13:45:48

2013-03-26 13:43:08

Java分布式計(jì)算

2010-03-17 10:31:28

網(wǎng)絡(luò)工程師

2017-07-27 14:32:05

大數(shù)據(jù)分布式消息Kafka

2016-11-08 21:18:22

百度

2016-11-11 20:23:17

分布式集群萬(wàn)億量級(jí)計(jì)算百度

2009-12-22 09:27:27

百度招聘工程師

2009-10-09 17:17:11

安裝VB dcom分布

2013-06-13 11:29:14

分布式分布式緩存

2025-06-13 07:30:51

2012-02-01 13:25:47

百度

2011-07-21 16:55:10

SEO

2011-12-12 14:01:52

百度開放平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美黄色片 | 成人三区四区 | 免费精品视频在线观看 | 久久精品国产一区二区三区 | 4hu最新网址 | 国产精品国产精品 | 久久久区 | 久久毛片| 男女羞羞在线观看 | 亚洲精品黄色 | 草比网站 | 日韩在线不卡视频 | 欧美不卡在线 | 日韩一区欧美一区 | 欧美另类视频 | 一区二区在线不卡 | 国产精品一区二区久久精品爱微奶 | 日韩欧美成人精品 | 亚洲传媒在线 | 五月婷婷中文 | 亚洲夜射 | 精品一区二区久久久久久久网站 | 欧美精品成人一区二区三区四区 | 草久视频 | www精品| 国家一级黄色片 | 久久久噜噜噜久久中文字幕色伊伊 | 成人在线视频免费看 | 国产亚洲精品久久久优势 | 日本精品一区二区三区在线观看 | 免费午夜电影 | 一区二区在线不卡 | 91影库| 亚洲一区在线播放 | 在线国产一区二区 | 91精品午夜窝窝看片 | 男女免费在线观看视频 | 亚洲免费婷婷 | 蜜桃视频在线观看免费视频网站www | 国产精品成av人在线视午夜片 | 成人不卡在线 |