我们需要监控什么(深入浅出Prometheus读后感)

本次读后感来自于《深入浅出Prometheus:原理、应用、源码与拓展详解》
书籍链接https://item.jd.com/12573580.html

一.简介

从程序设计的角度来看,可以将监控分为基础资源监控、中间件监控、应用程序监控和日志监控

在这里插入图片描述

每种监控都涉及不同的监控指标,并使用了不同的数据采集方式。要做到全栈监控,我们还需要不断加强开发能力并积累运维经验。虽然当前有很多开源监控项目能够帮助企业迅速搭建监控系统,但在选择开源监控项目时需要保持谨慎,优先选择社区活跃度较高、落地案例较多、容易扩展的监控项目
另外,对监控指标也不要一味求多求全,没有必要采集所有监控指标,因为这样不仅增加了采集的复杂度,还增加了数据传输及存储的压力。我们应该根据自己的业务场景,采集关联的核心指标,做到有的放矢。

二.基础资源监控

1.网络

◎ 对数据中心内网络流量的监控;
◎ 对网络拓扑发现及网络设备的监控;
◎ 对网络性能的监控及对网络攻击的探测等。
(1)网络性能监控(Network Performance Monitor,NPM):主要涉及网络监测、网络实时流量监控(网络延迟、访问量、成功率等)和历史数据统计、汇总和历史数据分析等功能。
(2)网络攻击检查:主要针对内网或者外网的网络攻击如 DDoS 攻击等,通过分析异常流量来确定网络攻击行为。
(3)设备监控:主要针对数据中心内的多种网络设备进行监控,包括路由器、防火墙和交换机等硬件设备,可以通过SNMP等协议收集数据。

2.存储

存储主要分为云存储和分布式存储两部分
云存储主要通过存储设备构建存储资源池,并对操作系统提供统一的存储接口,例如块存储的 SCSI和文件存储 NFS等。它们的特点是存储接口统一,并不识别存储数据的格式和内容,例如块存储只负责保存二进制数据块,这些二进制数据可能来自图片或视频,对于块存储来说都是一样的。
分布式存储主要构建在操作系统之上,提供分布式集群存储服务,主要是针对特定数据结构的数据存储。例如HDFS的大文件存储、Dynamo的键值数据存储、Elasticsearch的日志文档存储等。
监控方向主要为 存储性能监控存储系统监控存储设备监控

  • 存储性能监控方面,块存储通常监控块的读写速率、IOPS、读写延迟、磁盘用量等;文件存储通常监控文件系统Inode、读写速度、目录权限等。
  • 存储系统监控方面,不同的存储系统有不同的指标。例如,对于Ceph存储,需要监控OSD、MON的运行状态,各种状态PG的数量,以及集群IOPS等信息。
  • 存储设备监控方面,对于构建在x86服务器上的存储设备,设备监控通过每个存储节点上的采集器统一收集磁盘、SSD、网卡等设备信息;存储厂商以黑盒方式提供的商业存储设备通常自带监控功能,可监控设备的运行状态、性能和容量等

3.服务器

