Prometheus介紹及docker安裝方式


一、介紹

  Prometheus是主要基於Go編寫,最初在SoundCloud上構建的開源系統監視和警報工具包,它啟發於 Google 的 borgmon 監控系統,由工作在 SoundCloud 的 google 前員工在 2012 年創建,作為社區開源項目進行開發,並於2015年正式發布,Prometheus 於2016年加入了 Cloud Native Computing Foundation,這是繼Kubernetes之后的第二個托管項目,成為受歡迎度僅次於 Kubernetes 的項目。2017年底發布了基於全新存儲層的2.0版本,能更好地與容器平台、雲平台配合。Prometheus作為新一代的雲原生監控系統,目前已經有超過650+位貢獻者參與到Prometheus的研發工作上,並且超過120+項的第三方集成。

  Prometheus的特點如下:

  • 一個多維數據模型,包含度量標准名稱和鍵值對標識的時間序列數據
  • PromQL,一種靈活的查詢語言 
  • 不依賴分布式存儲,單個服務器節點是自主的。
  • 通過基於HTTP的pull方式采集時序數據
  • 可以通過中間網關進行時序列數據推送
  • 通過服務發現或者靜態配置來發現目標服務對象
  • 支持多種多樣的圖表和界面展示,比如Grafana等
  • 由於數據采集可能會有丟失,所以 Prometheus 不適用對采集數據要 100% 准確的情形。但如果用於記錄時間序列數據,Prometheus 具有很大的查詢優勢,此外,Prometheus 適用於微服務的體系架構。
  • 大多數Prometheus組件都是用Go編寫的,因此易於構建和部署為靜態二進制文件

  Prometheus 生態圈中包含了多個組件,其中許多組件是可選的:

  • Prometheus Server: 用於收集和存儲時間序列數據。
  • Client Library: 客戶端庫,為需要監控的服務生成相應的 metrics 並暴露給 Prometheus server。當 Prometheus server 來 pull 時,直接返回實時狀態的 metrics。
  • Push Gateway: 主要用於短期的 jobs。由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。為此,這類 jobs 可以直接向 Prometheus server 端推送它們的 metrics。這種方式主要用於服務層面的 metrics,對於機器層面的 metrices,需要使用 node exporter。
  • Exporters: 用於暴露已有的第三方服務的 metrics 給 Prometheus。
  • Alertmanager: 從 Prometheus server 端接收到 alerts 后,會進行去除重復數據,分組,並路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。

  Prometheus采集數據的方式:

  Prometheus的數據采集方式,Prometheus采集數據有pull和push兩種方式。pull方式是在客戶端(被監控機器)系統上先安裝各類已有的exproters(由社區組織或企業開發的監控客戶端插件),然后exproters會以守護進程的模式運行並且開始采集數據。exproter本身是一個http_server,可以對http請求作出響應返回數據(K/V metrics),prometheus服務端用pull的方式(http get)去訪問每個節點上exporter並采樣需要的數據,Pull是一種主動拉取的形式。

  push方式可以在任意地方安裝官方提供的pushgateway插件,不需要必須在服務器,它自己本身就是個服務器,相當於作為一個中介,首先由運維自行開發的各種腳本部署在客戶端,然后把監控采集到的數據組織成k/v的形式(metrics形式)發送給pushgateway,之后pushgateway再推送給prometheus,一般以http的post方式推送,push是一種被動接收的形式。pushgateway有兩個缺點:一是pushgateway會形成一個單點瓶頸,假如好多個腳本同時發送給一個pushgateway的進程,如果這個進程沒了,那么監控數據也沒了。二是pushgateway並不能對發送來的數據做智能的判斷,如果腳本采集的數據有問題,那么有問題的數據也會同樣發給pushgateway,pushgateway一樣會收取,然后發送給prometheus。

  Prometheus采集數據metrics的主要兩種類型,首先metrics不是一種具體的數據格式,它是一種對於度量計算單位的抽象。metrics的主要兩種類型是Gauge(儀表盤)和Counter(計數器),gauge表示瞬時變化,沒有規律的變化,側重於反應系統的當前狀態。因此這類指標的樣本數據可增可減。常見指標如:node_memory_MemFree(主機當前空閑的內存大小)、node_memory_MemAvailable(可用內存大小)都是Gauge類型的監控指標。counter類型的指標其工作方式和計數器一樣,只增不減(除非系統重置),常見的監控指標,如http_requests_total,node_cpu都是Counter類型的監控指標。 一般在定義Counter類型指標的名稱時推薦使用_total作為后綴。除了這兩種常用的還有Histogram(直方圖)和Summary(摘要)兩種。采集到的數據metrics以空格分開key/value的形式進行展示

二、安裝

  Prometheus安裝方式可以通過二進制文件安裝,也可以通過docker方式安裝,這里我依然采用docker方式進行安裝

  1.docker-hub搜索並下載鏡像prom/pometheus

  docker search Prometheus

  docker pull docker.io/prom/Prometheus

  2.下載鏡像grafana,grafana是一個開源的功能豐富的數據可視化平台,通常用於時序數據的可視化

  docker pull grafana/Grafana

  3.下載鏡像node-exporter,node-exporter用於機器系統數據收集

  docker pull prom/node-exporter

  4.分別創建並運行容器prometheus、grafana、node-exporter

  docker run --name myprometheus -p 9090:9090 -d prom/prometheus

  docker run --name mygrafana -p 3000:3000 -d grafana/grafana

  docker run --name mynode-exporter -p 9100:9100 -d prom/node-exporter

  5.這樣安裝好的prometheus只是監控了prometheus server自己,prometheus本身也會收集自己的監控數據,並沒有配置exporter監控插件,所以target目錄下沒有exporter,然后需要進行下配置,配置的方式是修改prometheus.yml配置文件,配置文件進入容器后在etc目錄下,配置好后需要重啟容器。

  docker exec -it myprometheus sh

  cd /etc/prometheus

  vi prometheus.yml

  配置node-exporter所在服務器的ip加端口號

  docker restart myprometheus

  啟動容器如下:

三、使用

  1.瀏覽器訪問:http://192.168.0.125:9100/,會展示收集的數據,出現頁面如下:

       2.瀏覽器訪問:http://192.168.0.125:9090/,展示prometheus頁,出現頁面如下:

     3.瀏覽器訪問:http://192.168.0.125:3000/,進入可視化登錄頁面,出現頁面如下:

  默認用戶名和密碼都是admin,進入首頁如下:

   4.首先需要設置數據源,使grafana連接上prometehus server,點擊Add data Source

     5.輸入url然后save

 

    6.首頁點擊new dashboard然后edit

 

     7.可在metrics處輸入cpu,來檢測cpu的情況,然后query,效果如下:

 

     8.可以輸入memory檢測虛擬機情況,添加查詢,效果如下:

 

  9.在metrics輸入{instance,job}可以指定某台實例或者根據job指定,如下圖:

  10.使用docker命令docker exec -it myprometheus /bin/bash進入docker中prometheus時報錯:starting container process caused "exec: \"bash\": executable file not found in $PATH",這個錯誤說明鏡像不包含適合bash的風格操作,沒有這樣的文件或目錄,可能你的鏡像基於busybox,它沒有bash shell。但他在/bin/sh有一個shell,直接執行 docker exec -it myprometheus /bin/sh 就可以進入容器里面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM