高并发系统设计:服务端监控

监控指标

  • 谷歌针对分布式系统监控的经验总结,四个黄金信号:延迟、通信量、错误和饱和度
  • 延迟指的是请求的响应时间,包括接口、访问数据库和缓存。
  • 通信量可以理解为吞吐量,也就是单位时间内请求量的大小。比如访问第三方服务的请求量、访问消息队列的请求量。
  • 错误表示当前系统发生的错误数量,包括http状态码不正确,或者业务错误。
  • 饱和度指的是服务或者资源达到上限的程度,也叫资源的利用率,比如CPU的使用率、内存使用率、磁盘使用率、缓存数据库的连接数等等。
  • 其他一些组件特有的指标,比如数据库主从延迟、消息队列的数据积压、缓存的命中率等等。
    在这里插入图片描述

如何采集

Agent

  • 通过在数据源的服务器上,部署自研或者开源的Agent来收集数据,发送给监控系统。
  • 在采集数据源上的信息时,Agent会依据数据源上提供的接口获取数据。
  • 比如监控Memcached,就可以在Agent上连接这个Memcached服务器,并发送status命令,从返回的信息中挑选重要的指标,发送给监控服务器。

代码埋点

  • 可以在代码中直接打点,计算调用服务的耗时和调用量,并且发送给监控服务器。
  • 不过,埋点最好要汇总,否则会因为PV过高,打垮监控服务器。

日志

  • 通过开源的日志采集工具,比如Flume、Filebeat等。

监控数据的处理和存储

  • 一般先用消息队列来承接数据,主要作用是削峰填谷
  • 然后启动队列处理程序:
  • 一个负责把数据写入es,然后在kibana上展示,主要用于原始数据的查询。
  • 一个是一些流式处理的中间件,比如Spark,从消息队列里接收数据后做一些处理,
    • 比如解析数据格式,提取出请求量、响应时间等数据。
    • 还会做聚合运算,可以计算同一个 URL 一段时间之内的请求量、响应时间分位值、非 200 请求量的大小等等。
    • 将数据存储在时间序列数据库中。这类数据库的特点是,可以对带有时间标签的数据做更有效的存储,而我们的监控数据恰恰带有时间标签,并且按照时间递增,非常适合存储在时间序列数据库中。目前业界比较常用的时序数据库有 InfluxDB、OpenTSDB、Graphite。
    • 最后,就可以通过 Grafana 来连接时序数据库,将监控数据绘制成报表

在这里插入图片描述

报表

  • 访问趋势报表。这类报表接入的是 Web 服务器,和应用服务器的访问日志,展示了服务整体的访问量、响应时间情况、错误数量、带宽等信息。它主要反映的是服务的整体运行情况,帮助你来发现问题。
  • 性能报表。 这类报表对接的是资源和依赖服务的埋点数据,展示了被埋点资源的访问量和响应时间情况。它反映了资源的整体运行情况,当你从访问趋势报表发现问题后,可以先从性能报表中,找到究竟是哪一个资源或者服务出现了问题。
  • 资源报表。 这类报表主要对接的是,使用 Agent 采集的资源的运行情况数据。当你从性能报表中,发现某一个资源出现了问题,那么就可以进一步从这个报表中,发现资源究竟出现了什么问题,是连接数异常增高还是缓存命中率下降。这样可以进一步帮你分析问题的根源,找到解决问题的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值