乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      開源監(jiān)控利器Prometheus初探

       二十八畝田123 2018-08-12

      開源監(jiān)控利器Prometheus初探

      開源監(jiān)控利器Prometheus初探

      轉(zhuǎn)載本文需注明出處:微信公眾號EAWorld,違者必究。

      kubernetes作為當下最炙手可熱的容器管理平臺,在給應(yīng)用部署運維帶來便捷的同時,也給應(yīng)用及性能監(jiān)控帶來了新的挑戰(zhàn)。今天給大家分享一款十分火熱的開源監(jiān)控工具Prometheus,讓我們一起來看它是如何兼顧傳統(tǒng)的應(yīng)用監(jiān)控、主機性能監(jiān)控和Kubernetes監(jiān)控的。

      一、Prometheus簡介

      什么是prometheus?

      Prometheus是一個開源的系統(tǒng)監(jiān)控及告警工具,最初建設(shè)在SoundCloud。從2012 prometheus推出以來,許多公司都采用它搭建監(jiān)控及告警系統(tǒng)。同時,項目擁有非?;钴S的開發(fā)者和用戶社區(qū)。

      它現(xiàn)在是一個獨立于任何公司的開源項目,為了強調(diào)這一點并明確項目的管理結(jié)構(gòu),在2016年prometheus加入CNCF基金會成為繼kubernetes之后的第二個托管項目。

      Prometheus有什么特點?

      • 多維的數(shù)據(jù)模型(基于時間序列的k/v鍵值對)。
      • 靈活的查詢及聚合語句(PromQL)。
      • 不依賴分布式存儲,節(jié)點自治。
      • 基于HTTP的pull模式采集時間序列數(shù)據(jù)。
      • 可以使用pushgateway(prometheus的可選中間件)實現(xiàn)push模式。
      • 可以使用動態(tài)服務(wù)發(fā)現(xiàn)或靜態(tài)配置采集的目標機器。
      • 支持多種圖形及儀表盤。

      Prometheus適用場景。

      在選擇prometheus作為監(jiān)控工具前,要明確它的適用范圍,以及不適用的場景。

      Prometheus在記錄純數(shù)值時間序列方面表現(xiàn)非常好。它既適用于以服務(wù)器為中心的監(jiān)控,也適用于高動態(tài)的面向服務(wù)架構(gòu)的監(jiān)控。在微服務(wù)的監(jiān)控上,prometheus對多維度數(shù)據(jù)采集及查詢的支持也是特殊的優(yōu)勢。

      Prometheus更強調(diào)可靠性,即使在故障的情況下也能查看系統(tǒng)的統(tǒng)計信息。權(quán)衡利弊,以可能丟失少量數(shù)據(jù)為代價確保整個系統(tǒng)的可用性。因此,它不適用于對數(shù)據(jù)準確率要求100%的系統(tǒng),比如實時計費系統(tǒng)(涉及到錢)。

      二、Prometheus架構(gòu)圖

      開源監(jiān)控利器Prometheus初探

      上圖是Prometheus的架構(gòu)圖,從圖中可以看出Prometheus的架構(gòu)設(shè)計理念,中心化的數(shù)據(jù)采集,分析。

      1. Prometheus Server:Prometheus的核心,根據(jù)配置完成數(shù)據(jù)采集, 服務(wù)發(fā)現(xiàn)以及數(shù)據(jù)存儲。
      2. Pushgateway:為應(yīng)對部分push場景提供的插件,監(jiān)控數(shù)據(jù)先推送到pushgateway上,然后再由server端采集pull。(若server采集間隔期間,pushgateway上的數(shù)據(jù)沒有變化,server將采集2次相同數(shù)據(jù),僅時間戳不同)
      3. Prometheus targets:探針(exporter)提供采集接口,或應(yīng)用本身提供的支持prometheus數(shù)據(jù)模型的采集接口。
      4. Service discovery:支持根據(jù)配置file_sd監(jiān)控本地配置文件的方式實現(xiàn)服務(wù)發(fā)現(xiàn)(需配合其他工具修改本地配置文件),同時支持配置監(jiān)聽kubernetes的API來動態(tài)發(fā)現(xiàn)服務(wù)。
      5. Alertmanager:prometheus告警插件,支持發(fā)送告警到郵件,Pagerduty,HipChat等。

      三、Prometheus架構(gòu)詳解

      接下來,讓我們一起了解prometheus架構(gòu)中各個組件是如何協(xié)同工作來完成監(jiān)控任務(wù)。

      1)Prometheus server and targets

      開源監(jiān)控利器Prometheus初探

      利用prometheus官方或第三方提供的探針,基本可以完成對所有常用中間件或第三方工具的監(jiān)控。

      開源監(jiān)控利器Prometheus初探

      之前講到prometheus是中心化的數(shù)據(jù)采集分析,那這里的探針(exporter)是做什么工作呢?

      上圖中硬件及系統(tǒng)監(jiān)控探針node exporter通過getMemInfo()方法獲取機器的內(nèi)存信息,然后將機器總內(nèi)存數(shù)據(jù)對應(yīng)上指標node_memory_MemTotal。Jenkins探針Jenkins Exporter通過訪問jenkins的api獲取到j(luò)enkins的job數(shù)量并對應(yīng)指標jenkins_job_count_value。

      探針的作用就是通過調(diào)用應(yīng)用或系統(tǒng)接口的方式采集監(jiān)控數(shù)據(jù)并對應(yīng)成指標返回給prometheus server。(探針不一定要和監(jiān)控的應(yīng)用部署在一臺機器)

      總的來說prometheus數(shù)據(jù)采集流程就是,在prometheus server中配置探針暴露的端口地址以及采集的間隔時間,prometheus按配置的時間間隔通過http的方式去訪問探針,這時探針通過調(diào)用接口的方式獲取監(jiān)控數(shù)據(jù)并對應(yīng)指標返回給prometheus server進行存儲。(若探針在prometheus配置的采集間隔時間內(nèi)沒有完成采集數(shù)據(jù),這部分數(shù)據(jù)就會丟失)

      2)Prometheus alerting

      開源監(jiān)控利器Prometheus初探

      Prometheus serve又是如何根據(jù)采集到的監(jiān)控數(shù)據(jù)配和alertmanager完成告警呢?

      舉一個常見的告警示例,在主機可用內(nèi)存低于總內(nèi)存的20%時發(fā)送告警。我們可以根據(jù)prometheus server采集的主機性能指標配置這樣一條規(guī)則node_memory_Active/node_memory_MemTotal < 0.2,prometheus="">

      Prometheus server在這里主要負責(zé)根據(jù)告警規(guī)則分析數(shù)據(jù)并發(fā)送告警信息到alertmanager,alertmanager則是根據(jù)配置處理告警信息并發(fā)送。

      Alertmanager又有哪些處理告警信息的方式呢?

      • 分組:將監(jiān)控目標相同的告警進行分組。如發(fā)生停電,收到的應(yīng)該是單一信息,信息中包含所有受影響宕機的機器,而不是針對每臺宕機的機器都發(fā)送一條告警信息。
      • 抑制:抑制是指當告警發(fā)出后,停止發(fā)送由此告警引發(fā)的其他告警的機制。如機器網(wǎng)絡(luò)不可達,就不再發(fā)送因網(wǎng)絡(luò)問題造成的其他告警。
      • 沉默:根據(jù)定義的規(guī)則過濾告警信息,匹配的告警信息不會發(fā)送。

      3)Service discovery

      開源監(jiān)控利器Prometheus初探

      Prometheus支持多種服務(wù)發(fā)現(xiàn)的方式,這里主要介紹架構(gòu)圖中提到的file_sd的方式。

      之前提到Prometheus server的數(shù)據(jù)采集配置都是通過配置文件,那服務(wù)發(fā)現(xiàn)該怎么做?總不能每次要添加采集目標還要修改配置文件并重啟服務(wù)吧。

      這里使用file_sd_configs指定定義了采集目標的文件。Prometheus server會動態(tài)檢測該配置文件的變化來更新采集目標信息?,F(xiàn)在只要能更新這個配置文件就能動態(tài)的修改采集目標的配置了。

      這里采用consul+consul template的方式。在新增或減少探針(增減采集目標)時在consul更新k/v,如新增一個探針,添加如下記錄prometheus/linux/node/10.15.15.132=10.15.15.132:9100,然后配置consul template監(jiān)控consul的prometheus/linux/node/目錄下k/v的變化,根據(jù)k/v的值以及提前定義的discovery.ctmpl模板動態(tài)生成Prometheus server的配置文件discovery.yml。

      4)Web UI

      開源監(jiān)控利器Prometheus初探

      至此,已經(jīng)完成了數(shù)據(jù)采集和告警配置,是時候通過頁面展示一波成果了。

      Grafana已經(jīng)對prometheus做了很好的支撐,在grafana中添加prometheus數(shù)據(jù)源,然后就可以使用PromQL查詢語句結(jié)合grafana強大的圖形化能力來配置我們的性能監(jiān)控頁面了。

      5)聯(lián)邦模式

      開源監(jiān)控利器Prometheus初探

      中心化的數(shù)據(jù)采集存儲,分析,而且還不支持集群模式。帶來的性能問題顯而易見。

      Prometheus給出了一種聯(lián)邦的部署方式,就是prometheus server可以從其他的prometheus server采集數(shù)據(jù)??赡苡腥藭枺@樣最后的數(shù)據(jù)不是還是要全部匯集到prometheus的global節(jié)點嗎?

      并不是這樣的,我們可以在shard節(jié)點就完成分析處理,然后global節(jié)點直接采集分析處理過的數(shù)據(jù)進行展示。比如在shard節(jié)點定義指標可用內(nèi)存占比job:memory_available:proportion的結(jié)果為(node_memory_MemFree + node_memory_Buffers + node_memory_Cached)/node_memory_MemTotal,這樣在shard節(jié)點就可以完成聚合操作,然后global節(jié)點直接采集處理過的數(shù)據(jù)就可以了,而不用采集零散的如node_memory_MemFree這類指標。

      四、Prometheus監(jiān)控kubernetes

      開源監(jiān)控利器Prometheus初探

      Kubernetes官方之前推薦了一種性能監(jiān)控的解決方案,heapster+influxdb,heapster根據(jù)定義的間隔時間從cAdvisor中獲取的關(guān)于pod及container的性能數(shù)據(jù)并存儲到時間序列數(shù)據(jù)庫influxdb。也可以使用grafana配置influxdb的數(shù)據(jù)源并配置dashboard來做展現(xiàn)。而且kubernetes中pod的自動伸縮的功能(Horizontal Pod Autoscaling)也是基于heapster,默認支持根據(jù)cpu的指標做動態(tài)伸縮,也可以自定義擴展使用其他指標。

      但是heapster無法做kubernetes下應(yīng)用的監(jiān)控。

      現(xiàn)在,heapster作為kubernetes下的開源監(jiān)控解決方案已經(jīng)被其棄用(https://github.com/kubernetes/heapster),prometheus成為kubernetes官方推薦的監(jiān)控解決方案。

      Prometheus同樣通過kubernetes的cAdvisor接口(/api/v1/nodes/${1}/proxy/metrics/cadvisor)獲取pod和container的性能監(jiān)控數(shù)據(jù),同時可以使用kubernetes的kube-state-metrics插件來獲取集群上Pod, DaemonSet, Deployment, Job, CronJob等各種資源對象的狀態(tài),這反應(yīng)了使用這些資源的應(yīng)用的狀態(tài)。同時通過kubernetes api獲取node,service,pod,endpoints,ingress等服務(wù)的信息,然后通過匹配注解中的值來獲取采集目標。

      開源監(jiān)控利器Prometheus初探

      上面提到了Prometheus可以通過kubernetes的api接口實現(xiàn)服務(wù)發(fā)現(xiàn),并將匹配定義了annotation參數(shù)的pod,service等配置成采集目標。那現(xiàn)在要解決的問題就是探針到應(yīng)用部署配置問題了。

      這里我們使用了kubernetes的pod部署的sidecar模式,單個應(yīng)用pod部署2個容器,利用單個pod中僅共享網(wǎng)絡(luò)的namespace的隔離特性,探針與應(yīng)用一同運行,并可以使用localhost直接訪問應(yīng)用的端口,而在pod的注解中僅暴露探針的端口(prometheus.io/port: '9104')即可。Prometheus server根據(jù)配置匹配定義注解prometheus.io/scrape: 'true'的pod,并將pod ip和注解中定義的端口(prometheus.io/port: '9104')和路徑(prometheus.io/path: '/metrics')拼接成采集目標http://10.244.3.123:9104/metrics。通過這種方式就可以完成動態(tài)添加需要采集的應(yīng)用。

      開源監(jiān)控利器Prometheus初探

      關(guān)于作者:張子康,普元研發(fā)工程師,曾參與神華災(zāi)備云平臺、萬達DevOps平臺等項目。對云計算相關(guān)技術(shù)有濃厚的興趣,熟悉IaaS,k8s,docker等技術(shù),在DevOps項目中主要負責(zé)集成環(huán)境的搭建以及部署功能的底層實現(xiàn)。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多