www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 架構(gòu)師社區(qū)
[導(dǎo)讀]監(jiān)控作為底層基礎(chǔ)設(shè)施的一環(huán),是保障生產(chǎn)環(huán)境服務(wù)穩(wěn)定性不可或缺的一部分,線上問題從發(fā)現(xiàn)到定位再到解決,通過監(jiān)控和告警手段可以有效地覆蓋了「發(fā)現(xiàn)」和「定位」,甚至可以通過故障自愈等手段實(shí)現(xiàn)解決,服務(wù)開發(fā)和運(yùn)維人員能及時(shí)有效地發(fā)現(xiàn)服務(wù)運(yùn)行的異常,從而更有效率地排查和解決問題。一個(gè)典型的...


監(jiān)控作為底層基礎(chǔ)設(shè)施的一環(huán),是保障生產(chǎn)環(huán)境服務(wù)穩(wěn)定性不可或缺的一部分,線上問題從發(fā)現(xiàn)到定位再到解決,通過監(jiān)控和告警手段可以有效地覆蓋了「發(fā)現(xiàn)」和「定位」,甚至可以通過故障自愈等手段實(shí)現(xiàn)解決,服務(wù)開發(fā)和運(yùn)維人員能及時(shí)有效地發(fā)現(xiàn)服務(wù)運(yùn)行的異常,從而更有效率地排查和解決問題。一個(gè)典型的監(jiān)控(如白盒監(jiān)控),通常會(huì)關(guān)注于目標(biāo)服務(wù)的內(nèi)部狀態(tài),例如:
  • 單位時(shí)間接收到的請(qǐng)求數(shù)量
  • 單位時(shí)間內(nèi)請(qǐng)求的成功率/失敗率
  • 請(qǐng)求的平均處理耗時(shí)
白盒監(jiān)控很好地描述了系統(tǒng)的內(nèi)部狀態(tài),但缺少?gòu)耐獠拷嵌瓤吹降默F(xiàn)象,比如:白盒監(jiān)控只能看到已經(jīng)接收的請(qǐng)求,并不能看到由于 DNS 故障導(dǎo)致沒有發(fā)送成功的請(qǐng)求,而黑盒監(jiān)控此時(shí)便可以作為補(bǔ)充手段,由探針(probe)程序來(lái)探測(cè)目標(biāo)服務(wù)是否成功返回,更好地反饋系統(tǒng)的當(dāng)前狀態(tài)。某日需要為服務(wù)搭建一個(gè)監(jiān)控系統(tǒng)來(lái)采集應(yīng)用埋點(diǎn)上報(bào)的指標(biāo),經(jīng)過一番對(duì)比,最終選擇了 Prometheus 來(lái)作為我們的業(yè)務(wù)監(jiān)控,因?yàn)樗哂幸韵聝?yōu)點(diǎn):
  • 支持 PromQL(一種查詢語(yǔ)言),可以靈活地聚合指標(biāo)數(shù)據(jù)

  • 部署簡(jiǎn)單,只需要一個(gè)二進(jìn)制文件就能跑起來(lái),不需要依賴分布式存儲(chǔ)

  • Go 語(yǔ)言編寫,組件更方便集成在同樣是Go編寫項(xiàng)目代碼中

  • 原生自帶 WebUI,通過 PromQL 渲染時(shí)間序列到面板上

  • 生態(tài)組件眾多,Alertmanager,Pushgateway,Exporter……

Prometheus 的架構(gòu)圖如下:

在上面流程中,Prometheus 通過配置文件中指定的服務(wù)發(fā)現(xiàn)方式來(lái)確定要拉取監(jiān)控指標(biāo)的目標(biāo)(Target),接著從要拉取的目標(biāo)(應(yīng)用容器和Pushgateway)發(fā)起HTTP請(qǐng)求到特定的端點(diǎn)(Metric Path),將指標(biāo)持久化至本身的TSDB中,TSDB最終會(huì)把內(nèi)存中的時(shí)間序列壓縮落到硬盤,除此之外,Prometheus 會(huì)定期通過 PromQL 計(jì)算設(shè)置好的告警規(guī)則,決定是否生成告警到 Alertmanager,后者接收到告警后會(huì)負(fù)責(zé)把通知發(fā)送到郵件或企業(yè)內(nèi)部群聊中。Prometheus 的指標(biāo)名稱只能由 ASCII 字符、數(shù)字、下劃線以及冒號(hào)組成,而且有一套命名規(guī)范:
  • 使用基礎(chǔ) Unit(如 seconds 而非 milliseconds)

  • 指標(biāo)名以 application namespace 作為前綴,如:

    • process_cpu_seconds_total

    • http_request_duration_seconds

  • 用后綴來(lái)描述 Unit,如:

    • http_request_duration_seconds

    • node_memory_usage_bytes

    • http_requests_total

    • process_cpu_seconds_total

    • foobar_build_info

