1、cacti
Cacti (英文含义为仙人掌〉是一套基于PHP、MySQL、SNMP和 RRDtool开发的网络流量监测图形分析工具。
它通过snmpget来获取数据,使用RRDTool绘图,但使用者无须了解RRDTool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一-个用户能查看树状结构、主机设备以及任何一-张图,还可以与LDAP
结合进行用户认证,同时也能自定义模板,在历史数据的展示监控方面,其功能相当不错。
Cacti
通过添加模板,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力( 数据的叠加功能)
2、Nagios
Nagios是-.款开源的免费网络监视工具,能有效监控windows、Linux和Unix的主机状态,交换机路由器等网络设置打印机等。
在系统或服务状态异常时发出邮件或短信报警第–时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知nagios主要的特征是监控告警,最强大的就是告警功能,可支持多种告警方式,但缺点是没有强大的数据收集机制,并且数据出图也很简陋,当监控的主机越来越多时,添加主机也非常麻烦,配置文件都是基于文本配置的,不支持web方式管理和配置,这样很容易出错,不宜维护。
3、Zabbix
zabbix是–个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供强大的通知机制以让系统运维人员快速定位/解决存在的各种问题。
zabbix由2部分构成,zabbix server 与可选组件zabbix_ agent。 zabbix server 可以通过SNMP,zabbix
agent,ping, 端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris, HP-UX,AIX, Free BSD, Open BSD,os x等平台_上。
zabbix解决了cacti没有告警的不足,也解决了nagios不能通过web配置的缺点,同时还支持分布式部署,这使得它迅速流
行起来,zabbix也成为目前中小企业监控最流行的运维监控平台。
当然,zabbix也有不足之处,它消耗的资源比较多,如果监控的主机非常多时(服务器数量超过500台),可能会出现监控
超时、告警超时、告警系统单点故障等现象,不过也有很多解决办法,比如提高硬件性能、改变zabbix监控模式等。
0 agent代理: 专门的代理服务方式进行监控,专属的协议,装有zabbix-agent的主机就可以被zabbix-server监控, 主
动或被动的方式,把数据给到server进行处理。
0 ssh/telent: linux主机支持ssh/telent协议
0 snmp: 网络设备路由器、交换机不能安装第三方程序(agent),使用简单网络协议。大多数的路由器设备支持SNMP协议
田ipmi:通过ipmi接口进行监控,我们可以通过标准的ipmi硬件接口,监控被监控对象的物理特征,比如电压,温度,
风扇状态电源情况,被广泛使用服务监控中,包括采集cpu温度,风扇转速,主板温度,及远程开关机等等,而且ipmi独立
于硬件和操作系统,无论是cpu,bios还 是os出现故障,都不会影响ipmi的工作,因为ipmi 的硬件设备BMC ( bashboard
management controller) 是独立的板卡,独立供电.
Server : Zabbix软件实现监控的核心程序,主要功能是与Zabbixproxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存。与prometheus的类似可以保存收集到的数据,但是prometheus告警需要使用alter manager组件
Database storage:
存储配置信息以及收集到的数据.
web Interface:
Zabbix的GUI接口, 通常与server运行在同一-台机器上
Proxy:
可选组件,常用于分布式监控环境中,一个帮助zabbix server收集数据,分担zabbix Server的 负载的程序
Agent:
部署在被监控主机上,负责收集数据发送给server
borgmon (监控系统)对应克隆的版本: prometheus (go语言)
所以prometheus特别适合K8S的架构上
而作为一一个数据监控解决方案,它由一-个大型社区支持,有来自700多家公司的6300个页献者,13500个 代码提交和7200个拉取请求。
多维的数据模型(基于时间序列的Key、value键 值对)
灵活的查询和聚合语言PromQL)提供本地存储和分布式存储
目通过基于HTTP和HTTPS的Pull模型采集时间序列数据( pull数据的推送,时间序列:每段
时间点的数据值指标,持续性的产生。横轴标识时间,纵轴为数据值,–段时间内数值的动态变化,所有的点连线形成大
盘式的折线图)
◎可通过动态服务发现或静态配置发现目标机器(通过consul自动发现和收缩)
0支持多种图表和数据大盘
★★补充: open-Falcaon是 小米开源的企业级监控工具,用G0语言开发,包括小米、滴滴、美团等在内的互联网公司都在使用它,是一-款灵活、可拓展并且高性能的监控方案。
分为事前监控和事后监控事:异常状态
设定:磁盘使用率来看(80号)
不稳定是常态、稳定是特殊的表现形式
大多数系统不是自治的,所以即使使用控制起来进行系统管理,但随着时间推移,依然无发保证持续性的自治
所以做为使用者而言,通过监控来了解系统的运行特性,来做对应的处理决策是相当重要的
而监控以细致化划分,会划分为事前监控、事后监控(例如体检)
监控系统的四个基础功能
以监控系统的主体而言
使用/管理者所关注的被监控“系统”(端)的相关组件,路由器、交换机、网关、应用、基础设施服务、业务特征等
但以上组件必须允许在基础设施层,例如物理主机、vm、container
那么我们就需要对这些基础设施层中关键的,伴随时间变化而变化的数据,进行采集分析,而此类数据称之为[指标]
指标数据采集到之后,作为“点状数据”,而此类点状数据称之为[样本数据]
而此类[样本数据]做为事后的分析(趋势分析),那么如果我们所需要监控的目标特别多,那么我们就需要存储大量数据
那么在持续存储性能表现上必须要强[TSDB数据库],那么接下来对此类样本数据进行分析,明确系统运行状态、特性,来预测、判断未来的某-时间、时刻是否会出现问题时我们的目的
同时为了结果的可观测及清晰性,我们会做一-些[可视化]处理分析功能,所以需要控制台(例如grafana)
(目前的形式,可视化与底代码趋势)过滤手段:PromQL(数据过滤语句)
我们也需要有一个守护进程,实时监测特定的样本序列、指标时间序列是否有异常状态
而通常此类异常状态的判断会以一-种[布尔值表达式]的方式来做为判断依据
6.满足布尔值表达式的要求的指标我们认为时异常指标,而此时我们就可以通过触发一种“媒介”(media),把异常信息通知给用户
例如钉钉、webchat、 短信、邮件等等此为
指标数据采集一-》 样本数据存储一》可视化展示一-》指标数据过滤——》 异常指标判断一>》 告警通知-一》 用户
1.数据收集模块
2.数据提取模块
3.监控告警模块
可以细化为6层依次介绍
[1]系统层监控(需要监控的数据)
1.CPU、 Load、 Memory、 swap、disk i/o、 process等
2.网络监控:网络设备、工作负载、网络延迟、丢包率等
【2】中间件及基础设施类监控端监控(移动APP、特定程序等)
1.消息中间件: kafka、 RocketMQ、 等消息代理
2.WEB服务器容器:tomcat
3.数据库/缓存数据库: MySQL、 PostgreSQL、 MogoDB、 es、redis
redis监控内容:
redis所在服务器的系统层监控
redis服务状态
RDB AOF日志监控
日志一>如果是哨兵模式一->哨兵共享集群信息,产生的日志一-> 直接包含的其他节点哨兵信息及mysql信息
③应用层监控.
用于衡量应用程序代码状态和性能
#监控的分类#:黑盒监控,白盒监控
PS:
白盒监控,自省指标(可自己产生指标,自治功能),等待被获取.
白盒监控支持通过三种途径从目标抓取( scrape)指标数据,如下:
exporters:指标暴露其, (当服务不支持pro格式, 借助于exporter来响应给pro )
instumentation:测量系统,指的是应用程序内置本身兼容pro采集格式的指标暴露器
pushga teway:短期、批处理任务,本身此类业务不会产生指标数据,同时难于使用exporter来获取指标数据的任务
以上为pro典型的采集数据的方式
linux mysql redis 资源负载/状态持续性的过程状态
一次性、短期的、批量的业务,处理完后,进程直接退出.
pushgateway 将以上短期的业务指标数据,收集到网关处,然后定期cron推送给pro-server
黑盒指标:基于探针的监控方式,不会主动干预、影响数据
用于衡量应用程序的价值,如电商业务的销售量,ops、 dau日活、转化率等,
业务接口:登入数量,注册数、订单量、搜索量和支付量
云原生时代的可观测性
1.指标监控:随时间推移产生的一 些与监控相关的可聚合的数据点(离散数据) -》pro做为代表
2.日志监控:离散式的日志或事件(日志结构化、非结构化概念)
3.链路跟踪:分布式应用调用链跟踪(时长、状态数据)
以上是可观测性系统应具有的三个概念,而pro只是其中-一个维度
了解:
google四个黄金指标(SRE书)
常用于在服务级别衡量终端用户体验、服务终端、业务影响等层面问题
以上为应用及服务监控
2、用于分析系统性能问题,可以指导用户快速识别资源瓶颈及错误的方法
以上主要用于主机指标监控
四个黄金指标谷歌出了sre书(话术)
(1)延迟:
服务请求时长:区分失败与成功的请求 code !="200"请求失败的数据
(2)流量
应用服务容量需求,如每秒处理HTTP请求或数据库系统的事务数量
(3)错误
请求失败的速率、衡量错误发送的情况
例如: HTTP 500
(4)饱和度
资源使用情况、负载情况
例如5大负载等资源
监控:五大负载、应用状态、主从状态、sql语句数量
谷歌的内部大型集群系统borg,是kubernetes的前身。其监控系统是borgmon,而prometheus是其克隆版,所以非常契合k8s的监控,对容器非常适用。
Prometheus本身为一种时序数据库(TSDB),还具备开源的监控、报警、时间序列、数据库的组合。其设计用于进行目标(target)监控的关键组件
|★*TSDB:pro通过采集的样本以时间序列的方式保存在内存(TSDB时序数据库)中并定时保存到硬盘中(持久化)
★**target: 主要指可输出、产生指标数据的组件/对象,包括但不限于主机、应用、服务、K8S ingress (逻辑主键)等
小结:能正常输出指标数据的对象成为target或网络端点.
★*时序数据:一段时间内通过重复测量而获得的观测值的集合,并且可将这些观测值绘制与图形之.上,以数据轴(纵轴)和时间轴
(横轴)来表示随着时间流逝而产生的“渐变"变化(类似与股票)
小结:能随着时间流逝,而能不断采集到的点数据成为时序数据
时序数据库不属于sql数据库也并不是nosql数据库
官网: https: L /prometheus. io/decs/ concepts/data model/
普罗米修斯重视可靠性。即使在故障情况下,您始终可以查看有关系统的可用统计信息。如果您需要100号的准确性(例如按请求计费),则Prometheus并不是–个不错的选择,因为所收集的数据可能不会足够详细和完整。在这种情况下,最好使用其他系统来收集和分析数据以进行计费,并使用Prometheus进行其余的监视。
时序数据,是在–段时间内通过重复测量(measurement)而获得的观测值的集合将这些观测值绘制于图形之上,它会有一-个数据轴和一个时间轴,服务器指标数据、应用程序性能监控数据、网络数据等也都是时序数据;
prometheus基于HTTP call (http/https请求) ,从配置文件中指定的网络端点(endpoint/IP:端口).上周 期性获取指标数据。
很多环境、被监控对象,本身是没有直接响应/处理http请求的功能,prometheus-exporter则可以在被监控端收集所需的数据,收集过来之后,还会做标准化,把这些数据转化为prometheus可识别,可使用的数据(兼容格式)
监控概念:白盒监控、黑盒监控
Prometheus同其它TSDB相比有–个非常典型的特性:它主动从各Target.上拉取(pull)数据,而非等待被监控端的推送(push)
两个获取:方式各有优劣,其中,Pull模型的优势在于:
集中控制:有利于将配置集在Prometheus server. 上完成,包括指标及采取速率等;
Prometheus的根本目标在于收集在rarget_上预先完成聚合的聚合型数据,而非一款由事件驱动的存储系统
通过targets(标识的是具体的被监控端)
比如配置文件中的targets: [‘localhost: 9090’]
1. Prometheus Server: 收集和储存时间序列数据
通过scrapi ng以刮擦的方式去获取数据放入storge ( TSDB时序数据库),制定Rules/Alerts:告警规则,service
discovery是自动发现需要监控的节点
时间序列数据,按照事件推移,在某--个时间刻度,同一个样本数据采集的时间不会绝对的一直,会随机延迟或提前-- 点进行采集
2.Client Library:客户端库
目的在于为那些期望原生提供Inst rumentat ion功能的应用程序提供便捷的开发途径;
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 (PrometheusServer内建),及Grafana等;
7. Service
Discovery:动态发现待监控的Target,从而完成监控配置的重要组件,在容器化环境中尤为有用;该组件目前由PropetheusServer内建支持
node-exporter组件,因为prometheus抓取数据是通过http的方式调用的,假如抓取的数据是操作系统的资源负载情况,而linux操作系统内核是没有内置任何http协议的,并不支持直接通过http方式进行,所以需要在每个被监控端安装node-exporter,由其向内核中拿取各种状态信息,然后再通过prometheus兼容的指标格式暴露给prometheus
对于那些未内建Instrumentation,且也不便于自行添加该类组件以暴露指标数据的应用程序来说,常用的办法是于待监控的目标应用程序外部运行一一个独立指标暴露程序,该类型的程序即统称为Exporter。
PS: Prometheus站点上提供了大量的Exporter,如果是docker技术跑多个服务就要使用docker-exportes监控系统环境,而d
ocker容器内部服务的监控需要使用cAdvisor容器
抓取异常值,异常值并不是说服务器的报警只是根据用户自定义的规则标准,prometheus通过告警机制发现和发送警示。
alter负责: 告警只是prometheus基于用户提供的"告警规则"周期计算生成,好的监控可以事先预告报警、并提前处理的功
能alter接受服务端发送来的告警指示,基于用户定义的告警路由(route) 向告警接收人(receivers) 发送告警信息( 可
由用户定义)
ps:在数据查询,告警规则里面会使用到promQL语句
内建了数据样本采集器,可以通过配置文件定义,告诉Prometheus到哪个监控对象中采集指标数据,prometheus采集过后,
会存储在自己内建的TSDB数据库中,提供了promQL,支持查询和过滤操作,同时支持自定义规则来作为告警规则,持续分析
一场指标,一旦发生,通知给alter来发送报警信息,还支持对接外置的ui工具(grafana)来展示数据,prometheus自带的web展示图像信息比较简单。
采集、抓取数据是其自身的功能。但一般来自于export/ instrumentation (指标数据的暴露)来完成,或者是服务自身的
内建的测量系统来完成
4.service discovery: 原生支持k8s的服务发现,支持consul、DNS等
6.alertmanagr: prometheus可以生成告 警信息,但是不能直接提供告警,需要使用一-个外置的组件altermanager来进行告警,emailetcd优
势在于,收敛、支持静默、去重、可以防止告警信息的轰炸
8.PrmoQL (告警规则编写),通常告警规则的文件指定输出到展示界面(grafana )
9.ui表达式浏览器(调试)
(什么是标签、什么是指标、什么是样本)
prometheus仅用键值方式存储时序式的聚合数据,他不支持文本信息
从每个target中会采集出很多指标,那么每个指标会暴露很多样本数据点,而这些数据点pro都需要存储
而这些指标会以固定时间间隔生成很多样本数据点,而如何标示这些样本数据点,则是数据模型学习的意义
其中的"键"成为指标(metric),通常意味着cpu速率、内存使用率或分区空闲比例等
同一-指标可能适配到多个目标或设备、因而它使用"标签"作为元数据,从而为metric添加更多的信息描述维度例如三台设备,在同--时刻,都会产生例如1分组CPO负载的数据,他们都会使用相同的指标(metric),而此时一个指标,如何表示时间序列?
比如:三个node节点都会有相同的指标(例如cpu0的负载那么就会使用相同的指标名称)
所以我们可以使用指标:标签=标签值的格式来表示不同节点的时序数据,例如: cpu_ total {host=node1, host=node2}
metric (cpu指标) :
示例: .
cpu_ _usage{core='1' ,ip='192.168.226.128:9100'} 14.04
key (指标)
标签(lables )
样本数据(一个folat64的浮点型数据表示当前样本的值)
{core='1', ip='192.168.226.128'}:又成为标签过滤器
prometheus每一份样 本数据都包含了:
0时序列标识: key+lables
D当前时间序列的样本值value。过滤数据样本的时间戳
这些标签可以作为过滤器进行指标过滤及聚合运算,如何从上万的数据过滤出关键有限的时间序列,同时从有限的时间序列在特定范围的样本
那就需要手动编写出时间序列的样本表达式(PromQL)来过滤出我们需求的样本数据
默认都是以双精度浮点型数据(服务端无数据量类型数据–类型是对客户端有意义的)
0counter:计数器单调递增
◎gauge:仪表盘:有起伏特征的。
histogram:直方图(统计的概念,做分位数统计) :
在一段时间范围内对数据采样的相关结果,并记入配置的bucket中,他可以存储更多的数据,包括样本值分布在每个bucket的数量,从而prometheus,就可以使用内置函数进行计算:
计算样本平均值:以值得综合除以值的数量
计算样本分位值:分位数有助于了解符合特定标准的数据个数,例如评估响应时间超过1秒的请求比例,若超过208则进行告警等
①summary (统计数据),摘要,histogram的扩展类型,它是直接由监控端自行聚合计算出分位数,同时
将计算结果响应给prometheus server的样 本采集请求,因而,其分位数计算是由监控端完成
①job: 能够接收prometheus. server 数据scrape
D targets 每一 -个可以被监控的系统,成为targets多个相同的targets的集合(类)称为job。instance:实例 与targets (类似)与target相比,instance 更趋近于一个具体可以提供监控数据的实例,而targets则更像一个对象、 目标性质
支持两种向量,同时内置提供了-组用于数据处理的函数,来对样本数据进行基础的分析(Ai算法、机器学习、深度学习来分析、预测系统的运行走势)
(1)时向量:最近以此时间戳上跟踪的数据指标(一个时间点上的所有数据)
即时向量选择器:返回0个1个或者多个时间序列上在给定时间戳上的各自的一个样本,
该样本成为即时样本D
(2)时间范围向量:指定时间范围内所有时间戳上的数据指标
范围向量选择器:返回0个1个或多个时间序列.上在给定时间范围内的各自的一-组样本(范围向量选择器无法用于绘图)