(1)服务器监控包括物理服务器主机监控虚拟机监控和容器监控,需要做到对多种环境的兼容
(2)采集方式通常分为两种:

  • 一种是内置客户端,即在每台机器上都安装采集客户端
  • 另一种是在外部采集
    (3)采集指标
    从系统层面来看
  • CPU:涉及整体的 CPU使用量、用户态百分比、内核态百分比、每个 CPU的使用量、等待队列长度、I/O等待百分比、CPU消耗最多的进程、上下文切换次数、缓存命中率等。
  • 内存:涉及内存使用量、剩余量、内存占用最高的进程、交换分区大小、缺页异常数等。
  • 网络I/O:涉及每个网卡的上行流量、下行流量、网络延迟、丢包率等。
  • 磁盘I/O:涉及硬盘的读写速率、IOPS、磁盘用量、读写延迟等。
    如果是物理服务器 可能还要提供服务器的风扇、温度、电压等信息
    云的话我们通常使用接口方式获取或者直接在云上面做监控以及报警
    对于 Linux 操作系统,可以通过如图(来自http://www.brendangregg.com/Perf/linux_perf_tools_full.png)所示的各种性能检测工具查看系统中各个方面的性能指标。
    在这里插入图片描述

3.中间件监控

常用的中间件主要有以下几类。

  • 消息中间件,例如RabbitMQ、Kafka。
  • Web服务中间件,例如Tomcat、Jetty。
  • 缓存中间件,例如Redis、Memcached。
  • 数据库中间件,例如MySQL、PostgreSQL。

中间件监控需要针对不同中间件的特点和属性分别监控,目前并没有统一的标准和规范。例如,针对 Kafka 的性能监控通常需要采集 Kafka 集群的 Topic 个数、Broker 数据分区数量、日志 Offset值和生产消费流量等指标;
针对 Redis的性能监控通常需要采集Redis 的内存使用量、连接数和缓存命中率等指标。解决方案通常是分别开发一个数据收集 Agent,该 Agent 将采集中间件的性能指标并将其统一转化成 JSON、文本或者其他监控系统能识别的数据格式,然后汇总到监控中心。Prometheus针对不同的中间件开发了对应的监控代理,例如Kafkaexporter、MySQL server exporter、Apache exporter、Redis exporter等exporter,它们负责采集这些中间件的特定指标,并提供HTTP查询接口

4.日志监控

区别于指标监控,日志监控采集日志数据(文本类型),并将这些数据汇总到日志存储和搜索引擎中,提供日志检索的 Web 接入。指标监控的对象通常都是数字,而日志监控的对象是文本数据,这就要求存储系统具备文本检索功能。
在这里插入图片描述
◎ Fluentd主要负责日志采集,其他开源组件还有Filebeat、Flume、Fluent Bit等,也有一些应用集成 Log4g等日志组件直接输出日志。
◎ Kafka主要负责数据整流合并,避免突发日志流量直接冲击Logstash,业内也有用Redis替换Kafka的方案。
◎ Logstash负责日志整理,可以完成日志过滤、日志修改等功能。
◎ Elasticsearch负责日志存储和日志检索,自带分布式存储,可以将采集的日志进行分片存储。为保证数据高可用,Elasticsearch引入多副本概念,并通过Lucene实现日志的索引和查询。
◎ Kibana是一个日志查询组件,负责日志展现,主要通过Elasticsearch的HTTP接口展现日志。
除了自建日志系统,公有云还提供了日志存储和分析功能,以及一些SaaS日志服务,例如日志易等。

5.应用程序监控

包括应用程序的运行状态监控、性能监控、日志监控及调用链跟踪等。调用链跟踪是指追踪整个请求过程,从用户发送请求(通常指浏览器或者应用客户端)到后端API服务,以及API服务和关联的中间件或者其他组件之间的调用,构建出一个完整的调用拓扑结构。不仅如此,APM还可以监控组件内部方法的调用层次(Controller→Service→DAO),获取每个函数的执行耗时,从而为性能调优提供数据支撑。

在这里插入图片描述

一个用户的请求,首先到达Tomcat内的前端服务,前端服务使用 Memcached 缓存获取常用数据,然后调用另一个 Tomcat
内的后端服务,最终到达数据库,在每条连接线上都显示了请求相应的耗时,简单直观。通过Pinpoint的拓扑图,不仅可以获取整个应用的组件调用关系,还可以获取每个组件相应的耗时。
当然类似于这种的开源有很多比如kiali jaeger 包括付费的听云还有Apache-SkyWalking

一个好的监控系统需要聚合多个关联指标,在企业选型和落地的时候需要一种完善的解决方案,以避免重复采集指标及资源浪费;并且在部署的时候需要严格控制采集器(Agent)的资源使用大小,以避免因为采集器本身的问题(如Bug、死锁等)影响业务的正常运行,这就得不偿失了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自万古的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值