Prometheus是一套开源监控系统和告警为一体,由go语言(golang)开发,是监控+报警+时间序列数 据库的组合。适合监控docker容器。因为kubernetes(k8s)的流行带动其发展。
时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。
应用的场景很多,如:
时间序列数据特点:
Prometheus 是一个监控平台,它通过抓取监控目标(targets)上的指标 HTTP 端点来从这些目标收集指标。
安装完Prometheus Server端之后,第一个targets就是它本身。
具体可以参考官方文档
Prometheus存在多种不同的监控指标(Metrics),在不同的场景下应该要选择不同的Metrics。
Prometheus的merics类型有四种,分别为Counter、Gauge、Summary、Histogram。
Gauge:可增可减的仪表盘
Histogram:分析数据分布情况
简单了解即可,暂不需要深入理解。
通过浏览器访问http://被监控端IP:9100(被监控端口)/metrics
就可以查到node_exporter在被监控端收集的监控信息
Prometheus内置了一个强大的数据查询语言PromQL。 通过PromQL可以实现对监控数据的查询、聚合。
同时PromQL也被应用于数据可视化(如Grafana)以及告警当中。
通过PromQL可以轻松回答以下问题:
具体查询细节可以参考官方。
安装Prometheus组件其实很简单,下载包--解压--后台启动运行即可,不做具体演示。
在远程linux主机(被监控端)上安装node_exporter组件,可看下载地址
下载解压后,里面就一个启动命令node_exporter
,直接启动即可。
nohup /usr/local/node_exporter/node_exporter >/dev/null 2>&1 & lsof -i:9100
nohup:如果直接启动node_exporter的话,终端关闭进程也会随之关闭,这个命令帮你解决问题。
Prometheus 所有稳定的 HTTP API 都在 /api/v1
路径下。当我们有数据查询需求时,可以通过查询 API 请求监控数据,提交数据可以使用 remote write 协议或者 Pushgateway 的方式。
API | 说明 | 需要认证 | 方法 |
---|---|---|---|
/api/v1/query | 查询接口 | 是 | GET/POST |
/api/v1/query_range | 范围查询 | 是 | GET/POST |
/api/v1/series | series 查询 | 是 | GET/POST |
/api/v1/labels | labels 查询 | 是 | GET/POST |
/api/v1/label//values | label value 查询 | 是 | GET |
/api/v1/prom/write | remote write 数据提交 | 是 | remote write |
Pushgateway | pushgateway 数据提交 | 是 | SDK |
默认开启认证,因此所有的接口都需要认证,且所有的认证方式都支持 Bearer Token和 Basic Auth。
调用接口的时候,我们需要携带Basic Auth请求头的认证,否则会出现401。
Bearer Token
Bearer Token 随着实例产生而生成,可以通过控制台进行查询。了解 Bearer Token 更多信息,请参见 Bearer Authentication。
Basic Auth
Basic Auth 兼容原生 Prometheus Query 的认证方式,用户名为用户的 APPID,密码为 bearer token(实例产生时生成),可以通过控制台进行查询。了解 Basic Auth 更多信息,请参见 Basic Authentication。
所有 API 的响应数据格式都为 JSON。每一次成功的请求会返回 2xx
状态码。
无效的请求会返回一个包含错误对象的 JSON 格式数据,同时也将包含一个如下表格的状态码:
状态码 | 含义 |
---|---|
401 | 认证失败 |
400 | 当参数缺失或错误时返回无效的请求状态码 |
422 | 当一个无效的表达式无法被指定时 (RFC4918) |
503 | 当查询不可用或者被取消时返回服务不可用状态码 |
无效请求响应返回模板如下:
{ "