热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用10分钟时间让你搞懂服务监控治理,指标型数据监控,不过分吧?

指标型数据监控指标采集概述在上节的监控系统分类中,我们说指标数据是监控系统判断运行状态的一个重要数据来源,这里的指标是在时间维度上捕获的与系统相关的

指标型数据监控


指标采集概述

在上节的监控系统分类中,我们说指标数据是监控系统判断运行状态的一个重要数据来源,这里的指标是在时间维度上捕获的与系统相关的值。这个指标值按照不同的层次,可以进一步分类。

  • 基础类型指标:包括CPU、内存、网络、I/O等,基于JVM系统的应用,也可以把JVM的内存回收状态、堆栈等资源占用状态的指标纳入这一类型指标。基础类型指标通常可以从宏观的视角描述当前应用所属容器或者运行环境的基本状态。

  • 应用服务类型指标:指服务的运行状态指标。前文我们说的服务延迟、流量吞吐、错误和饱和度即“黄金四指标”,线程个数、队列积压情况等数据都属于应用服务类型指标。因为服务指标最贴近应用服务本身,所以应用服务类型指标可以直观地反映当前服务的运行状态,也是开发运维人员排查异常状态和定位应用错误时的主要判断依据。

  • 业务定制化指标:上述两类指标是比较通用的指标类型,然而很多业务需要定制化的指标来衡量某一个业务特性。例如上节中提到的通过“存量指标”衡量不同阶段、不同门店的一个业务运营状态。而这个指标的采集需要我们手动在代码的

指定位置埋点,在采集指标数据后上报到监控服务器中心。

下面介绍在监控指标方面有哪些主要的采集方式。

系统指标采集方式

Linux系统自带的命令工具是采集基础类型指标的主要方式,通过Linux系统命令可以发现服务器资源的性能瓶颈和资源占用情况。

  • iostat:监控磁盘I/O情况。

  • meminfo:查看内核使用内存情况的各种信息。

  • mpstat:实时系统监控工具,能查看所有CPU的平均状况信息。

  • netstat:显示了大量与网络相关的信息。

  • nmon:监控Linux系统的性能、下载及安装。

  • pmap:报告每个进程占用内存的详细情况。

  • ps pstree:ps告诉你每个进程占用的内存和CPU处理时间,而pstree以树形结构显示进程之间的依赖关系,包括子进程信息。

  • sar:显示CPU使用率、内存页数据、网络I/O和传输统计、进程创建活动和磁盘设备的活动详情。

  • strace:诊断进程工具。

  • tcpdump:网络监控工具,看看哪些进程在使用网络。

  • uptime:该命令告诉你这台服务器从开机启动到现在已经运行了多长时间。

  • vmstat:监控虚拟内存。

  • wireshark:是一个网络协议检测程序,让你可以获取网站的相关资讯。

  • dstat:该命令整合了vmstat、iostat和ifstat三种命令作为多类型资源统计工具。

  • top:经常用来监控Linux的系统状况,比如CPU、内存的使用。

  • ss:用来记录套接字统计信息,可以显示类似netstat一样的信息。

  • lsof:列表显示打开的文件。

  • iftop:是另一个基于网络信息的类似top的程序,能够显示当前时刻按照带宽使用量或者上传或者下载量排序的网络连接状况。


应用指标采集方式


  • 手动埋点:手动埋点是侵入式的监控数据采集方式,主要应用在业务定制化的监控场景下。手动埋点的优点是可以更灵活地为我们提供业务内部的监控指标,当然缺点也很明显,需要在代码层面修改代码,具有一定的侵入性。如果项目指标数量有限,并且被埋点代码所在位置集中在个别文件中,可以考虑使用手动埋点的方式。

  • 自动埋点:使用手动埋点的方式需要侵入式地修改已有的业务代码,对于很多业务方来说,这样的做法是无法接受的。如果能在程序加载或者运行期间动态地加入监控代码,就可以做到在运行期间动态埋点,无侵入地监控应用系统。在Java技术中,我们可以利用JavaAgent和Javaassist动态字节码改写技术实现自动埋点,增加指标抓取逻辑,这项技术的另一个使用场景就是APM中的调用链技术。在后面两节中,我们会进一步介绍这两种自动埋点捕获数据的“黑科技”。

  • 自带监控功能,有以下三种方式。


  • JMX方式:多数Java开发的服务均可由JMX接口输出监控指标。其中不少监控系统都集成了JMX采集插件,除此之外,我们也可通过jmxtrans、jmxcmd等命令工具采集指标信息。

  • HTTP REST方式:Spring Boot提供的Actuator技术可以采集监控信息,并以HTTP REST的方式暴露监控指标。

  • OpenMetrics方式:作为Prometheus的监控数据采集方案,OpenMetrics可能很快会成为未来监控的业界标准。

指标监控数据存储

基于时间序列数据库的监控系统是非常适合做监控告警使用的,如果我们要搭建一套新的指标监控系统,就需要使用时序监控作为数据存储引擎,下面我们介绍几款常用的以时间序列数据库为主的监控数据库。

  • Prometheus(普罗米修斯):2012年开源的一款监控框架,其本质是时间序列数据库,由Google前员工开发。Prometheus采用拉的模式从应用中拉取数据,并支持Alert模块,可以实现监控预警。同时,Prometheus提供了一种推数据的方式,但并不是推送到Prometheus Server中,而是在中间搭建一个PushGateway组件,通过定时任务模块将Metrics信息推送到这个PushGateway中,然后Prometheus Server采用拉的方式从PushGateway中获取数据。其他Prometheus用到的监控组件功能如下。


  • Prometheus Server:需要拉取的数据既可以采用静态方式配置在Prometheus Server中,也可以采用服务发现的方式。

  • PromQL:Prometheus自带的查询语法,通过编写PromQL语句可以查询Prometheus里面的数据。

  • Alertmanager:数据的预警模块,支持通过多种方式发送预警。

  • WebUI:展示数据和图形,通常与Grafana结合,采用Grafana来展示。


  • OpenTSDB:2010年开源的一款分布式时序数据库,在这里我们把它主要用在监控方案中。OpenTSDB采用的是HBase的分布式存储,它获取数据的模式与Prometheus不同,它采用的是推模式。在展示层,OpenTSDB自带WebUI视图,可以与Grafana很好地集成,提供丰富的展示界面。但OpenTSDB并没有自带预警模块,需要自己去开发或者与第三方组件结合使用。

  • InfluxDB:2013年开源的一款时序数据库,在这里我们主要把它用在监控系统方案中。它也采用推模式收集数据。在展示层,InfluxDB也自带WebUI,可以与Grafana集成。


本文给大家讲解的内容是服务监控治理, 指标型数据监控


  1. 下篇文章给大家讲解的内容是服务监控治理,JavaAgent技术
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

 


推荐阅读
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
author-avatar
井底蛙的天空13
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有