1. 程式人生 > >Openstack 之 Prometheus 監控

Openstack 之 Prometheus 監控

color shadow 聯合 instance 成熟 lease mon ble 其中

技術分享圖片 技術分享圖片

上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“Openstack私有雲”,如有興趣,請關註。


作為一個生產系統,全面的系統監控是必不可少的一個環節,以前都是使用zabbix,但是Openstack這一塊的監控工具現在更加主流的監控工具已經是google開源的監控產品Prometheus(普羅米修斯) ,這個監控工具使用go語言編寫,脫離於集中數據存儲,據說性能比zabbix要好,復雜度要比zabbix要低,這麽好的東西怎麽能不去學習使用呢?

我找到了官網,學習了相關的概念,官網地址:

https://prometheus.io/

另外,網上有一篇文章寫的很好,將一些關鍵概念和配置都講到了,並且是通過docker-compose來進行部署管理,網址如下:

http://cizixs.com/2018/01/24/use-prometheus-and-grafana-to-monitor-linux-machine


先介紹一下概念性的東西。

Prometheus主要有以下的特性:

數據

Prometheus實現了一個高維數據模型。時間序列由一個度量名稱和一組鍵值對標識。


強大的查詢

靈活的查詢語言允許對收集的時間序列數據進行切片和切塊,以便生成專門的圖形,表格和警報。


強大的可視化

Prometheus有多種可視化數據模式:內置表達式瀏覽器,Grafana集成和控制臺模板語言。


高效的存儲

Prometheus以高效的自定義格式將時間序列存儲在內存和本地磁盤上。縮放是通過功能分片和聯合來實現的。


操作簡單

每臺服務器都獨立於可靠性,僅依靠本地存儲。用Go編寫,所有的二進制文件都是靜態鏈接的,並且易於部署。


精確警報

警報是基於Prometheus靈活的查詢語言並維護維度信息而定義的。警報管理員處理通知。


提供眾多客戶端庫

客戶端庫允許輕松使用服務。已經支持十種以上的語言,並且定制庫很容易實現。


支持眾多集成

現有exporter允許將第三方數據連接到Prometheus。比如:系統統計信息,以及Docker,HAProxy,StatsD和JMX指標。


功能結構圖:


技術分享圖片


上面我們關註四個關鍵組件:

    • 服務端 Prometheus Server

    • 客戶端 Exporter

    • Web展示界面 Grafana

    • 告警模塊Alertmanager


安裝步驟:


簡單來說,服務器端Prometheus Server負責集中收集存儲監控數據,客戶端Exporter負責提供監控數據,Web展示界面 Grafana負責web圖形展示和管理,告警模塊Alertmanager負責告警以及發送通知。有了這四個組件,就組成了一個可用的完整的監控系統。後面我介紹針對Openstack安裝配置前3個組件的部署,最後一個告警暫時不做。

組件安裝有多種方式,直接從官網下載軟件安裝包安裝、下載源代碼編譯安裝、下載容器安裝、自己定制容器安裝等等,原來本來打算使用容器化方式安裝配置,由於剛開始不是很熟悉,因此還是按照傳統的軟件包安裝方式。下面是安裝步驟:

1、服務端 Prometheus Server 直接下載官網的軟件包進行安裝,其中配置文件根據實際環境進行修改;

2、客戶端openstack Exporter使用git社區的prometheus-openstack-exporter ,這是一個exporter,通過openstack api接口接入目標系統,可以監控部分openstack的參數信息,需要在ubuntu操作系統上安裝配置。由於我的系統是contos7,考慮使用docker鏡像實現。

3、Web展示界面 Grafana 直接下載官網的軟件包進行安裝,安裝完成後根據實際環境導入數據源,定制web監控界面;


安裝記錄:

1、服務端 Prometheus Server 直接下載官網的軟件包進行安裝,下載地址是:

https://prometheus.io/download/ //官網下載網址,prometheus server、exporter、alertmanager 都在這裏下載

wget https://github.com/prometheus/prometheus/releases/download/v2.3.0/prometheus-2.3.0.linux-amd64.tar.gz
tar xzvf prometheus-2.3.0.linux-amd64.tar.gz
cd prometheus-2.3.0.linux-amd64
vi prometheus.yml  //增加下面的配置,添加一個靜態監控exporter,將openstack exporter配置進去
scrape_configs:
 - job_name: 'openstack_exporter'
    static_configs:
    - targets: ['192.168.1.121:9183']    //對應下面第2步配置的openstack exporter暴露的端口9183
vi /root/.bash_profile  //添加命令別名prometheus
alias prometheus='/prom_data/prometheus-2.3.0.linux-amd64/prometheus --web.listen-address=0.0.0.0:9091'
 //上面的/prom_data/prometheus-2.3.0.linux-amd64/目錄就是工作目錄,9090端口由於被占用,改用9091端口
. /root/.bash_profile  //使別名生效
prometheus   //啟動prometheus server


2、客戶端 Exporter使用git社區的prometheus-openstack-exporter ,軟件的git地址如下:

https://github.com/CanonicalLtd/prometheus-openstack-exporter

