目录
一、常用监控简介
1.1 cacti
1.2 Nagios
1.3 Zabbix
1.4 Prometheus
二、运维监控平台设计思路
三、Prometheus 概述
3.1 什么是Prometheus
3.2 Prometheus特点
3.3 使用场景
3.4 不适合的场景
四、Prometheus监控体系
4.1 系统层监控(需要监控的数据)
4.2 中间件及基础设施类监控
4.3 应用层监控
4.4 业务层监控
4.5 硬件层面监控
五、prometheus时间序列数据
5.1 数据来源
5.2 收集数据
5.3 prometheus(获取方式)
六、Prometheus的生态组件
七、prometheus工作原理
7.1 prometheus工作模式
7.2 prometheus工作流程
7.3 prometheus的局限性
1.数据收集模块
2.数据提取模块(prometheus-TSDB,查询语言是promQL)
3.监控告警模块(布尔值表达式判断是否需要告警,不成立是健康状态)
可以细化为6层
第六层: 用户展示管理层 同一用户管理、集中监控、集中维护
第五层: 告警事件生成层 实时记录告警事件、形成分析图表(趋势分析、可视化)
第四层: 告警规则配置层 告警规则设置、告警伐值设置
第三层: 数据提取层 定时采集数据到监控模块
第二层: 数据展示层 数据生成曲线图展示(对时序数据的动态展示)
第一层: 数据收集层 多渠道监控数据
Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。
官网:Data model | Prometheus
自定义多维数据模型(时序列数据由metric名和一组key/value标签组成)
非常高效的储存平均一个采样数据占大约3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G
在多维上灵活且强大的查询语句(PromQL)
不依赖分布式储存,支持单主节点工作
通过基于HTTP的pull方式采集时序数据
可以通过push gateway进行时序列数据库推送(pushing)
可以通过服务发现或静态配置去获取要采集的目标服务器
多种可视化图表及仪表盘支持
Prometheus可以很好地记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。(k8s)
Prometheus是为可靠性而设计的,它是您在中断期间要使用的系统,可让您快速诊断问题。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它,并且无需设置广泛的基础结构即可使用它
普罗米修斯重视可靠性。即使在故障情况下,您始终可以查看有关系统的可用统计信息。如果您需要100%的准确性(例如按请求计费),则Prometheus并不是一个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视。
redis监控内容
日志--->如果是哨兵模式--->哨兵共享集群信息,产生的日志
--->直接包含的其他节点哨兵信息及redis信息
用于衡量应用程序代码状态和性能
监控的分类:
时序数据,是在一段时间内通过重复测量(measurement)而获得的观测值的集合将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴,服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;
prometheus基于HTTP call (http/https请求),从配置文件中指定的网络端点(endpoint/IP:端口)上周期性获取指标数据。
很多环境、被监控对象,本身是没有直接响应/处理http请求的功能,prometheus-exporter则可以在被监控端收集所需的数据,收集过来之后,还会做标准化,把这些数据转化为prometheus可识别,可使用的数据(兼容格式)
监控概念 : 白盒监控、黑盒监控
白盒监控: 自省方式,被监控端内部,可以自己生成指标,只要等待监控系统来采集时提供出去即可(例如cadvisor)PS:被监控端自身可产出指标数据,且监控服务可直接来抓取的监控类型,我们叫做内建的指标暴露器 (指标暴露器:exporter把系统的数据原本无法通过http展示出来的数据,转化成http方式暴露出来,给prometheus来抓取,这种exporter类型的服务,或者代理,我们其实会称为指标暴露器)
(指标:类似cpu使用率 cpu空闲率)
黑盒监控: 对于被监控系统没有侵入性,对其没有直接"影响",这种类似于基于探针机制进行监控(snmp协议)
Prometheus支持通过三种类型的途径从目标上"抓取(Scrape)"指标数据(基于白盒监控);
Exporters ——>工作在被监控端,周期性的抓取数据并转换为pro兼容格式等待prometheus来收集,自己并不推送 Instrumentation ——>指被监控对象内部自身有数据收集、监控的功能,只需要prometheus直接去获取 Pushgateway ——>短周期5s—10s的数据收集
Prometheus同其它TSDB相比有一个非常典型的特性: 它主动从各Target上拉取(pull)数据,而非等待被监控端的推送 (push)
两个获取方式各有优劣,其中,Pull模型的优势在于集中控制: 有利于将配置集在Prometheus server上完成,包括指标及采取速率等;
Prometheus的根本目标在于收集在rarget上预先完成聚合的聚合型数据,而非一款由事件驱动的存储系统 通过targets(标识的是具体的被监控端) 比如配置文件中的 targets:['localhost:9090']
prometheus生态圈中包含了多个组件,其中部分组件可选
1、Prometheus Server: 收集和储存时间序列数据,通过scraping以刮擦的方式去获取数据放入storge(TSDB时序数据库),制定Rules/Alerts:告警规则,service discovery是自动发现需要监控的节点
2、Client Library: 客户端库,目的在于为那些期望原生提供Instrumentation功能的应用程序提供便捷的开发途径;
3、Push Gateway: 接收那些通常由短期作业生成的指标数据的网关,并支持由Prometheus Server进行指标拉取操作;
4、Exporters: 用于暴露现有应用程序或服务(不支持Instrumentation)的指标给Prometheus Server,而pro内建了数据样本采集器,可以通过配置文件定义,告诉prometheus到那个监控对象中采集指标数据,prometheus 采集过后,会存储在自己内建的TSDB数据库中,提供了promQL 支持查询和过滤操作,同时支持自定义规则来作为告警规则,持续分析一场指标,一旦发生,通知给alerter来发送告警信息,还支持对接外置的UI工具(grafana)来展示数据
采集、抓取数据是其自身的功能,但一般被抓去的数据一般来自于:
export/instrumentation (指标数据暴露器) 来完成的,或者是应用程序自身内建的测量系统(汽车仪表盘之类的,测量、展示)来完成
5、Alertmanager: 由告警规则对接,从Prometheus Server接收到"告警通知"后,通过去重、分
组、路由等预处理功能后以高效向用户完成告警信息发送
6、Data Visualization(Dashboards): 与TSDB对接并且展示数据库中的数据,Prometheus web UI (Prometheus Server内建),及Grafana等;
7、Service Discovery: 动态发现待监控的Target,从而完成监控配置的重要组件,在容器化环境中尤为有用;该组件目前由PropetheusServer内建支持
ps:告警数据采集、告警信息提取、告警通知
1、首先,需要采集监控数据,pro会周期性的pull或被push指标数据,数据采集的方式主要包括exporters、instrumentation、pushgateway 3种方式,前两者为pull方式获取,pushgateway借助于push方式推送给prometheus。
2、根据prometheus配置文件中(K8S-configmap的配置种),获取被监控端的数据之后,保存在TSDB中,我们可以借助Grafana或者告警平台来展示数据,grafana的展示是通过PromQL来获取数据。
3、prometheus通过rule配置来借助于PromQL来定义布尔值表达式,产生告警信息
4、一旦出现告警,prometheus产生告警信息,发送给alertmanager,alertmanager根据自定义的告警路由,来进行告警通知,对接第三方平台,例如告警平台、邮件、钉钉。