Prometheus 提供了以下基本的指標(biāo)類型:

  • Counter:代表一種樣本數(shù)據(jù)單調(diào)遞增的指標(biāo),即只增不減,通常用來(lái)統(tǒng)計(jì)如服務(wù)的請(qǐng)求數(shù),錯(cuò)誤數(shù)等。

  • Gauge:代表一種樣本數(shù)據(jù)可以任意變化的指標(biāo),即可增可減,通常用來(lái)統(tǒng)計(jì)如服務(wù)的CPU使用值,內(nèi)存占用值等。

  • Histogram?和?Summary:用于表示一段時(shí)間內(nèi)的數(shù)據(jù)采樣和點(diǎn)分位圖統(tǒng)計(jì)結(jié)果,通常用來(lái)統(tǒng)計(jì)請(qǐng)求耗時(shí)或響應(yīng)大小等。

Prometheus 是基于時(shí)間序列存儲(chǔ)的,首先了解一下什么是時(shí)間序列,時(shí)間序列的格式類似于(timestamp,value)這種格式,即一個(gè)時(shí)間點(diǎn)擁有一個(gè)對(duì)應(yīng)值,例如生活中很常見的天氣預(yù)報(bào),如:[(14:00,27℃),(15:00,28℃),(16:00,26℃)],就是一個(gè)單維的時(shí)間序列,這種按照時(shí)間戳和值存放的序列也被稱之為向量(vector)。

再來(lái)舉另一個(gè)例子,如上圖所示,假如有一個(gè)指標(biāo) http_requests,它的作用是統(tǒng)計(jì)每個(gè)時(shí)間段對(duì)應(yīng)的總請(qǐng)求量是多少,這時(shí)候它即為上面提到的是一個(gè)單維矩陣,而當(dāng)我們給這個(gè)指標(biāo)加上一個(gè)維度:主機(jī)名,這時(shí)候這個(gè)指標(biāo)的作用就變成了統(tǒng)計(jì)每個(gè)時(shí)間段各個(gè)主機(jī)名對(duì)應(yīng)的請(qǐng)求量是多少,這時(shí)候這個(gè)矩陣區(qū)域就變成擁有多列向量(每一列對(duì)應(yīng)一個(gè)主機(jī)名)的時(shí)間序列,當(dāng)給這個(gè)時(shí)間序列再添加多個(gè)標(biāo)簽(key=value)時(shí),這個(gè)矩陣就相應(yīng)會(huì)變成一個(gè)多維矩陣。每一組唯一的標(biāo)簽集合對(duì)應(yīng)著一個(gè)唯一的向量(vector),也可叫做一個(gè)時(shí)間序列(Time Serie),當(dāng)在某一個(gè)時(shí)間點(diǎn)來(lái)看它時(shí),它是一個(gè)瞬時(shí)向量(Instant Vector),瞬時(shí)向量的時(shí)序只有一個(gè)時(shí)間點(diǎn)以及它對(duì)于的一個(gè)值,比如:今天 12:05:30 時(shí)服務(wù)器的 CPU 負(fù)載;而在一個(gè)時(shí)間段來(lái)看它時(shí),它是一個(gè)范圍向量(Range Vector),范圍向量對(duì)于著一組時(shí)序數(shù)據(jù),比如:今天11:00到12:00時(shí)服務(wù)器的CPU負(fù)載。

類似的,可以通過指標(biāo)名和標(biāo)簽集來(lái)查詢符合條件的時(shí)間序列:

http_requests{host="host1",service="web",code="200",env="test"}查詢結(jié)果會(huì)是一個(gè)瞬時(shí)向量:

http_requests{host="host1",service="web",code="200",env="test"} 10http_requests{host="host2",service="web",code="200",env="test"} 0http_requests{host="host3",service="web",code="200",env="test"} 12而如果給這個(gè)條件加上一個(gè)時(shí)間參數(shù),查詢一段時(shí)間內(nèi)的時(shí)間序列:

http_requests{host="host1",service="web",code="200",env="test"}[:5m]結(jié)果將會(huì)是一個(gè)范圍向量:

http_requests{host="host1",service="web",code="200",env="test"} 0 4 6 8 10http_requests{host="host2",service="web",code="200",env="test"} 0 0 0 0 0http_requests{host="host3",service="web",code="200",env="test"} 0 2 5 9 12擁有了范圍向量,我們是否可以針對(duì)這些時(shí)間序列進(jìn)行一些聚合運(yùn)算呢?沒錯(cuò),PromQL就是這么干的,比如我們要算最近5分鐘的請(qǐng)求增長(zhǎng)速率,就可以拿上面的范圍向量加上聚合函數(shù)來(lái)做運(yùn)算:
rate(http_requests{host="host1",service="web",code="200",env="test"}[:5m])比如要求最近5分鐘請(qǐng)求的增長(zhǎng)量,可以用以下的 PromQL:

increase(http_requests{host="host1",service="web",code="200",env="test"}[:5m])要計(jì)算過去10分鐘內(nèi)第90個(gè)百分位數(shù):

histogram_quantile(0.9, rate(employee_age_bucket_bucket[10m]))在 Prometheus 中,一個(gè)指標(biāo)(即擁有唯一的標(biāo)簽集的 metric)和一個(gè)(timestamp,value)組成了一個(gè)樣本(sample),Prometheus 將采集的樣本放到內(nèi)存中,默認(rèn)每隔2小時(shí)將數(shù)據(jù)壓縮成一個(gè) block,持久化到硬盤中,樣本的數(shù)量越多,Prometheus占用的內(nèi)存就越高,因此在實(shí)踐中,一般不建議用區(qū)分度(cardinality)太高的標(biāo)簽,比如:用戶IP,ID,URL地址等等,否則結(jié)果會(huì)造成時(shí)間序列數(shù)以指數(shù)級(jí)別增長(zhǎng)(label數(shù)量相乘)。

除了控制樣本數(shù)量和大小合理之外,還可以通過降低 storage.tsdb.min-block-duration 來(lái)加快數(shù)據(jù)落盤時(shí)間和增加 scrape interval 的值提高拉取間隔來(lái)控制 Prometheus 的占用內(nèi)存。

通過聲明配置文件中的 scrape_configs 來(lái)指定 Prometheus 在運(yùn)行時(shí)需要拉取指標(biāo)的目標(biāo),目標(biāo)實(shí)例需要實(shí)現(xiàn)一個(gè)可以被 Prometheus 進(jìn)行輪詢的端點(diǎn),而要實(shí)現(xiàn)一個(gè)這樣的接口,可以用來(lái)給 Prometheus 提供監(jiān)控樣本數(shù)據(jù)的獨(dú)立程序一般被稱作為 Exporter,比如用來(lái)拉取操作系統(tǒng)指標(biāo)的 Node Exporter,它會(huì)從操作系統(tǒng)上收集硬件指標(biāo),供 Prometheus 來(lái)拉取。在開發(fā)環(huán)境,往往只需要部署一個(gè) Prometheus 實(shí)例便可以滿足數(shù)十萬(wàn)指標(biāo)的收集。但在生產(chǎn)環(huán)境中,應(yīng)用和服務(wù)實(shí)例數(shù)量眾多,只部署一個(gè) Prometheus 實(shí)例通常是不夠的,比較好的做法是部署多個(gè)Prometheus實(shí)例,每個(gè)實(shí)例通過分區(qū)只拉取一部分指標(biāo),例如Prometheus Relabel配置中的hashmod功能,可以對(duì)拉取目標(biāo)的地址進(jìn)行hashmod,再將結(jié)果匹配自身ID的目標(biāo)保留:
relabel_configs:- source_labels: [__address__] modulus: 3 target_label: __tmp_hash action: hashmod- source_labels: [__tmp_hash] regex: $(PROM_ID) action: keep或者說(shuō),我們想讓每個(gè) Prometheus 拉取一個(gè)集群的指標(biāo),一樣可以用 Relabel 來(lái)完成:
relabel_configs:- source_labels: ["__meta_consul_dc"] regex: "dc1" action: keep現(xiàn)在每個(gè) Prometheus 都有各自的數(shù)據(jù)了,那么怎么把他們關(guān)聯(lián)起來(lái),建立一個(gè)全局的視圖呢?官方提供了一個(gè)做法:聯(lián)邦集群(federation),即把 Prometheuse Server 按照樹狀結(jié)構(gòu)進(jìn)行分層,根節(jié)點(diǎn)方向的 Prometheus 將查詢?nèi)~子節(jié)點(diǎn)的 Prometheus 實(shí)例,再將指標(biāo)聚合返回。

不過顯然易見的時(shí),使用聯(lián)邦集群依然不能解決問題,首先單點(diǎn)問題依然存在,根節(jié)點(diǎn)掛了的話查詢將會(huì)變得不可用,如果配置多個(gè)父節(jié)點(diǎn)的話又會(huì)造成數(shù)據(jù)冗余和抓取時(shí)機(jī)導(dǎo)致數(shù)據(jù)不一致等問題,而且葉子節(jié)點(diǎn)目標(biāo)數(shù)量太多時(shí),更加會(huì)容易使父節(jié)點(diǎn)壓力增大以至打滿宕機(jī),除此之外規(guī)則配置管理也是個(gè)大麻煩。還好社區(qū)出現(xiàn)了一個(gè) Prometheus 的集群解決方案:Thanos,它提供了全局查詢視圖,可以從多臺(tái)Prometheus查詢和聚合數(shù)據(jù),因?yàn)樗羞@些數(shù)據(jù)均可以從單個(gè)端點(diǎn)獲取。

  1. Querier 收到一個(gè)請(qǐng)求時(shí),它會(huì)向相關(guān)的 Sidecar 發(fā)送請(qǐng)求,并從他們的 Prometheus 服務(wù)器獲取時(shí)間序列數(shù)據(jù)。
  2. 它將這些響應(yīng)的數(shù)據(jù)聚合在一起,并對(duì)它們執(zhí)行 PromQL 查詢。它可以聚合不相交的數(shù)據(jù)也可以針對(duì) Prometheus 的高可用組進(jìn)行數(shù)據(jù)去重。
再來(lái)說(shuō)到存儲(chǔ),Prometheus 查詢的高可用可以通過水平擴(kuò)展 統(tǒng)一查詢視圖的方式解決,那么存儲(chǔ)的高可用要怎么解決呢?在 Prometheus 的設(shè)計(jì)中,數(shù)據(jù)是以本地存儲(chǔ)的方式進(jìn)行持久化的,雖然本地持久化方便,當(dāng)也會(huì)帶來(lái)一些麻煩,比如節(jié)點(diǎn)掛了或者 Prometheus 被調(diào)度到其他節(jié)點(diǎn)上,就會(huì)意味著原節(jié)點(diǎn)上的監(jiān)控?cái)?shù)據(jù)在查詢接口中丟失,本地存儲(chǔ)導(dǎo)致了 Prometheus 無(wú)法彈性擴(kuò)展,為此 Prometheus 提供了 Remote Read 和 Remote Write 功能,支持把 Prometheus 的時(shí)間序列遠(yuǎn)程寫入到遠(yuǎn)端存儲(chǔ)中,查詢時(shí)可以從遠(yuǎn)端存儲(chǔ)中讀取數(shù)據(jù)。

其中一個(gè)例子中就是M3DB,M3DB是一個(gè)分布式的時(shí)間序列數(shù)據(jù)庫(kù),它提供了Prometheus的遠(yuǎn)程讀寫接口,當(dāng)一個(gè)時(shí)間序列寫入到M3DB集群后會(huì)按照分片(Shard)和復(fù)制(Replication Factor)參數(shù)把數(shù)據(jù)復(fù)制到集群的其他節(jié)點(diǎn)上,實(shí)現(xiàn)存儲(chǔ)高可用。除了M3DB外,Prometheus目前還支持InfluxDB、OpenTSDB等作為遠(yuǎn)程寫的端點(diǎn)。解決了 Prometheus 的高可用,再來(lái)關(guān)注一下 Prometheus 如何對(duì)監(jiān)控目標(biāo)進(jìn)行采集,當(dāng)監(jiān)控節(jié)點(diǎn)數(shù)量較小時(shí),可以通過 Static Config 將目標(biāo)主機(jī)列表寫到 Prometheus 的拉取配置中,但如果目標(biāo)節(jié)點(diǎn)一多的話這種方式管理便有很大問題了,而且在生產(chǎn)環(huán)境中,服務(wù)實(shí)例的IP通常不是固定的,這時(shí)候用靜態(tài)配置就沒辦法對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行有效管理,這時(shí)候 Prometheus 提供的服務(wù)發(fā)現(xiàn)功能便可以有效解決監(jiān)控節(jié)點(diǎn)狀態(tài)變化的問題,在這種模式下,Prometheus 會(huì)到注冊(cè)中心監(jiān)聽查詢節(jié)點(diǎn)列表,定期對(duì)節(jié)點(diǎn)進(jìn)行指標(biāo)的拉取。如果對(duì)服務(wù)發(fā)現(xiàn)有更靈活的需求,Prometheus 也支持基于文件的服務(wù)發(fā)現(xiàn)功能,這時(shí)候我們可以從多個(gè)注冊(cè)中心中獲取節(jié)點(diǎn)列表,再通過自己的需求進(jìn)行過濾,最終寫入到文件,這時(shí)候 Prometheus 檢測(cè)到文件變化后便能動(dòng)態(tài)地替換監(jiān)控節(jié)點(diǎn),再去拉取目標(biāo)了。前面看到 Prometheus 都是以拉模式定期對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行抓取的,那假如有一種情況是一些任務(wù)節(jié)點(diǎn)還沒來(lái)得及被拉取就運(yùn)行完退出了,這時(shí)候監(jiān)控?cái)?shù)據(jù)就會(huì)丟失,為了應(yīng)對(duì)這種情況,Prometheus 提供了一個(gè)工具:Pushgateway,用來(lái)接收來(lái)自服務(wù)的主動(dòng)上報(bào),它適用于那些短暫存活的批量任務(wù)來(lái)將指標(biāo)推送并暫存到自身上,借著再由Prometheus 來(lái)拉取自身,以防止指標(biāo)還沒來(lái)得及被 Prometheus 拉取便退出。除此以外 Pushgateway 也適用于在 Prometheus 與應(yīng)用節(jié)點(diǎn)運(yùn)行在異構(gòu)網(wǎng)絡(luò)或被防火墻隔絕時(shí),無(wú)法主動(dòng)拉取節(jié)點(diǎn)的問題,在這種情況下應(yīng)用節(jié)點(diǎn)可以通過使用Pushgateway的域名將指標(biāo)推送到Pushgateway實(shí)例上,Prometheus就可以拉取同網(wǎng)絡(luò)下的Pushgateway 節(jié)點(diǎn)了,另外配置拉取 Pushgateway 時(shí)要注意一個(gè)問題:Prometheus 會(huì)把每個(gè)指標(biāo)賦予 job 和instance標(biāo)簽,當(dāng)Prometheus拉取Pushgateway時(shí),job和instance則可能分別是Pushgateway和Pushgateway主機(jī)的ip,當(dāng)pushgateway上報(bào)的指標(biāo)中也包含job和instance標(biāo)簽時(shí),Prometheus會(huì)把沖突的標(biāo)簽重命名為exported_job和exported_instance,如果需要覆蓋這兩個(gè)標(biāo)簽的話,需要在Prometheus中配置honor_labels: true。Pushgateway可以替代拉模型來(lái)作為指標(biāo)的收集方案,但在這種模式下會(huì)帶來(lái)許多負(fù)面影響:

Pushgateway 被設(shè)計(jì)為一個(gè)監(jiān)控指標(biāo)的緩存,這意味著它不會(huì)主動(dòng)過期服務(wù)上報(bào)的指標(biāo),這種情況在服務(wù)一直運(yùn)行的時(shí)候不會(huì)有問題,但當(dāng)服務(wù)被重新調(diào)度或銷毀時(shí),Pushgateway 依然會(huì)保留著之前節(jié)點(diǎn)上報(bào)的指標(biāo)。而且,假如多個(gè) Pushgateway 運(yùn)行在LB下,會(huì)造成一個(gè)監(jiān)控指標(biāo)有可能出現(xiàn)在多個(gè) Pushgateway 的實(shí)例上,造成數(shù)據(jù)重復(fù)多份,需要在代理層加入一致性哈希路由來(lái)解決。在拉模式下,Prometheus可以更容易的查看監(jiān)控目標(biāo)實(shí)例的健康狀態(tài),并且可以快速定位故障,但在推模式下,由于不會(huì)對(duì)客戶端進(jìn)行主動(dòng)探測(cè),因此對(duì)目標(biāo)實(shí)例的健康狀態(tài)也變得一無(wú)所知。最后再來(lái)聊一下Alertmanager,簡(jiǎn)單說(shuō) Alertmanager 是與 Prometheus 分離的告警組件,主要接收 Promethues 發(fā)送過來(lái)的告警事件,然后對(duì)告警進(jìn)行去重,分組,抑制和發(fā)送,在實(shí)際中可以搭配 webhook 把告警通知發(fā)送到企業(yè)微信或釘釘上,其架構(gòu)圖如下:

最后的最后再來(lái)嘗試一下用 Kubernetes 來(lái)搭建一套 Prometheus 的監(jiān)控系統(tǒng),關(guān)于Kubernetes 也是摸爬滾打折騰了一周才清楚怎么使用的,雖然 Promehteus 已經(jīng)有官方的 Operator 了,但是為了學(xué)習(xí)都用手動(dòng)編寫 yaml 文件,整個(gè)完成下來(lái)發(fā)現(xiàn)還是挺方便的,而且只需要用幾個(gè)實(shí)例就可以完成收集監(jiān)控200 服務(wù)數(shù)千個(gè)實(shí)例的業(yè)務(wù)指標(biāo)。
為了部署 Prometheus 實(shí)例,需要聲明 Prometheus 的 StatefulSet,Pod 中包括了三個(gè)容器,分別是 Prometheus 以及綁定的 Thanos Sidecar,最后再加入一個(gè) watch 容器,來(lái)監(jiān)聽 prometheus 配置文件的變化,當(dāng)修改 ConfigMap 時(shí)就可以自動(dòng)調(diào)用Prometheus 的 Reload API 完成配置加載,這里按照之前提到的數(shù)據(jù)分區(qū)的方式,在Prometheus 啟動(dòng)前加入一個(gè)環(huán)境變量 PROM_ID,作為 Relabel 時(shí) hashmod 的標(biāo)識(shí),而 POD_NAME 用作 Thanos Sidecar 給 Prometheus 指定的 external_labels.replica 來(lái)使用:

apiVersion: apps/v1kind: StatefulSetmetadata: name: prometheus labels: app: prometheusspec: serviceName: "prometheus" updateStrategy: type: RollingUpdate replicas: 3 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus thanos-store-api: "true" spec: serviceAccountName: prometheus volumes: - name: prometheus-config configMap: name: prometheus-config - name: prometheus-data hostPath: path: /data/prometheus - name: prometheus-config-shared emptyDir: {} containers: - name: prometheus image: prom/prometheus:v2.11.1 args: - --config.file=/etc/prometheus-shared/prometheus.yml - --web.enable-lifecycle - --storage.tsdb.path=/data/prometheus - --storage.tsdb.retention=2w - --storage.tsdb.min-block-duration=2h - --storage.tsdb.max-block-duration=2h - --web.enable-admin-api ports: - name: http containerPort: 9090 volumeMounts: - name: prometheus-config-shared mountPath: /etc/prometheus-shared - name: prometheus-data mountPath: /data/prometheus livenessProbe: httpGet: path: /-/healthy port: http - name: watch image: watch args: ["-v", "-t", "-p=/etc/prometheus-shared", "curl", "-X", "POST", "--fail", "-o", "-", "-sS", "http://localhost:9090/-/reload"] volumeMounts: - name: prometheus-config-shared mountPath: /etc/prometheus-shared - name: thanos image: improbable/thanos:v0.6.0 command: ["/bin/sh", "-c"] args: - PROM_ID=`echo $POD_NAME| rev | cut -d '-' -f1` /bin/thanos sidecar --prometheus.url=http://localhost:9090 --reloader.config-file=/etc/prometheus/prometheus.yml.tmpl --reloader.config-envsubst-file=/etc/prometheus-shared/prometheus.yml env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name ports: - name: http-sidecar containerPort: 10902 - name: grpc containerPort: 10901 volumeMounts: - name: prometheus-config mountPath: /etc/prometheus - name: prometheus-config-shared mountPath: /etc/prometheus-shared因?yàn)?Prometheus 默認(rèn)是沒辦法訪問 Kubernetes 中的集群資源的,因此需要為之分配RBAC:

apiVersion: v1kind: ServiceAccountmetadata: name: prometheus---kind: ClusterRoleapiVersion: rbac.authorization.k8s.io/v1metadata: name: prometheus namespace: default labels: app: prometheusrules:- apiGroups: [""] resources: ["services", "pods", "nodes", "nodes/proxy", "endpoints"] verbs: ["get", "list", "watch"]- apiGroups: [""] resources: ["configmaps"] verbs: ["create"]- apiGroups: [""] resources: ["configmaps"] resourceNames: ["prometheus-config"] verbs: ["get", "update", "delete"]- nonResourceURLs: ["/metrics"] verbs: ["get"]---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata: name: prometheus namespace: default labels: app: prometheussubjects:- kind: ServiceAccount name: prometheus namespace: defaultroleRef: kind: ClusterRole name: prometheus apiGroup: ""接著 Thanos Querier 的部署比較簡(jiǎn)單,需要在啟動(dòng)時(shí)指定 store 的參數(shù)為dnssrv thanos-store-gateway.default.svc來(lái)發(fā)現(xiàn)Sidecar:

apiVersion: apps/v1kind: Deploymentmetadata: labels: app: thanos-query name: thanos-queryspec: replicas: 2 selector: matchLabels: app: thanos-query minReadySeconds: 5 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: thanos-query spec: containers: - args: - query - --log.level=debug - --query.timeout=2m - --query.max-concurrent=20 - --query.replica-label=replica - --query.auto-downsampling - --store=dnssrv thanos-store-gateway.default.svc - --store.sd-dns-interval=30s image: improbable/thanos:v0.6.0 name: thanos-query ports: - containerPort: 10902 name: http - containerPort: 10901 name: grpc livenessProbe: httpGet: path: /-/healthy port: http---apiVersion: v1kind: Servicemetadata: labels: app: thanos-query name: thanos-queryspec: type: LoadBalancer ports: - name: http port: 10901 targetPort: http selector: app: thanos-query---apiVersion: v1kind: Servicemetadata: labels: thanos-store-api: "true" name: thanos-store-gatewayspec: type: ClusterIP clusterIP: None ports: - name: grpc port: 10901 targetPort: grpc selector: thanos-store-api: "true"部署Thanos Ruler:apiVersion: apps/v1kind: Deploymentmetadata: labels: app: thanos-rule name: thanos-rulespec: replicas: 1 selector: matchLabels: app: thanos-rule template: metadata: labels: labels: app: thanos-rule spec: containers: - name: thanos-rule image: improbable/thanos:v0.6.0 args: - rule - --web.route-prefix=/rule - --web.external-prefix=/rule - --log.level=debug - --eval-interval=15s - --rule-file=/etc/rules/thanos-rule.yml - --query=dnssrv thanos-query.default.svc - --alertmanagers.url=dns http://alertmanager.default ports: - containerPort: 10902 name: http volumeMounts: - name: thanos-rule-config mountPath: /etc/rules volumes: - name: thanos-rule-config configMap: name: thanos-rule-config部署 Pushgateway:

apiVersion: apps/v1kind: Deploymentmetadata: labels: app: pushgateway name: pushgatewayspec: replicas: 15 selector: matchLabels: app: pushgateway template: metadata: labels: app: pushgateway spec: containers: - image: prom/pushgateway:v1.0.0 name: pushgateway ports: - containerPort: 9091 name: http resources: limits: memory: 1Gi requests: memory: 512Mi---apiVersion: v1kind: Servicemetadata: labels: app: pushgateway name: pushgatewayspec: type: LoadBalancer ports: - name: http port: 9091 targetPort: http selector: app: pushgateway部署 Alertmanager:

apiVersion: apps/v1kind: Deploymentmetadata: name: alertmanagerspec: replicas: 3 selector: matchLabels: app: alertmanager template: metadata: name: alertmanager labels: app: alertmanager spec: containers: - name: alertmanager image: prom/alertmanager:latest args: - --web.route-prefix=/alertmanager - --config.file=/etc/alertmanager/config.yml - --storage.path=/alertmanager - --cluster.listen-address=0.0.0.0:8001 - --cluster.peer=alertmanager-peers.default:8001 ports: - name: alertmanager containerPort: 9093 volumeMounts: - name: alertmanager-config mountPath: /etc/alertmanager - name: alertmanager mountPath: /alertmanager volumes: - name: alertmanager-config configMap: name: alertmanager-config - name: alertmanager emptyDir: {}---apiVersion: v1kind: Servicemetadata: labels: name: alertmanager-peers name: alertmanager-peersspec: type: ClusterIP clusterIP: None selector: app: alertmanager ports: - name: alertmanager protocol: TCP port: 9093 targetPort: 9093最后部署一下 ingress,大功告成:

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: pushgateway-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri" nginx.ingress.kubernetes.io/ssl-redirect: "false"spec: rules: - host: $(DOMAIN) http: paths: - backend: serviceName: pushgateway servicePort: 9091 path: /metrics---apiVersion: extensions/v1beta1kind: Ingressmetadata: name: prometheus-ingress annotations: kubernetes.io/ingress.class: "nginx"spec: rules: - host: $(DOMAIN) http: paths: - backend: serviceName: thanos-query servicePort: 10901 path: / - backend: serviceName: alertmanager servicePort: 9093 path: /alertmanager - backend: serviceName: thanos-rule servicePort: 10092 path: /rule - backend: serviceName: grafana servicePort: 3000 path: /grafana訪問 Prometheus 地址,監(jiān)控節(jié)點(diǎn)狀態(tài)正常:

來(lái)源:https://zhuanlan.zhihu.com/p/101184971

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

北京2024年8月21日 /美通社/ -- 在寧波市軌道交通6號(hào)線一期、7號(hào)線、8號(hào)線一期工程項(xiàng)目中,浪潮信息元腦八路服務(wù)器TS860G7成功中標(biāo)該項(xiàng)目中央綜合監(jiān)控系統(tǒng)算力平臺(tái),將為寧波地鐵安全、穩(wěn)定、高效運(yùn)營(yíng)提供關(guān)鍵保...

關(guān)鍵字: 軌道交通 監(jiān)控系統(tǒng) 測(cè)試 內(nèi)存

為增進(jìn)大家對(duì)監(jiān)控系統(tǒng)的認(rèn)識(shí),本文將對(duì)監(jiān)控系統(tǒng)的分類、監(jiān)控系統(tǒng)的一些優(yōu)勢(shì)予以介紹。

