91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

《基于時間序列數(shù)據(jù)進行有效報警》的實踐總結(jié)

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 作者:馬哥Linux運維 ? 2022-07-11 11:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文可以看做是對《SRE》一書第10章《基于時間序列數(shù)據(jù)進行有效報警》的實踐總結(jié)。 Prometheus是一款開源的業(yè)務(wù)監(jiān)控軟件,可以看作是Google內(nèi)部監(jiān)控系統(tǒng) Borgmon 的一個(非官方)實現(xiàn)。 本文會介紹我近期使用Prometheus構(gòu)建的一套完整的,可用于中小規(guī)模(小于500節(jié)點)的半自動化(少量人工操作)監(jiān)控系統(tǒng)方案。

主動監(jiān)控

監(jiān)控是運維系統(tǒng)的基礎(chǔ),我們衡量一個公司/部門的運維水平,看他們的監(jiān)控系統(tǒng)就可以了。 監(jiān)控手段一般可以分為三種:

主動監(jiān)控:業(yè)務(wù)上線前,按照運維制定的標(biāo)準(zhǔn),預(yù)先埋點。具體的實現(xiàn)方式又有多種,可能通過日志、向本地 Agent 上報、提供 REST API 等。

被動監(jiān)控:通常是對主動監(jiān)控的補充,從外圍進行黑盒監(jiān)控,通過主動探測服務(wù)的功能可用性來進行監(jiān)控。比如定期ping業(yè)務(wù)端口。

旁路監(jiān)控:主動監(jiān)控和被動監(jiān)控,通常還是都在內(nèi)部進行的監(jiān)控,內(nèi)部運行平穩(wěn)也不能保證用戶的體驗都是正常的(比如用戶網(wǎng)絡(luò)出問題),所以仍然需要通過輿情監(jiān)控、第三方監(jiān)控工具等的數(shù)據(jù)來間接的監(jiān)控真實的服務(wù)質(zhì)量。

主動監(jiān)控是最理想的方案,后兩種主要用作補充,本文只關(guān)注主動監(jiān)控。 監(jiān)控實際是一個端到端的體系(基礎(chǔ)設(shè)施-服務(wù)器-業(yè)務(wù)-用戶體驗),本文只關(guān)注業(yè)務(wù)級別的主動監(jiān)控。

Prometheus

為什么選擇Prometheus而不是其它TSDB實現(xiàn)(如InfluxDB)?主要是因為Prometheus的核心功能,查詢語言 PromQL,它更像一種可編程計算器,而不是其那么像 SQL,也意味著 PromQL 可以近乎無限之組合出各種查詢結(jié)果。 比如,我們有一個http服務(wù),監(jiān)控項http_requests_total用于統(tǒng)計請求次數(shù)。某一組監(jiān)控數(shù)據(jù)可能是這個樣子:

http_requests_total{instance="1.1.1.1:80",job="cluster1",location="/a"} 100http_requests_total{instance="1.1.1.1:80", job="cluster1", location="/b"} 110http_requests_total{instance="1.1.1.2:80", job="cluster2", location="/b"} 100http_requests_total{instance="1.1.1.3:80", job="cluster3", location="/c"} 110 這里有3個標(biāo)簽,分別對應(yīng)抓取的實例,所屬的 Job(一般我用集群名),訪問路徑(你可以理解為Nginx的location),Prometheus多維數(shù)據(jù)模型意味著我們可以在任意一個或多個維度進行計算:

如果你想統(tǒng)計單機qps,sum(rate(http_requests_total[1m])) by (instance)

如果想用統(tǒng)計每個集群每個不同 location 的 path 的 qps,sum(rate(http_requests_total[1m])) by (job, path),PromQL會依據(jù)標(biāo)簽job-path的值聚合出結(jié)果。

除了PromQL,豐富的數(shù)據(jù)類型可以提供更有意義的監(jiān)控項:

Counter(計數(shù)器):標(biāo)識單調(diào)遞增的數(shù)據(jù),比如接口訪問次數(shù)。

Gauge(刻度):當(dāng)前瞬時的一個狀態(tài),可能增加,也可能減小,比如CPU使用率,平均延時等等。

Historgram(直方圖):用于統(tǒng)計數(shù)據(jù)的分布,比如95 percentile latency。