由於我的環境是centos7,上面的exporte要求安裝在ubuntu上,因此定制這個openstack-exporter的容器;

a、將上面的軟件git clone 到本地 :

         git clone 
https://github.com/CanonicalLtd/prometheus-openstack-exporter.git


b、進入目錄prometheus-openstack-exporter 目錄,並創建Dockerfile文件如下:

# vi Dockerfile 
FROM ubuntu:16.04
MAINTAINER Wilbur Yu <[email protected]>
LABEL Description="Prometheus Openstack Exporter docker image"
RUN apt-get update   && apt-get install -y python-neutronclient python-novaclient python-keystoneclient python-netaddr python-cinderclient python-prometheus-client   && mkdir -p /var/cache/prometheus-openstack-exporter/   && mkdir -p /etc/prometheus-openstack-exporter
VOLUME /etc/prometheus-openstack-exporter
EXPOSE 9183
COPY ./prometheus-openstack-exporter /
COPY ./openrc.sh /etc/prometheus-openstack-exporter/
COPY ./prometheus-openstack-exporter.yaml /etc/prometheus-openstack-exporter/
RUN chmod 755 /prometheus-openstack-exporter   && chmod 777 /var/cache/prometheus-openstack-exporter
CMD . /etc/prometheus-openstack-exporter/openrc.sh   && /prometheus-openstack-exporter /etc/prometheus-openstack-exporter/prometheus-openstack-exporter.yaml


c、將環境變量文件拷貝到工作目錄下:

    cp /etc/kolla/admin-openrc.sh ./openrc.sh

d、在工作目錄下制作鏡像:

    docker build -t prom_openstack_exporter .

e、運行本地制作的鏡像prom_openstack_exporter:

docker run -d --name prom_openstack_exporter -p 9183:9183 -v /prom_data/prometheus-openstack-exporter/openrc.sh:/etc/prometheus-openstack-exporter/openrc.sh  prom_openstack_exporter
    //其中/prom_data/prometheus-openstack-exporter/openrc.sh是本地文件,是openstack環境變量文件,可以根據需要更改


3、Web展示界面 Grafana 直接下載官網的軟件包進行安裝,

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.3-1.x86_64.rpm 
yum localinstall grafana-5.1.3-1.x86_64.rpm
systemctl start grafana-server   //啟動grafana-server服務

a、登錄web界面:

http://192.168.1.121:3000/

默認賬號密碼是: admin/admin

b、配置數據源data sources為上面的配置的prometheus server : http://192.168.1.121:9091 ,註意,這裏的數據源不是prometheus的exporter,而是server的端口。

c、創建dashboad。dashboad的數據源就是上面配置的data sources ,這裏我們直接就是prometheus中openstack exporter提供的數據源,一個dashboad裏面可以配置多個圖表,圖表可以是graph,也可以是單個統計數字singlestat,還可以是table。具體metrics表達式的編寫可以參考官網的說明:

https://prometheus.io/docs/prometheus/latest/querying/basics/

d、簡單抽取了2個metric進行繪圖,一個是:

sum(nova_instances{instance_state="ACTIVE"}) //總活動VM數

一個是:sum(hypervisor_vcpus_used) by(hypervisor_hostname) //每臺物理機上已經使用的vcpu數

顯示效果如下:

技術分享圖片

總結:

從服務端安裝部署的角度上看,個人感覺比zabbix要簡單,zabbix監控到後面運行時候性能瓶頸是數據庫,prometheus這個方面我現在還沒有實踐經驗,但是從它的架構概念上看,應該是有提高的,並且很靈活,因為不是中心數據庫存放監控數據。

客戶端的安裝部署更簡單,對於大部分標準組件,社區都已經提供了成熟的客戶端exporter程序。

主要的難點在web展示端和告警端,由於監控對象千變萬化,同時對於監控界面的要求也是不盡相同,因此這一塊的工作是整個監控系統的重點和難點。像我在這裏主要是探索了一下openstack的監控,采用社區裏面一個openstack-exporter ,需要根據自己實際的需求,從exporter裏面暴露的眾多metrics進行展示。web展示采用grafana,圖形展示需要熟悉消化prometheus的查詢語言,具體網址在上面已經有介紹。雖然在grafana裏面有眾多的dashboad模板,但是一般來說,還是需要根據實際監控環境進行定制修改。

由於openstack的體系也比較復雜,除了openstack自身組件需要監控,另外虛擬機也需要監控,這裏使用的openstack-exporter是通過客戶端api接入到openstack環境中對一些通用的參數進行采集,對於openstack自身的組件沒有監控,對於kolla部署出來的openstack,需要監控容器,這裏也沒有涉及,對於虛擬機的內部運行情況監控,也需要規劃設計,這裏也沒有涉及,如果要對openstack生產環境進行監控,還有很多工作需要做。

總體來講,和其他開源軟件一樣,主要的工作社區都已經幫我們完成了,我們根據自己的需要針對自己的環境進行規劃和編輯完善並最終打造適合自己的監控系統。





Openstack 之 Prometheus 監控