微服务实践04--DevOps07--度量指标00--度量指标(Metrics)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务实践04--DevOps07--度量指标00--度量指标(Metrics)

微服务实践目录,可以参见连接。

起因:

在很多人的想法里认为事务是无法考量的。无法说明的,就想老子所说的:

道可道,非常道。名可名,非常名。

人对不了解的事务的学习与分析过程中有个分歧:

  1. 追求了解事务最根本的真相,不断的分解、抽象、联想去组织处合适的理论。
  2. 赋予这个事务神话的色彩。以神的意志,解释不可理解的事务

对于现代学科来说,现代的理学和文学都最终会归化到数学,数学会归化的哲学。例如:美学中的黄金比例,文学中的逻辑学,经济学中统计学等等。

但是,对于软件工程一门工程类学科来说无法考量与度量某一项事务是否是可行?答案自然是明确的软件工程必须是可以度量的,虽然在这么多年的发展过程中没有一套完整适应时代与技术的度量方法。但是度量对于一个工程类学科来说是必须的,而且之后也会不断的朝着可度量的方向发展。

度量是了解事务内部特征的最基础的方法。但在国内度量其实是从上到下都回避的一件事,所以,需要考量加入度量指标的时间点,以及加入的度量指标,加入方式等。不过可度量的标准是公司达到一定水平是一个标志。

本文主要描述度量指标的实践,上面这些社会学的理论请自行把握。

度量指标:

在网上找了很多关于度量、指标、维度的资料。这几个词可以从《统计学》到《软件运营》、再从《分析指标体系》到《软件过程度量模型》。就这几个词我找了很大一圈还是没有找到很好的解释,所以,我就妄自尊大的自己对度量指标进行一个解释:

度量是指对于一个物体或是事件的某个性质给予一个数字,使其可以和其他物体或是事件的相同性质比较。度量可以是对一 物理量(如 长度、尺寸或 容量等)的估计或测定,也可以是其他较抽象的特质。

指标 : 预期中打算达到的指数、规格、标准

度量出自维基百科,指标出自以上是从Wiki上找到的介绍。简单的看度量就是描述事物的一个特定方面的数字。

度量指标(Metrics) : 指用于描述一个物体或事物的某个性质的指数、规格、标准,使其可以和其他的物体或者事物的提交。

从软件的角度讲度量即把所有东西都量化、数据化、可采集。指标即表示对这些量化后的数据的目标值。维度即标识一个事物某一个侧面的一组指标。

软件指标定义:

大概说明了度量指标的内容之后,接下来以工程化实施方案的思维方式思考如果要实施度量指标需要完成怎样的工作。借鉴一些ToGAF的概念,每一项事都是需要有目标的,在目标的指导下去做具体的实施工作。度量指标工作具体的实施步骤如下:

  1. 制定度量指标所关心的目标,所要解决的问题;(明确要解决的问题域)
  2. 建立一套针对问题域的分析方法,并找到要进行分析的数据域;(制定方法论,解决域)
  3. 对数据域中的数据进行可度量化的拆解与分析;(度量指标拆解)
  4. 针对解决域中的方法以及分解出的具体指标,制定实施方案;(具体实施)
  5. 实施完成后可以产出数据与报表。针对结果进行评估平调整整个解决过程。(持续优化)
  • 指标系统目标:

“指标体系”这个概念是应用比较广泛的,我们从正式出版物中摘取一个定义:指标体系,即统计指标体系,是由一系列具有相互联系的指标所组成的整体,可以从各个侧面完整地反映现象总体或样本的数量特征。

统计指标体系从其功能和作用不同,可分为描述统计指标体系,评价统计指标体系和预警统计指标体系三种。描述统计指标体系是由若干对社会经济活动状况做出完整而系统描述的基础指标所组成的。评价统计指标体系是由若干对社会经济行为结果进行比较、评估、考核,以检查其工作和综合效益的统计指标所组成。预警统计指标体系主要用于对社会经济宏观运行的监测,并根据指标值的变化,预报社会经济即将出现的不平衡状态、突发事件及某些结构性障碍等。