大部分監(jiān)控項都可以使用Counter來實現(xiàn),少部分使用Gauge和Histogram,其中Histogram在服務(wù)端計算是相當(dāng)費CPU的,所以也沒要導(dǎo)出太多Histogram數(shù)據(jù)。 最后,Prometheus采用PULL模型的實時抓取存儲計算,主動去抓取監(jiān)控實例數(shù)據(jù),相比于PUSH模型對業(yè)務(wù)侵入更低,相比于基于log的離線統(tǒng)計則更實時,而監(jiān)控實例只需提供一個文本格式的/metrics接口也更容易debug。

服務(wù)框架的改造

筆者所在團隊使用統(tǒng)一的服務(wù)框架來規(guī)范項目開發(fā)并有效降低了開發(fā)難度。 這里先介紹下我們的服務(wù)框架:

類似于 Nginx 的多進程架構(gòu)(master/worker),但同時也支持多線程的事件循環(huán)編程模型

支持多種接入?yún)f(xié)議(HTTP,Thrift,PB等),但主流是HTTP

業(yè)務(wù)通過 Module 來加載進框架執(zhí)行(類似 Nginx 的 module,但更簡單)

提供純異步的下游訪問 API

為了使服務(wù)框架可以導(dǎo)出內(nèi)部監(jiān)控項,主要涉及幾方面的工作:

提供基礎(chǔ)數(shù)據(jù)類型

目前并沒有官方的Prometheus Client Library,幾種開源實現(xiàn)也都不太符合框架的需求。目前實現(xiàn)了支持多線程多進程的Counter和Histogram(除了初始化之外,更新操作都是無鎖的),而Gauge由于多進程場景有的情況是無法聚合監(jiān)控數(shù)據(jù)的(沒用統(tǒng)一的聚合方法,并不一定都可以相加),所以沒有提供具體實現(xiàn)

基礎(chǔ)數(shù)據(jù)要有類似注冊表的功能,方便自動導(dǎo)出數(shù)據(jù)到/metrics接口

在服務(wù)框架埋點

要足夠靈活,將容易變化的信息通過標(biāo)簽來表達(dá)。 比如一個web服務(wù)可能有echo,date兩個location,如果要統(tǒng)計它們qps,不要定義echo_requests_total,date_requests_total兩個不同名字的 metrics,而應(yīng)該定義一個名為http_requests_total的 metrics,通過標(biāo)簽location(分別為echo/date)來區(qū)分,這樣再增加/減少接口是不需要改代碼的

理想情況是業(yè)務(wù)幾乎為各種通信功能自行埋點,所以內(nèi)置埋點要將常用監(jiān)控項都要覆蓋到(QPS,Latency,Error Ratio)

數(shù)據(jù)的抓取與展現(xiàn)

具備導(dǎo)出能力后,就可以通過Prometheus 進行抓取了,但還有幾個小坑: 用戶定義的metrics名字,可能是不符合Prometheus規(guī)范的,而遇到一條不合法的數(shù)據(jù),Prometheus就會停止抓取,所以導(dǎo)出數(shù)據(jù)時要先做一遍過濾和改寫 要控制導(dǎo)出數(shù)據(jù)規(guī)模,一些只對單機監(jiān)控有意義的數(shù)據(jù)可以不導(dǎo)出(框架有針對單機的監(jiān)控頁面) 在使用 Prometheus 時,也有幾個地方要注意: Prometheus即是一個CPU密集型(查詢)也是一個IO密集型(數(shù)據(jù)落地)的,CPU數(shù)量是多多益善,內(nèi)存越大越好(來緩存抓取的數(shù)據(jù),所以應(yīng)該減少不必要的業(yè)務(wù)數(shù)據(jù)導(dǎo)出),盡量要使用SSD(這個很關(guān)鍵?。?,因為一旦Prometheus的內(nèi)存使用量達(dá)到閾值會停止抓取數(shù)據(jù)!這個停止抓取的時間,至少是分鐘級,甚至是無法恢復(fù)!所以只要有條件就要用SSD。 Prometheus號稱支持 reload,但目測不是很好用,比如你修改了告警規(guī)則文件,重載之后,新舊告警規(guī)則似乎會一起計算執(zhí)行…. Prometheus本身也提供圖形界面,但是很簡陋:

5780048a-00c3-11ed-ba43-dac502259ad0.png

通常還是使用Grafana來展示監(jiān)控數(shù)據(jù)。

57993eaa-00c3-11ed-ba43-dac502259ad0.png

因為是統(tǒng)一的業(yè)務(wù)框架,統(tǒng)一的監(jiān)控指標(biāo),所以 Grafana 的 Dashboard 很容易統(tǒng)一配置:

我沒有找到將默認(rèn)模板打包進 Grafana 的方法,只能迂回的創(chuàng)建了一個新的Grafana Plugin,在啟動之后,每個業(yè)務(wù)實例只需要啟動下這個插件,然后配置一個默認(rèn)的 Prometheus 數(shù)據(jù)源,就可以使用統(tǒng)一的監(jiān)控 Dashboard

Dashboard 分為3行

第一行展示實時的 QPS,平均延時,平均排隊時間,Coredump 數(shù)量,下游引擎失敗率,下游引擎延時變化

第二行展示業(yè)務(wù)的延遲(50%和95%延遲),流量,吞吐(按照不同錯誤碼)

第三行展示下游引擎的延遲(50%和95%延遲),流量,吞吐(按照不同錯誤碼)

能夠展示 Prometheus 強大威力的是,這里面每一個圖表,都可以同時展示所有機房的監(jiān)控指標(biāo),而每一個指標(biāo)的計算只需要一條 Query 語句。比如第一行第五列,各個機房的各個下游的失敗率統(tǒng)計并排序,只用了一條語句:

topk(5, 100*sum(rate(downstream_responses{error_code!="0"}[5m])) by (job, server)/sum(rate(downstream_responses[5m])) by (job, server)) 注意這里的Range Vector Selector - [5m],意味著我們是基于過去5分鐘的數(shù)據(jù)來計算rate,這個值取的越小,得到的監(jiān)控結(jié)果波動越大,越大則越平滑,選擇多大的值,取決于你想要什么結(jié)果。建議圖表使用5m,而告警規(guī)則計算采用1m。如果業(yè)務(wù)不是很重要,可以適當(dāng)增大這個值。 這一套監(jiān)控模板基本覆蓋了業(yè)務(wù)對可用性監(jiān)控的需求,同時業(yè)務(wù)也可以自己定義監(jiān)控指標(biāo)并進行監(jiān)控。

AlertManager

Prometheus 周期性進行抓取數(shù)據(jù),完成抓取后會檢查是否有告警規(guī)則并進行計算,滿足告警規(guī)則就會觸發(fā)告警,發(fā)送到 alertmanager?;谶@個流程,當(dāng)你在監(jiān)控圖表看到異常時,告警已經(jīng)先行觸發(fā)了。

57aa5f82-00c3-11ed-ba43-dac502259ad0.png

默認(rèn)情況我們配置了不到10條告警規(guī)則,要注意的是周期的選擇,過長的話會產(chǎn)生較大延遲,太短的話一個小的流量波動都會導(dǎo)致大量報警出現(xiàn)。 Prometheus 的設(shè)計是產(chǎn)生報警,但報警的匯總、分發(fā)、屏蔽則在 AlertManager 服務(wù)完成。

57c574b6-00c3-11ed-ba43-dac502259ad0.png

AlertManager 目前還是非常簡單的,但它可以將告警繼續(xù)分發(fā)到其他接收者:

可以通過webhook機制,發(fā)送告警到一個中間服務(wù)轉(zhuǎn)換格式再發(fā)送到內(nèi)部告警接口

如果使用第三方告警管理平臺,如PageDuty、OneAlert,可以直接用內(nèi)置的 pageduty 支持或 webhook 發(fā)送告警過去

如果是一窮二白的團隊,建議配置 email + slack,實現(xiàn)告警歸檔和手機 Push

更復(fù)雜告警分級管理,AlertManager 還是有很長的路要走,這個話題也值得今后單獨講下。

Prometheus + Grafana + Mesos

Prometheus + Grafana 的方案,加上統(tǒng)一的服務(wù)框架,可以滿足大部分中小團隊的監(jiān)控需求。我們將這幾個組件打包一起部署在 Mesos 之上,統(tǒng)一的安裝包進一步降低監(jiān)控系統(tǒng)部署的難度,用戶需要配置一些簡單的參數(shù)即可。但還需要注意幾點:

目前并沒有將 Prometheus 和 Grafana 容器化部署,因為這兩者本身就沒有什么特殊依賴;安裝包存儲在 minio 中。

由于 Prometheus 系統(tǒng)的特殊性,我們通常將其指定在一臺固定的機器上執(zhí)行,且將數(shù)據(jù)落地到一個固定的目錄,這樣重啟 Prometheus 的影響會非常低

Grafana 是展示給用戶的,需要盡可能的保持固定入口,所以我們通過HAPROXY_CONSUL給其配置了代理

57d7909c-00c3-11ed-ba43-dac502259ad0.png

結(jié) 論

Prometheus 是相當(dāng)強大并快速成長的一個監(jiān)控系統(tǒng)實現(xiàn),雖然在穩(wěn)定性、性能、文檔上仍有很大提升空間,但對于中小團隊是一個很棒的選擇,通過定制服務(wù)框架,設(shè)計完善的埋點,統(tǒng)一的Prometheus/Grafana配置模板,再加上Mesos平臺,可以半自動化的部署實時業(yè)務(wù)監(jiān)控系統(tǒng)。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 監(jiān)控系統(tǒng)

    關(guān)注

    21

    文章

    4176

    瀏覽量

    184918
  • 時間序列
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    10702

原文標(biāo)題:無監(jiān)控,不運維!Prometheus 在線服務(wù)的監(jiān)控實操指南

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    JSON:簡潔代碼高效搞定序列化與反序列

    面對頻繁的數(shù)據(jù)交互需求,用最簡方式實現(xiàn)JSON序列化與反序列化已成為開發(fā)者必備技能,借助主流庫,輕松實現(xiàn)零負(fù)擔(dān)數(shù)據(jù)轉(zhuǎn)換。JSON(JavaScriptObjectNotation)是一
    的頭像 發(fā)表于 02-25 19:04 ?106次閱讀
    JSON:簡潔代碼高效搞定<b class='flag-5'>序列</b>化與反<b class='flag-5'>序列</b>化

    極簡代碼,搞定JSON序列化與反序列

    快速實現(xiàn)JSON數(shù)據(jù)的生成(序列化)與解析(反序列化)。 目前json庫已全面支持LuatOS開發(fā)系列產(chǎn)品,開發(fā)者可根據(jù)項目實際需求,靈活選用并進行快速集成與開發(fā)。 一、 JSON基礎(chǔ)
    的頭像 發(fā)表于 02-23 21:46 ?347次閱讀
    極簡代碼,搞定JSON<b class='flag-5'>序列</b>化與反<b class='flag-5'>序列</b>化

    【「Altium Designer 25 電路設(shè)計精進實踐」閱讀體驗】+本書概覽與內(nèi)容特點介紹

    本文以AD 25版本為依托,介紹了AD25進行電子電路設(shè)計的方法,理論結(jié)合實踐。 內(nèi)容概覽先來概覽下本書的內(nèi)容,看一本書的內(nèi)容,從其目錄就可以看到個大概本書分為以下章節(jié),總體上來說還是按照先理論再
    發(fā)表于 02-14 15:56

    智能開關(guān)怎么做到對用電設(shè)備的有效監(jiān)控管理?

    進行預(yù)警,還更關(guān)注運行行為本身是否存在異常模式。 這為后續(xù)的風(fēng)險分析、故障定位和運維決策提供了更可靠的數(shù)據(jù)基礎(chǔ),而非僅停留在簡單的閾值報警層面。 4、靈活組網(wǎng)與項目適配能力:降低網(wǎng)絡(luò)安裝重構(gòu)成本 在多項
    發(fā)表于 01-31 09:58

    2024年度技術(shù)總結(jié)——MCU與MEMS和TOF應(yīng)用實踐

    認(rèn)識到,技術(shù)的進步不僅僅是理論上的突破,更需要在客戶應(yīng)用場景中進行實踐和驗證。技術(shù)不應(yīng)僅限于閉門造車,它的真正價值是在實際項目中落地,并為產(chǎn)品賦能,從而解決現(xiàn)實世界中的挑戰(zhàn)。 通過對客戶項目
    的頭像 發(fā)表于 12-22 15:04 ?1188次閱讀
    2024年度技術(shù)<b class='flag-5'>總結(jié)</b>——MCU與MEMS和TOF應(yīng)用<b class='flag-5'>實踐</b>

    一文讀懂LSTM與RNN:從原理到實戰(zhàn),掌握序列建模核心技術(shù)

    在AI領(lǐng)域,文本翻譯、語音識別、股價預(yù)測等場景都離不開序列數(shù)據(jù)處理。循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)作為最早的序列建模工具,開創(chuàng)了“記憶歷史信息”的先河;而長短期記憶網(wǎng)絡(luò)(LSTM)則通過創(chuàng)新設(shè)計,突破
    的頭像 發(fā)表于 12-09 13:56 ?1432次閱讀
    一文讀懂LSTM與RNN:從原理到實戰(zhàn),掌握<b class='flag-5'>序列</b>建模核心技術(shù)

    ATA-D60090功率放大器在時間調(diào)制序列生成中的應(yīng)用

    利用計算機生成波束掃描所需的的波束掃描的時間編碼序列。根據(jù)時間編碼序列,任意信號發(fā)生器產(chǎn)生的方波信號通過功率放大器產(chǎn)生控制電壓信號。
    的頭像 發(fā)表于 11-30 14:27 ?437次閱讀
    ATA-D60090功率放大器在<b class='flag-5'>時間</b>調(diào)制<b class='flag-5'>序列</b>生成中的應(yīng)用

    校園一鍵報警

    報警
    jf_55301954
    發(fā)布于 :2025年11月06日 16:46:52

    報警芯片怎樣選擇?報警器用的什么芯片?報警芯片的主要類型?常見報警芯片推薦?防盜器芯片有哪些?

    選擇報警芯片時,需要根據(jù)具體的應(yīng)用場景、功能需求、成本預(yù)算和性能要求進行綜合評估。以下是選擇報警芯片時需要考慮的幾個關(guān)鍵因素,幫助你做出更合適的選擇:
    的頭像 發(fā)表于 09-22 18:55 ?488次閱讀
    <b class='flag-5'>報警</b>芯片怎樣選擇?<b class='flag-5'>報警</b>器用的什么芯片?<b class='flag-5'>報警</b>芯片的主要類型?常見<b class='flag-5'>報警</b>芯片推薦?防盜器芯片有哪些?

    LP5560可編程單LED驅(qū)動器數(shù)據(jù)手冊總結(jié)

    LP5560 是一款可編程 LED 驅(qū)動器,可生成各種閃爍序列,每個序列最多三個不同長度的脈沖。閃爍序列可以通過單線接口進行編程??删幊虆?shù)包括開啟和關(guān)閉
    的頭像 發(fā)表于 08-29 11:07 ?1139次閱讀
    LP5560可編程單LED驅(qū)動器<b class='flag-5'>數(shù)據(jù)</b>手冊<b class='flag-5'>總結(jié)</b>

    TPS38700-Q1 電源供應(yīng)序列總結(jié)

    計,可與多通道電壓監(jiān)控器連接。該器件默認(rèn)為預(yù)編程的OTP選項,但I2C可以根據(jù)需要對上電和斷電序列、看門狗設(shè)置和序列時序選項進行重新編程。
    的頭像 發(fā)表于 08-18 15:17 ?939次閱讀
    TPS38700-Q1 電源供應(yīng)<b class='flag-5'>序列</b>器<b class='flag-5'>總結(jié)</b>

    提高IT運維效率,深度解讀京東云AIOps落地實踐(異常檢測篇)

    基于深度學(xué)習(xí)對運維時序指標(biāo)進行異常檢測,快速發(fā)現(xiàn)線上業(yè)務(wù)問題 時間序列的異常檢測是實際應(yīng)用中的一個關(guān)鍵問題,尤其是在 IT 行業(yè)。我們沒有采用傳統(tǒng)的基于閾值的方法來實現(xiàn)異常檢測,而是通過深度學(xué)習(xí)提出
    的頭像 發(fā)表于 05-22 16:38 ?1041次閱讀
    提高IT運維效率,深度解讀京東云AIOps落地<b class='flag-5'>實踐</b>(異常檢測篇)

    快手上線鴻蒙應(yīng)用高性能解決方案:數(shù)據(jù)序列化性能提升90%

    普通對象(如 JSON 數(shù)據(jù))與類實例進行互轉(zhuǎn),是實現(xiàn)面向?qū)ο缶幊膛c數(shù)據(jù)序列化解耦的核心工具。隨著業(yè)務(wù)復(fù)雜度的提升,該庫在反序列化過程中逐漸
    發(fā)表于 05-15 10:01

    求助,關(guān)于ad7616序列器模式+crc的兩個問題求解

    我在使用序列器模式+CRC時,發(fā)現(xiàn)只有序列器最后一組 通道會出crc數(shù)據(jù),比如序列器配置為2組數(shù)據(jù),第二組
    發(fā)表于 04-15 08:23

    工業(yè)機器人報警數(shù)據(jù)采集物聯(lián)網(wǎng)解決方案

    的智能化管理需求日益迫切。工業(yè)機器人作為核心生產(chǎn)設(shè)備,其運行狀態(tài)的實時監(jiān)測和報警數(shù)據(jù)有效采集,成為實現(xiàn)智能化工廠管理、提升生產(chǎn)效率、降低維護成本的關(guān)鍵環(huán)節(jié)。通過物聯(lián)網(wǎng)技術(shù)對工業(yè)機器人報警
    的頭像 發(fā)表于 03-17 14:40 ?666次閱讀