用容器轻松搭建Prometheus运行环境
Prometheus是一个开源的监控解决方案,包括数据采集、汇聚、存储、可视化、监控、告警等。除了基本的监控数据,也支持通过自定义exporter来获取自己想要的数据。本文从零开始用容器搭建一个prometheus环境,并介绍一些基本功能。
准备工作
我们需要先安装virtualBox和vagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test
,运行以下命令:
里面应该有一句config.vm.box = "minimum/ubuntu-trusty64-docker"
,在它的下面添加如下代码,相当于给它分配一台IP是192.168.33.18的虚拟机。
这个vagrant镜像已经在ubuntu的基础上帮我们安装了docker,用起来很方便。然后在终端运行以下命令启动并连接虚拟机。
搭建环境
Prometheus的环境搭建起来非常简单,只要一个docker镜像即可。绿色的压缩包安装方式可以参考官方文档。此外还需要一个配置文件:
配置文件中,scrape_interval
指的是数据获取间隔,prometheus
这个任务里的scrape_interval
将会在这个任务里覆盖掉默认的global
全局值,也就是这个任务每5秒钟获取一次数据,其它任务则是每15秒钟。完整的配置文件格式,请参考官方文档。接下来启动Prometheus:
启动完成后,将会在http://192.168.33.18:9090看到prometheus的首页:
数据收集
在http://192.168.33.18:9090/metrics可以看到prometheus收集到的数据。其中有一个prometheus_target_interval_length_seconds
,表示真实的数据获取间隔。在prometheus首页输入它并回车,就可以看到一系列的数据,它们有着不同的quantile,从0.01至0.99不等。0.99的意思是有99%的数据都在这个值以内。如果我们只关心这个数,我们可以输入prometheus_target_interval_length_seconds{quantile="0.99"}
来查看。查询还支持函数,比如count(prometheus_target_interval_length_seconds)
可以查询数量。完整的表达式可以参考官方文档。
点击Console旁边的Graph标签就可以看见时序图了:
可以随意选择指标和函数试一试,比如rate(prometheus_local_storage_chunk_ops_total[1m])
。
Exporter
Prometheus支持官方/非官方的许多种exporter,如HAProxy,Jenkins,MySQL等,也有一些软件直接支持Prometheus而无需exporter,如Etcd,Kubernetes等。我们试一下node exporter:
Node exporter暴露的端口是9100,所以我们需要修改一下prometheus的配置文件:
重启prometheus:
这样在页面上就可以选择节点的一些指标了。也可以访问http://192.168.33.18:9100/来直接查看Exporter的指标。
Push Gateway
Prometheus采集数据是用的pull也就是拉模型,这从我们刚才设置的5秒参数就能看出来。但是有些数据并不适合采用这样的方式,对这样的数据可以使用Push Gateway服务。它就相当于一个缓存,当数据采集完成之后,就上传到这里,由Prometheus稍后再pull过来。我们来试一下,首先启动Push Gateway:
可以访问http://192.168.33.18:9091/来查看它的页面。下个命令将会往Push Gateway上传数据:
效果是酱紫滴:
而在Prometheus的配置文件里,只要把端口换成9100
便能采集到Push Gateway的数据了。
Grafana
Grafana是目前比较流行的监控可视化UI,它从2.5.0版开始直接支持Prometheus的数据。我们来试一下。首先启动grafana:
打开http://192.168.33.18:3000/,就能看到grafana的登录页面了。输入默认的admin/admin登录grafana。选择左侧的Data Sources,然后点击上面的Add new按钮,便可以把prometheus作为数据源导入grafana:
输入下面的值:
- Name:prometheus
- Default:true
- Type:Prometheus
- Url:http://192.168.33.18:9090/
然后点击Add按钮。之后会出来一个Test Connection的按钮,点击它便可以收到Data source is working的消息。点击左边的Dashboards回到主页,点击上面的Home,选择+ New,会出来一个绿色的小竖条,点击它便会弹出来一个菜单:
选择Add Panel和Graph,便会出来一个图。然后就可以在Query里输入prometheus支持的查询了: