目录
1、prometheus如何收集k8s/服务的–三种方式收集
5.3 错误:监控当前系统所有发生的错误请求,衡量当前系统错误发生的速率
前言
zabbix是传统的监控系统,出现比云原生早,使用的是SQL关系型数据库;而Prometheus基于谷歌的borgemon使用go语言开发,使用TSDB数据库,所以支持云原生。zabbix最新发布的6.0版本,知道自己处于生死存亡时刻,也支持了Prometheus使用的TSDB数据库。
一、Prometheus 概述
1、什么是Prometheus
Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。
① 每个被监控的主机都可以通过专用的exporter 程序提供输出监控数据的接口,它会在目标处收集监控数据,并暴露出一个HTTP接口供Prometheus server查询,Prometheus通过基于HTTP的pull的方式来周期性的采集数据。
② 任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示,监控目标可以通过配置信息以静态形式指定,也可以让Prometheus通过服务发现的机制进行动态管理。
③ Prometheus 能够直接把API Server作为服务发现系统使用,进而动态发现和监控集群中的所有可被监控的对象。
Prometheus 官网地址:https://prometheus.io
Prometheus github 地址:https://github.com/prometheus
2、Zabbix和Prometheus区别
① 和Zabbix类似,Prometheus也是一个近年比较火的开源监控框架,和Zabbix不同之处在于Prometheus相对更灵活点,模块间比较解耦,比如告警模块、代理模块等等都可以选择性配置。服务端和客户端都是开箱即用,不需要进行安装。zabbix则是一套安装把所有东西都弄好,很庞大也很繁杂。
② zabbix的客户端 agent 可以比较方便的通过脚本来读取机器内数据库、日志等文件来做上报。而 Prometheus 的上报客户端则分为不同语言的SDK和不同用途的 exporter 两种,比如如果你要监控机器状态、mysql性能等,有大量已经成熟的 exporter 来直接开箱使用,通过http 通信来对服务端提供信息上报(server去pull信息);而如果你想要监控自己的业务状态,那么针对各种语言都有官方或其他人写好的 sdk供你使用,都比较方便,不需要先把数据存入数据库或日志再供zabbix-agent采集。
③ zabbix的客户端更多是只做上报的事情,push模式。而Prometheus则是客户端本地也会存储监控数据,服务端定时来拉取想要的数据。
④ 界面来说zabbix比较陈旧,而prometheus比较新且非常简洁,简洁到只能算一个测试和配置平台。要想获得良好的监控体验,搭配Grafana还是二者的必走之路。
3、Prometheus的特点
多维数据模型:由度量名称和键值对标识的时间序列数据
时序数据,是在一段时间内通过重复测量(measurement)而获得的观测值的集合;将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴;
服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;
① 内置时间序列(pime series)数据库:Prometheus;外置的远端存储通常会用:InfluxDB、openTsDB等
② promQL一种灵活的查询语言,可以利用多维数据完成复杂查询
③ 基于HTTP的pull(拉取)方式采集时间序列数据
④ 同时支持PushGateway组件收集数据
⑤ 通过服务发现或者静态配置,来发现目标服务对象
⑥ 支持作为数据源接入Grafana
二、运维监控平台设计思路
① 数据收集模块
② 数据提取模块(prometheus-TSDB,查询语言是promQL)
③ 监控告警模块(布尔值表达式判断是否需要告警,不成立是健康状态)
可以细化为6层
第六层:用户展示管理层 同一用户管理、集中监控、集中维护
第五层:告警事件生成层 实时记录告警事件、形成分析图表(趋势分析、可视化)
第四层:告警规则配置层 告警规则设置、告警伐值设置(定义布尔值表达式,筛选异常状态)
第三层:数据提取层 定时采集数据到监控模块
第二层:数据展示层 数据生成曲线图展示(对时序数据的动态展示)
第一层:数据收集层 多渠道监控数据(网络,硬件,应用,数据,物理环境)
三、Prometheus监控体系
1、系统层监控(需要监控的数据)
① CPU、Load、Memory、swap、disk、I/O、process等
② 网络监控:网络设备、工作负载、网络延迟、丢包率等
2、中间件及基础设施类监控
① 消息中间件:kafka、RocketMQ、等消息代理(redis 中间件)
② WEB服务容器:tomcat、weblogic、apache、php、spring系列
③ 数据库/缓存数据库:Mysql、Postgresql、MongoDB、es、redis
2.1 redis监控内容
① redis的服务状态
② redis所在服务器的系统层监控
③ RDB和AOF日志监控
日志--->如果是哨兵模式--->哨兵共享集群信息,产生的日志
--->直接包含的其他节点哨兵信息及redis信息
key的数量
key被命中的数据/次数
最大连接数--->redis和系统
redis:redis-cli登录--->config get maxclients查看最大连接
3、应用层监控
用于衡量应用程序代码状态和性能
监控的分类:
白盒监控:自省指标,等待被下载(cadvisor)
黑盒监控:基于探针(snmp)的监控方式,不会主动干预、影响数据
4、业务层监控
用于衡量应用程序的价值。如电商业务的销售量,ops、dau日活、转化等
业务接口:登入数量,注册数、订单量、搜索量和支付量
四、prometheus时间序列数据
1、什么是序列数据
时间序列数据(TimeSeries Data):按照时间顺序记录系统、设备状态变化的数据被称为时序数据。
应用场景很多,如:
① 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距离等等。每时每刻都要将数据记录下来做分析。
② 某一个地区的各车辆的行驶轨迹数据
③ 传统证券行业实时交易数据
④ 实时运维监控数据等
2、时间序列数据特点
① 性能好:关系型数据库对于大规模数据的处理性能糟糕。NOSQL 可以比较好的处理大规模数据,依然比不上时间序列数据库。
② 存储成本低:高效的压缩算法,节省存储空间,有效降低 IO。Prometheus 有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用 3.5byte 左右空间,上百万条时间序列,30 秒间隔,保留 60 天,大概花了 200 多 G(来自官方数据)
3、数据来源
Prometheus基于HTTP call (h