關(guān)鍵字: 監(jiān)控系統(tǒng) 指數(shù) 無(wú)線監(jiān)控系統(tǒng)

為增進(jìn)大家對(duì)監(jiān)控系統(tǒng)的認(rèn)識(shí),本文將對(duì)監(jiān)控系統(tǒng)的產(chǎn)生背景、監(jiān)控系統(tǒng)對(duì)設(shè)備的要求予以介紹。

關(guān)鍵字: 監(jiān)控系統(tǒng) 指數(shù) 紅外攝像

為增進(jìn)大家對(duì)監(jiān)控設(shè)備的認(rèn)識(shí),本文將對(duì)監(jiān)控設(shè)備以及忘記監(jiān)控設(shè)備登錄密碼的解決方法予以介紹。

關(guān)鍵字: 監(jiān)控設(shè)備 指數(shù) 監(jiān)控系統(tǒng)

電動(dòng)汽車充電站監(jiān)控系統(tǒng)的設(shè)計(jì)是為了確保充電站的安全運(yùn)行和高效管理。隨著電動(dòng)汽車的普及和充電樁網(wǎng)絡(luò)的擴(kuò)大,充電站的數(shù)量和規(guī)模不斷增加,因此需要一種可靠的監(jiān)控系統(tǒng)來(lái)實(shí)時(shí)監(jiān)測(cè)充電設(shè)備的運(yùn)行狀態(tài)、充電樁的使用情況以及安全問題。下...

關(guān)鍵字: 電動(dòng)汽車 充電站 監(jiān)控系統(tǒng)

隨著科技的發(fā)展,汽車已經(jīng)成為人們?nèi)粘3鲂械闹饕煌üぞ摺H欢?,汽車盜竊案件屢見不鮮,給車主帶來(lái)巨大的經(jīng)濟(jì)損失。為了提高汽車的安全性能,汽車防盜監(jiān)控系統(tǒng)應(yīng)運(yùn)而生。本文將基于應(yīng)用技術(shù),探討如何實(shí)現(xiàn)汽車防盜監(jiān)控系統(tǒng)的設(shè)計(jì)。

關(guān)鍵字: 汽車 交通工具 監(jiān)控系統(tǒng)

摘要:論述了固體聲監(jiān)控系統(tǒng)在磨削工件和砂輪修整中的作用。加工時(shí),通過分析固體聲曲線,可以了解磨削狀態(tài),有效提高產(chǎn)品質(zhì)量:在砂輪修整時(shí),觀察砂輪修整的固體聲曲線的接觸點(diǎn),可以優(yōu)化金剛滾輪的損耗比參數(shù),減少砂輪修整報(bào)警故障。

關(guān)鍵字: 損耗比 固體聲 監(jiān)控系統(tǒng)

隨著當(dāng)代科技的日益發(fā)展,數(shù)量巨大的各類設(shè)備的電源維護(hù)管理需要投入大量的人力、物力,像通信/ 電力設(shè)施所處環(huán)境越來(lái)越復(fù)雜,人煙稀少、交通不便、危險(xiǎn)度高等都增大了維護(hù)的難度和費(fèi)用。這對(duì)電源設(shè)備的監(jiān)控管理提出了更高的要求。電源...

關(guān)鍵字: Cortex-M3 監(jiān)控系統(tǒng)

摘要:基于一體化管控平臺(tái)的泵站監(jiān)控系統(tǒng)(IMC)具備高度的可靠性、開放性和集成性,對(duì)當(dāng)今的大型泵站監(jiān)控具有重大作用?,F(xiàn)詳細(xì)介紹基于一體化管控平臺(tái)的泵站監(jiān)控系統(tǒng)的設(shè)計(jì)思路,包括系統(tǒng)的組成、網(wǎng)絡(luò)結(jié)構(gòu),并依托某配水工程項(xiàng)目詳細(xì)...

關(guān)鍵字: 監(jiān)控系統(tǒng) 一體化管控平臺(tái) 網(wǎng)絡(luò)結(jié)構(gòu)

天士力制藥集團(tuán)秉承中藥現(xiàn)代化的道路,率先實(shí)現(xiàn)中藥研發(fā)、種植、提取、生產(chǎn)、銷售等全產(chǎn)業(yè)鏈的標(biāo)準(zhǔn)化。通過智能化改造,開發(fā)了5代快速滴丸生產(chǎn)線、智能化中藥提取工藝,建立了現(xiàn)代中藥工業(yè)標(biāo)準(zhǔn)化、數(shù)字化、智能化的現(xiàn)代中藥產(chǎn)業(yè)體系。

關(guān)鍵字: 人工智能 監(jiān)控系統(tǒng) 信息化管理
關(guān)閉