上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“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 
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生产环境进行监控,还有很多工作需要做。

    总体来讲,和其他开源软件一样,主要的工作社区都已经帮我们完成了,我们根据自己的需要针对自己的环境进行规划和编辑完善并最终打造适合自己的监控系统。