引自《统计学教程》(主编:王怀伟 清华大学出版社)
度量体系

从上图可以看到在软件行业内指标体系可以分为很多种。最终对客户有意义的,有价值的肯定是运营指标体系。运行软件指标体系是本次的目标,主要描述软件运行过程中的一些参数。《软件过程指标》、《软件指令指标》、《DevOps指标》都是软件在开发以及运营过程中的软件过程指标。

下图中是指标体系的一个实例,用于描述DevOps指标体系中的一些指标:
DevOps之度量体系
这个实例中描述了DevOps的几个指标。主要的指标目标是为了体现DevOps怎样为客户提供价值,并在这个基础上提出适应多变的环境(需求环境,开发环境,质量环境,过程环境等)。

真对于软件运行指标体系的目标是提高稳定性,减少故障,降低运营成本。

  • 指标分析方法与选型:

在驱动指标体系搭建形成闭环的最后一步就是数据应用,在采集的数据验证无误后应用于实际业务中,驱动业务增长。常用的分析理论有:4P理论、PESTEL理论、SWOT理论、5W2H理论、逻辑树理论、用户使用行为理论、AARRR理论。可以参照:数据分析方法论(二)——常用数据分析方法

真对于软件运行指标体系的目标,分析方法需要满足故障检测,平稳程度,自动化程度几个方向。分析方法以统计方法为主,统计故障情况,统计自动化占比,统计测试质量等。

  • 度量指标体系:

上面说明了度量指标的目标和指标分析方法。都是一些通用性的分析,未对某一个特定领域中的指标体系进行分析。一个特定领域中的指标体系包括的内容有哪些,这些内容起着怎样的作用。这些内容会在本节加以分析与描述。

先给出一个指标体系的整体架构:
指标体系结构
上图出自数据体系搭建 | 梳理架构和指标体系,类似于软件指标定义中提到的内容一个指标体系从上到下可以分为:分析(模型,方法),数据可视化,基础数据平台部分。

分析方法:
在整个指标体系中分析方法提供跟业务相关的,对业务负责的内容。因为分析方法是根据要解决的问题域进行建立的,并对业务是有意义的。分析方法是多变的,在针对同样的行业、同样的场景、不同的公司时使用的分析与建模的方法都可能是不同的。因为分析方法是真对大环境去把控的,所以,需要做的是真对这些元知识(分析方法),进行分析与总结之后在应用于不同的场景。

从某个侧面来说,数据分析技术(大数据,BI等)最终有意义的方面都是分析方法。具体使用哪项分析方法,怎样做展示其实对整个数据分析来说意义不大。

数据可视化:
数据需要展示出来才可以体现出数据的意义,所以,就像敏捷中“交付价值”一样。数据有了必须要提供价值才可以展现出数据的意义。这里的数据可视化的方式还是需要针对度量进行相关的分析与展示的,或者直接使用相关的内容进行展示的能力。下面说明另种可以进行定制化的展示的可视化工具。

数据基础平台:
数据基础平台即包括数据采集,数据接收,数据存储,数据分析基础等内容。主要满足基础的数据处理要求,可以与现在流程的DMP概念认为是等同的。大数据的基础也就是:
数据基础平台基础栈
数据收集部分这里写的不是很完全,数据接收、存储、分析都还算比较完善,不过也没有做更多的深入。在之后的实施部分里会说明本文的技术选型。

  1. Grafana是一个开源的度量分析和可视化套件。它最常用于可视化基础设施和应用程序分析的时间序列数据,但也用于许多其他领域,包括工业传感器,家庭自动化,天气和过程控制。
  2. Kibana是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

至于其他的指标可视化工具:Tableau,FindReport,Splunk。都是商业版软件,不适合在小公司使用。所以,不会选择这些商业化软件。

  • 度量指标拆解:

上面定义了软件指标的目标以及方法,现在需要将度量指标体系确定并细化到可度量级别。所以,就需要对指标进行拆解工作。
事件、参数和属性

事件、参数和属性说明:先给大家解释三个概念,事件、参数和属性。事件可以理解为用户的某个行为,比如登录、注册、购买,都统称为事件;事件和参数结合起来就是指标,比如登录次数、注册人数、购买金额这些我们称为指标,而次数、人数、金额就是事件的参数。事件属性可以从某个维度对事件进行拆分分析,比如登录方式就是登录的属性,分析不同登录方式的登录次数。

上图为运营指标的实例,软件运行指标体系的例子服务从异步消息系统接收到一个消息。事件即接收到消息,参数可以是处理时长(消息处理时长以及消息处理事件)。指标是处理时长必须在10ms之内。属性是消息可以是定时任务,异步任务等等。

下面会具体的介绍软件运行指标体系中会涉及到的度量。

类别 信息 触发机制 单位 说明
jvm 系统内存总量 定时 Kb mem
jvm 空闲内存数量 定时 Kb mem.free
jvm 处理器数量 初始化 processors
jvm 系统正常运行时间 定时 毫秒 uptime
jvm 应用上下文正常运行时间 定时 毫秒 instance.uptime
jvm 系统平均负载 定时 百分比 systemload.average
jvm 堆信息 定时 Kb heap,heap.committed,heap.init,heap.used
jvm 线程信息 定时 threads,thread.peak,thead.daemon
jvm 类加载信息 定时 Info classes,classes.loaded,classes.unloaded
jvm 垃圾收集信息 定时 gc.xxx.count, gc.xxx.time
tomcat 容器session 定时 httpsessions.active,httpsessions.max
数据库 连接 定时 最大连接数, 最小连接数, 活动连接数,连接池的使用情况
...

指标分类:

软件本来就是数字化的事物,不过就是涉及到度量的维度。根据度量维度的不同,可能会涉及到很多模糊不清的指标。所以针对每一个度量指标必须遵循SMART原则:

  1. S代表具体(Specific)
  2. M代表可度量(Measurable)
  3. A代表可实现(Attainable)
  4. R代表现实性(Realistic)
  5. T代表有时限(Timebound)

这样既有度量目标,又可以具体的去实施。不存在不可度量的指标,方便具体的落地实施工作。

  1. Counter(计数器)

Counter是一个累计度量指标,它是一个只能递增的数值。计数器主要用于统计服务的请求数、任务完成数和错误出现的次数等等。计数器是一个递增的值。

  1. Gauge(测量器)

Gauges是一个最简单的计量,一般用来统计瞬时状态的数据信息。它表示一个既可以递增, 又可以递减的值。比如系统中处于pending状态的job。

  1. Histogram(柱状图)

Histograms主要使用来统计数据的分布情况,最大值、最小值、平均值、中位数,百分比(75%、90%、95%、98%、99%和99.9%)。

  1. Meters(码表)

Meters用来度量某个时间段的平均处理次数(request per second),每1、5、15分钟的TPS。比如一个service的请求数,通过metrics.meter()实例化一个Meter之后,然后通过meter.mark()方法就能将本次请求记录下来。统计结果有总的请求数,平均每秒的请求数,以及最近的1、5、15分钟的平均TPS。

  1. Timers(计时器)

Timers主要是用来统计某一块代码段的执行时间以及其分布情况,具体是基于Histograms和Meters来实现的。

以上的度量指标分类是从Metrics-Java版的指标度量工具之一
Metrics Core整理出来的。

总结:

本阶段主要分析了度量指标的成因,以及度量指标中相关的分类方法。所以,这里只介绍了度量指标的前期概念。在下面一篇文章中给出相关的技术设计以及具体实践。

参考:

度量
互联网运营,该分析哪些数据和指标
数据分析方法论(一)——构建数据指标体系
数据分析方法论(二)——常用数据分析方法
创业公司如何构建数据指标体系?
电商数据分析基础指标体系
如何搭建指标体系
从 0 到 1 搭建数据运营体系
数据体系搭建 | 梳理架构和指标体系

监控:

metrics
Metrics-Java版的指标度量工具之一
JAVA Metrics度量工具 - Metrics Core 翻译
第 44 课 度量指标(Metrics)
度量指标类型

软件度量指标:

智能分析最佳实践——指标逻辑树
利用Metrics+influxdb+grafana构建监控
基于dropwizard/metrics ,kafka,zabbix构建应用统计数据收集展示系统

软件过程度量指标:

软件度量
軟體度量
软件过程质量度量与控制
软件过程度量模型
软件度量与软件过程管理
质量度量指标设定分析-1
常见软件项目度量指标介绍
敏捷软件估算和度量

目录
相关文章
|
2天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成
【8月更文挑战第29天】本文深入探讨了DevOps文化中的两大核心实践——自动化部署和持续集成。通过介绍这两个概念,解释了它们如何相互促进并提升软件开发的效率和质量。文章将展示具体的代码示例,指导读者如何在实际项目中实现这些实践,以及如何从中受益。
|
1天前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
1天前
|
Kubernetes API 持续交付
构建高效微服务架构:策略与实践
【8月更文挑战第30天】 在当前软件开发领域,微服务架构已经成为促进系统灵活性、扩展性及维护性的关键设计哲学。本文将深入探讨构建高效微服务架构的实用策略和具体实践,旨在为开发者提供一套系统的方法论,以优化其服务的分解、部署与管理过程。我们将从微服务的核心优势出发,分析设计原则,并结合实际案例来展示如何克服常见的挑战。
|
1天前
|
监控 安全 Devops
DevOps实践:持续集成和部署的自动化之旅
【8月更文挑战第30天】在软件开发的快节奏世界中,DevOps已成为推动项目成功的关键因素。本文将深入探讨如何通过持续集成(CI)和持续部署(CD)实现自动化,以加速开发流程、提升软件质量并确保快速交付。我们将从基础概念出发,逐步过渡到实际操作,最后讨论如何克服实施过程中的挑战。
|
2天前
|
设计模式 关系型数据库 持续交付
构建高效可靠的微服务架构:策略与实践
【7月更文挑战第60天】在现代软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发者将应用程序拆分成一组小型、松散耦合的服务。本文将深入探讨如何构建一个高效且可靠的微服务系统,涵盖关键设计原则、技术选型以及实践中的注意事项。我们将通过分析具体案例来揭示微服务的优势与挑战,并提供实用的解决方案和最佳实践。
|
3天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
1天前
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
1天前
|
监控 安全 Devops
DevOps实践:从代码到部署的无缝过渡
【8月更文挑战第30天】本文通过深入浅出的方式,向读者展示了DevOps文化和实践如何帮助团队实现从代码编写到软件部署的高效、自动化流程。我们将探讨持续集成(CI)、持续交付(CD)以及监控和日志记录的最佳实践,旨在为希望优化软件开发周期的专业人士提供实用指南。文章不展示具体代码示例,而是聚焦于概念理解和实践应用,确保内容即便在没有代码的情况下也具有实质性价值。
|
1天前
|
监控 Devops jenkins
DevOps实践:持续集成与部署的自动化之旅
【8月更文挑战第30天】本文旨在揭示DevOps文化中,持续集成和持续部署(CI/CD)如何成为现代软件开发的加速器。我们将深入探讨自动化流程的构建,从代码提交到产品上线的无缝衔接,以及这一过程如何提升团队协作、加快交付速度并保障产品质量。文章不仅分享理论知识,还提供实用的代码示例,帮助读者将抽象概念转化为具体操作。
|
1天前
|
监控 Cloud Native 微服务
云原生时代下微服务架构的探索与实践
【8月更文挑战第30天】在数字化浪潮中,云原生技术以其灵活、可扩展的特性成为了企业数字化转型的重要推动力。本文将深入探讨云原生环境下微服务架构的设计原则、关键技术及应用实践,旨在为读者揭示如何通过微服务架构提升业务的敏捷性与创新能力。文章结合具体代码示例,详细阐述微服务拆分策略、容器化部署、服务网格等关键实施步骤,助力开发者和架构师构建高效、可靠的分布式系统。
下一篇
云函数