1. Prometheus简介
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。
2. Prometheus服务搭建
- 拉取prometheus镜像
docker pull prom/prometheus
- 启动容器
kong网关添加了Prometheus插件后,在admin api的metrics端点可以获取到prometheus所需数据,即http://{kong_ip}:8001/metrics
准备一个配置文件,名为:prometheus.yml. 本文的样例如下:
global:
scrape_interval: 15s # 下抓取目标的频率, 默认60s
evaluation_interval: 60s # 评估规则的频率
scrape_timeout: 10s # 抓取数据超时时间,默认10s
scrape_configs: # 数据抓取配置
- job_name: kong # 抓取任务的名称, 唯一
scrape_interval: 15s # 抓取频率, 默认使用全局配置
scrape_timeout: 10s # 抓取的超时, 默认使用全局配置
metrics_path: /metrics # 从目标抓取的url
scheme: http # 请求的协议, 默认http
static_configs:
- targets: ['10.200.170.20:8001']
labels:
instance: kong
# 更多配置详见: https://prometheus.io/docs/prometheus/latest/configuration/configuration/
然后启动容器:
# 默认配置启动
docker run -p 9090:9090 prom/prometheus
# 从主机映射的配置文件启动
docker run -p 9090:9090 --name prometheus \
-v ~/Data/conf/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-d prom/prometheus
# 映射配置文件和数据存储
docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /{PATH}/prometheus-data:/prometheus-data \
prom/prometheus
# 或者为配置使用额外的数据
docker run -p 9090:9090 -v /prometheus-data \
prom/prometheus --config.file=/{PATH}/prometheus.yml
Grafana安装配置
- 拉取docker镜像并启动容器
docker run -d --name=grafana -p 3000:3000 grafana/grafana
- 访问页面
使用浏览器访问ip:port # http://localhost:3000
系统默认用户名和密码为admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆
-
添加数据源
在Data Source中添加Prometheus。 URL配置为http://{IP}:9090
. 注意不要写成localhost,因为grafana是通过docker容器启动的。 -
配置kong网关
因为Prometheus需要用http://kong:8001/metrics 抓取数据。默认情况,kong的8001端口只对本机开放。解决方案有多种,详见:https://docs.konghq.com/hub/kong-inc/prometheus/ 的Accessing the metrics
部分。这里采用最粗暴的方式,将8001端口暴露出来:
# 在kong.conf文件中添加如下配置
admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl