大家好,又见面了,我是你们的朋友全栈君。
Prometheus
是由SoundCloud开发的开源监控报警系统
和时序列数据库(TSDB)
。
Go语言
开发,是Google BorgMon监控系统的开源版本。
集群资源监控
就是实现对集群资源监控
的一种框架,通常搭配Grafana 数据可视化
展示数据。
Ganglia
和 Zabbix
等。
监控系统
在这里特指对数据中心的监控,主要
针对数据中心内的硬件和软件
进行监控和告警
网络监控
,存储监控
,服务器监控
和应用监控
等白盒监控
和黑盒监控
之分
白盒监控
:通过监控内部的运行状态及指标
判断可能会发生的问题,从而做出预判或对其进行优化。黑盒监控
:监控系统或服务
,在发生异常时做出相应措施适用场景
记录纯数字时间序列
方面表现非常好。 面向服务器等硬件指标的监控
,高动态的面向服务架构的监控
。多维度数据收集
和数据筛选查询语言
也是非常的强大。可靠性
而设计的,当服务出现故障时,它可以使你快速定位
和诊断问题。不适用场景
可靠性
,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息不适用
,例如:它不适用于实时监控系统。1、强大的多维度数据模型
时间序列数据
通过 metric 名和键值对来区分。切割和切片
操作。双精度浮点
类型,标签可以设为全 unicode。2、灵活而强大的查询语句(PromQL
)
3、易于管理
4、高效
5、 采用pull 模式采集时间序列数据
6、采用 push gateway 推送数据
7、可以通过服务发现或者静态配置去获取监控的 targets。
8、有多种可视化图形界面和易于伸缩
Prometheus Server
是 Prometheus 组件中的核心部分
,负责实现
对监控数据的获取,存储以及查询。静态
配置管理监控目标,也可以配合使用 Service Discovery的方式动态
管理监控目标,并从这些监控目标中获取数据。存储
,Prometheus Server 本身就是一个时序数据库
,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中
。PromQL 语言
,实现对数据的查询以及分析。内置的 Express Browser UI
,通过这个 UI 可以直接通过 PromQL 实现数据的查询
以及可视化
。采集数据
,并通过 HTTP 服务的形式暴露给 Prometheus Server,PrometheusServer 通过访问该 Exporter 提供的接口,即可获取到需要采集的监控数据常见的Exporter
有很多,例如node_exporter、mysqld_exporter、haproxy_exporter 等,支持如 HAProxy、StatsD、Graphite、Redis 此类的服务监控警报管理器
。从 Prometheus server 端接收到 alerts 后,会进行去除重复数据
,分组,并路由到对收的接受方式,发出报警。1、Prometheus
的基本原理
是通过HTTP协议周期性抓取
被监控组件的状态
2、输出被监控组件信息的HTTP接口
被叫 exporter
3、prometheus根据配置定时去拉取
各个节点的数据,默认
使用的拉取方式是pull
push
方式获取各个监控节点的数据。
存入TSDB(时序型数据库)
4、此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询
报警功能
使用Alertmanager提供
,Alertmanager是prometheus的告警管理
和发送报警
的一个组件5、在Grafana
或其他API客户端中,可视化
收集的数据。
Prometheus
提供了两种数据持久化方式
本地存储
TSDB(时序数据库)
,将数据保存
到本地磁盘,为了性能考虑,建议使用SSD(固态)
有限
,建议不要保存超过一个月的数据
。远端存储
适用
于大量历史监控数据的存储
和查询
保存
到远端存储转化
为远端存储支持的数据格式远端存储主要包括
OpenTSDB、InfluxDB、Elasticsearch、M3DB等,其中M3DB是目前非常受欢迎的后端存储初衷
就是为了监控数据的查询
高性能
而非分布式大容量。TSDB(Time Series Database)时序列数据库
用来处理时间序列数据的软件
,并且数据中的数组是由时间进行索引的
写入操作
顺序添加
,大多数时候数据到达都以时间排序
写操作很少
写入很久之前的数据,也很少
更新数据。大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库删除操作
一般为区块删除,选定开始的历史时间并指定后续的区块。很少
单独删除某个时间或者分开的随机时间的数据基本数据大
,一般超过内存大小。一般选取的只是其中一小部分且没有规律,缓存几乎不起任何作用顺序读
。高并发的读操作
十分常见prometheus
采集到的监控数据均以metric(指标)
形式保存在时序数据库中(TSDB)
,属于同一指标名称,同一标签集合的、有时间戳标记的数据流。
每一条时间序列
由metric 和 labels
组成,每条时间序列按照时间的先后顺序
存储它的样本值
pull
方式获取client的数据
Prometheus会将所有采集到的监控数据以时间序列的方式保存在内存数据库中
,并且定时保存
到硬盘上
每一条数据
由以下三部分组成
:
指标(metric)
:指标名称和描述当前样本特征
的 labelsets标签集组成;时间戳(timestamp)
:一个精确到毫秒的时间戳
;样本值(value)
: 一个 folat64 的浮点型数据表示当前样本的值
。指标(metric)的格式
如下:
<metric name>{<label name>=<label value>, ...}
案例数据
api_http_requests_total{
method=``"POST"``, handler=``"/messages"``}
四种核心的指标类型
Counter(计数器)
累加的 metric
,典型的应用如:请求的个数,结束的任务数, 出现的错误数等等。Gauge(仪表盘)
Histogram(直方图)
柱状图
,典型的应用如:请求持续时间,响应大小。可以对观察结果采样,分组及统计。Summary(摘要)
PromQL (Prometheus Query Language)
是 Prometheus 自己开发的数据查询DSL 语言
。Prometheus数据展现
除了自带的WebUI还可以通过Grafana
,他们本质上都是通过HTTP + PromQL
的方式查询Prometheus数据对时间序列数据
丰富的查询,聚合以及逻辑运算的能力。略(我好懒不想写)。。。
再回(๑•̀ㅂ•́)و✧
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161754.html原文链接:https://javaforall.cn