使用埋点方式对应用监控

在指标监控的世界里,应用和业务层面的监控有两种典型手段,一种是在应用程序里埋点,另一种是分析日志,从日志中提取指标。埋点的方式性能更好,也更灵活,只是对应用程序有一定侵入性,而分析日志的话对应用程序侵入性较小,但由于链路较长、需要做文本分析处理,性能较差,需要更多算力支持。

所谓的埋点,就是指应用程序内嵌了埋点的 SDK(一个 lib 库),然后在一些关键代码流程里调用 SDK 提供的方法,记录下各种关键指标。比如某个 HTTP 服务,提供了 10 个接口,每个接口的处理花费了多少毫秒,就可以作为指标记录下来。

核心原因是 SDK 可以帮我们封装一些通用的计算逻辑。比如有个指标是 Summary 类型,可以提供某个接口 99 分位的延迟数据。如果没有 SDK,我们需要怎么做呢?每当这个接口响应一次请求,就记录一个延迟时间,然后存入一个内存数据结构,等到一个时间间隔,比如 10 秒钟,就把这段时间内所有的延迟数据排个序,然后取 99 分位的值,最后调用 Pushgateway 的接口推过去。很麻烦是不是?

而 SDK 就是做这些通用逻辑的,应用程序要做的,就是拿到延迟数据之后,调用 SDK 的方法告知 SDK,说又有一次新的接口调用,延迟数据是多少,SDK 就能完成剩余所有的事情。

界比较知名的跨语言埋点工具是 StatsD 和 Prometheus。当然,有些语言有自己生态的常用工具,比如 Java 生态的 Micrometer,不过一般公司都会使用多种语言,这些跨语言的埋点方案通常使用频率会更高。

StatsD 有个很大的特点是使用 UDP 传输协议,大部分计算逻辑都挪到了 StatsD 的 Server,SDK 层面的工作非常轻量。

StatsD SDK 与 StatsD Server 之间通信使用的是 UDP 协议,UDP 协议是 fire-and-forget,无需建立连接,即使 StatsD Server 挂了,也不影响应用程序,而对于延迟分布区间这样的计算逻辑,是在 StatsD Server 里计算的,也不会影响应用程序,所以整个 StatsD 的设计是非常轻量的,对应用程序基本没有影响。

由于 StatsD 相当知名,所以很多采集器都实现了 StatsD 的协议,比如 Telegraf、Datadog-agent,也就是说,图上的 StatsD Server 是可以换成 Telegraf 或 Datadog-agent 的。这样就不用部署太多进程,一个采集器包打天下,就拿 Telegraf 来说吧,替换后架构就变成了这样。

Prometheus 的埋点方式跟 StatsD 很像,对于请求数量和延迟这样的监控指标,也是在请求处理完成之后,调用 SDK 的方法进行记录的。不过,如果每个方法都要加这么几行代码就显得太冗余了,最好还是通过 AOP 的方式做一些切面逻辑,Nightingale 的 Webapi 模块就是这么干的。

Webapi 的职能是提供一系列 HTTP 接口给 JavaScript 调用,我们需要监控这些接口的调用量、成功率、延迟数据。埋点之前我们先规划一下标签,我们给每个 HTTP 接口规划 4 个标签。

  • service:服务名称,要求全局唯一,可以和其他服务区分开。
  • code:HTTP 返回状态码,可以根据这个信息得知 4xx 的比例是多少,5xx 的比例是多少,计算成功率。
  • path:接口路径,比如 /api/v1/users ,有时候我们会在接口路径中放置 URL 参数,比如 /api/v1/user/23、/api/v1/user/12 是请求 id 为 23 和 12 的用户信息。这个时候不能直接把这个 URL 作为接口路径的标签值,否则这个指标颗粒度就太细了,应该把接口路径的标签值设置成 /api/v1/user/:id。
  • method:HTTP 方法,GET、POST、DELETE、PUT 等。

使用 StatsD 的埋点方式,数据通过 UDP 推给 Telegraf,Telegraf 推给后端监控系统。如果是通过 Prometheus 的方式来埋点,就是暴露 /metrics 接口,等待监控系统来拉。如果应用是部署在物理机或虚拟机上,直接通过本地的监控 agent 来拉取即可。如果应用是部署在 Kubernetes 的 Pod 里,则有两种办法来拉取数据,一个是 Sidecar 模式,一个是中心端服务发现的模式。下面这个示意图展示的是 Sidecar 模式。

 左侧 Pod1 里有两个容器,App 通过 StatsD 埋点,然后通过 UDP 推给 Telegraf,Telegraf 接收到数据之后做二次计算,把结果推给监控服务端;右侧 Pod2 里也有两个容器,App 通过 Prometheus SDK 埋点,暴露 /metrics 接口,Categraf 通过这个接口拉取数据,然后推给监控服务端。

这种方式的优点是比较灵活,Pod 内怎么做应用自己说了算。即使给 /metrics 接口增加一些认证鉴权、指标过滤、扩展标签的逻辑,都不影响其他的 Pod。数据是推给监控服务端的,监控服务端接收数据的组件可以做成无状态集群,前面架设负载均衡,整个架构非常简单、扩展性也很好。当然缺点也很明显,每个 Pod 里都伴生 Sidecar agent,浪费资源。

 

此文章为8月Day12学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380307.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

PHP傻瓜也能搭建自己框架

PHP最简单自定义自己的框架(一) PHP最简单自定义自己的框架创建目录结构(二) PHP最简单自定义自己的框架定义常量自动生成目录(三) PHP最简单自定义自己的框架控制器自动加载运行(四&#xf…

日期计算器输入天数计算日期_计算日期范围内的活动

日期计算器输入天数计算日期 Todays challenge is to count how many guests stayed at a hotel, in a specific date range, based on the guest arrival and departure dates. 今天的挑战是,根据客人的到达和离开日期,计算在特定日期范围内在酒店住宿…

【nacos】Param ‘serviceName‘ is illegal, serviceName is blank

报错信息 解决方式 一&#xff1a;缺少依赖 SpringBoot2.4之后不会默认加载bootstrap.yaml&#xff1b;需要手动在pom中加入如下依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-boot…

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是&#xff1a; DFA&#xff08;确定性有限状态自动机&#xff09; NFA&#xff08;非确定性有限状态自动机&#xff09; 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…

快手在线查询权重网站源码+接口

简介&#xff1a; 快手在线查询权重源码次快手权重查询优化了算法&#xff0c;修复很多之前抖音遇到的算法上的bug&#xff0c;不再有随机数&#xff0c;每一项都是根据实际情况固定输出&#xff08;包括评分&#xff0c;发作品时间等等&#xff09; 新增用户访问ip&#xff0…

抖音皮皮虾快手无水印解析软件

介绍&#xff1a; 有一张图是获取快手cookies的方法&#xff0c;就从&#xff1a;https://live.kuaishou.com/ 登录后取出&#xff0c;随便点个链接都有啦。 网盘下载地址&#xff1a; https://zijiewangpan.com/qfNsBxGVNEs 图片&#xff1a;

集合数据类型

非数字型 列表[]&#xff08;其他语言叫数组&#xff09; 注意点&#xff1a;第一个成员的索引编号为0&#xff0c;不能访问不存在的索引编号 # list是列表变量名&#xff0c;列表中有三个成员 list[刘备,曹操,关羽] print(list[0]) print(list[1]) print(list[2]) print(li…

粘福卡多次扫,绝对真实!!!

转载于:https://www.cnblogs.com/angusbao/p/10336782.html

集五福编程c语言,支付宝如何快速集齐5张福卡 支付宝2020集五福攻略技巧

1月13日&#xff0c;支付宝2020集五福活动正式开始&#xff0c;活动一直持续到1月24日&#xff0c;也就是除夕夜。今年支付宝集五福活动延续了往年的玩法&#xff0c;包括AR扫福字、蚂蚁森林浇水得福字等。在此基础上&#xff0c;今年支付宝带来了全新的全家福卡。所有集福卡的…

支付宝福卡破解——居中的ViewPager

支付宝福卡功能刚出来&#xff0c;我就对支付宝福卡的UI实现很感兴趣。第一是因为福卡的UI比较新颖而且不久前做的项目跟福卡UI有些类似&#xff0c;第二也是很想知道支付宝这样的大厂会不会更优雅地实现福卡的UI。 1、使用hierarchyviewer查看发现福卡的容器是com.alipay.and…

支付宝福卡破解——咻一咻的ui怎么实现

通过春节的无节操营销&#xff0c;支付宝的咻一咻功能让许多人手酸过、心酸过&#xff08;没能中敬业福&#xff09;&#xff0c;在吐槽之余好奇的程序员总会猜想这ui怎么实现的呢&#xff1f; 在不看smali代码的情况下应该都会猜想咻一咻的ui实现是这样的&#xff1a;点击一下…

JAVA实现微博财神卡自动换卡,秒福卡

不废话先看图 QQ20180209-071517.png Untitled2.gif 接下来是步骤 1.提取你新浪微博的cookie,简单吧&#xff01;2.安装JAVA环境 简单吧&#xff0c;自己百度吧&#xff01;3.修改代码重点&#xff0c;敲黑板 一共有两个文件 Posttijiao的49行和HttpLogin的54行,都改成你的co…

TCP协议的报头格式和滑动窗口

文章目录 TCP报头格式端口号序号和确认序号确认应答&#xff08;ACK&#xff09;机制超时重传机制 首部长度窗口大小报文类型URGACKSYNPSHFINRST 滑动窗口滑动窗口的大小怎么设定怎么变化滑动窗口变化问题 TCP报头格式 端口号 两个端口号比较好理解&#xff0c;通过端口号来找…

福卡红包V3.0.1全开源解密版

简介&#xff1a; 1、优化响应速度 怎么玩这个福卡红包福卡红包V3.0.1全开源解密版&#xff1a; 1、简单说明 由于红包现在低1块钱&#xff0c;对一般的运营者来说成本不低&#xff0c;除非让商家出钱&#xff0c;所以吸粉并不划算&#xff0c;这个模块我认为适合做广告推广&a…

高压放大器如何正常使用的呢

高压放大器是一种用于将低电压信号转换成高电压信号的电子设备。它广泛应用于通信、雷达、医疗设备等领域。正确使用高压放大器对于保证设备的正常运行和延长使用寿命至关重要。下面安泰将介绍高压放大器的使用方法和注意事项&#xff0c;帮助您更好地了解如何正确使用高压放大…

3.2 Tomcat基础

1. Tomcat概述 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器。 Tomcat版本&#xff1a;apache-tomcat-8.5.76。 2.IDEA集成Tomcat 第一步 第二步 第三步 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff0…

【Java多线程】CompletableFuture 异步多线程

1. 回顾 Future 一些业务场景我们需要使用多线程异步执行任务&#xff0c;加快任务执行速度。 JDK5新增了Future接口&#xff0c;用于描述一个异步计算的结果。 虽然 Future 以及相关使用方法提供了异步执行任务的能力&#xff0c;但是对于结果的获取却是很不方便&#xff0…

Kotlin 基础教程一

Kotlin 基本数据类型 Java | Kotlin byte Byte short Short int Int long Long float Float double Double boolean Boolean c…

php怎么实现拼图功能,照片拼图效果怎么做 将一张照片制作成拼图的效果

最近的电影少年的你上映几天了&#xff0c;该电影是校园欺凌题材&#xff0c;听说剧情的深度可以给观众带来沉思&#xff0c;看到消息说今天这部电影也是突破六亿票房&#xff0c;也是厉害的了&#xff0c;找个时间真想去看看呢&#xff01;好啦&#xff0c;回归主题&#xff0…

Gradio:交互式Python数据应用程序的新前沿

一、说明 什么是Gradio以及如何使用Gradio在Python中创建DataApp或Web界面&#xff1f;使用 Gradio 将您的 Python 数据科学项目转换为交互式应用程序。 摄影&#xff1a;Elijah Merrell on Unsplash Gradio是一个Python库&#xff0c;允许我们快速为机器学习模型创建可定制的接…