微服务:监控体系,容器监控

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 微服务:监控体系,容器监控

微服务长什么样

微服务架构本质是带自身特点的面向服务的分布式架构模式

微服务架构特征是有更细粒度服务边界,倡导独立开发、测试、部署、扩展等等,更细粒度带来的敏捷提升,以及分布式系统固有的复杂性。

 

服务治理

为什么需要监控?

微服务是一个分布式的架构模式,它一直以来都会有一些自身的问题。

  • 以问题的形式来理解为什么需要监控体系,也是我们需要监控体系的理由

 

首先是问题的定位。

当系统发从单个节点扩张到很多节点的时候,如果系统的某个点出现问题,对于我们的运维和开发人员来说,这时的问题定位可能就会变成一个挑战。

  1. 分散在各个服务器上的日志如何处理
  2. 业务流程出现问题,如何快速的定位问题发生在哪个环节、哪个点


数据支撑

新的业务进来以后,系统能否支持,系统运行的状况又是怎样

还有现在的一些电商要做促销活动,容量规划怎么做

我们可以通过监控手段对系统进行衡量,或者做一个数据支撑。


对服务的系统认知

要理解分布式系统是怎样一个拓扑结构,如何部署,系统之间怎样通信,系统目前是怎样的性能状况,以及出了问题我们要怎么去发现它。

  1. 如何跟踪业务流的处理顺序和处理结果
  2. 如何实现事故的预警,如资源不足
  3. 如何分析系统的性能瓶颈

这些都可能是分布式系统需要面对的问题。出现这些问题后,监控就是一个比较常用、有效率的一个手段。

总的来说,监控主要解决的是感知系统的状况。


要监控什么

 

  • 服务概览信息:如服务名称、服务部署所在机房、主机、服务包含的API、服务相关配置信息、服务负责人、开发人员、运维人员信息等
  • 服务性能指标:如响应实现、流量、成功、失败数、请求频率等
  • 服务拓扑关系:服务之间的调用关系
  • 服务调用链:服务的整个调用链监控
  • 服务版本信息:服务版本,客户端版本等
  • 服务治理状态:服务注册情况、服务状态、熔断等
  • 组件内部状态:活跃线程数、处理请求数等


监控体系和内容

监控体系从底到上分为:基础设施监控、系统层监控、应用层监控、业务层监控、端用户体验监控

监控的内容分为五个部分:日志监控,Metrics监控(服务调用情况),调用链监控,告警系统和健康检查。

日志监控,国内常用的就是ELK+KAFKA来实现。健康检查和Metrics,像spring boot会自带。


Trace调用链监控

调用链监控是用来追踪微服务之前依赖的路径和问题定位。例如阿里的鹰眼系统。主要原理就是子节点会记录父节点的id信息。

 

下图是目前比较流行的调用链监控框架。

 


基于容器的微服务监控

对于微服务系统来说,相对比较复杂的是监控,容器编排,还有日志收集,容器编排目前有很好的实现,比如Kubernetes, Swarm, Mesos,等等,这些都解决了容器的编排问题,这里之所以提到容器编排,是因为微服务的落地比较好的实现方式就是运行在容器当中,多亏了这些开源组件的存在,很多微服务所要考虑的问题都被集成到这些平台中了。

那么对于这种多说上千万个虚拟容器的大集群来说,监控到底怎么实现呢?

基于容器的微服务监控大致可以分为,容器与宿主机的监控(基础监控),API监控,调用链监控以及应用本身的监控

 


1. 容器与宿主机的监控

基于容器的微服务监控和原始的监控是有很大区别的,因为服务的实例生存周期很短,分分钟可能就会有容器的生灭

微服务的容器与宿主机的监控离不开CPU,内存,磁盘,网卡这些基础的性能指标。

对于宿主机的监控来说,我们可以依然使用原始的监控方式,每个宿主机安装一个代理来采集服务器的性能指标,代理在采集性能指标的时候可以打上时间戳和相应的标签来区分不同性能指标的数据维度(metric),然后将监控数据汇总到时间序列数据库,里面的数据可以对接目前一些开源的组件来进行可视化的展示,也可以对接报警服务(结合报警服务的报警策略)进行报警。

容器的监控自然就和宿主机不太一样了,我们不能说给每个容器镜像内部都集成一个监控代理(agent),这样的话侵入性太强, 不易于维护。目前有比较成熟的开源产品Prometheus,它有很多的Exporter可以用来采集监控数据,例如我们想采集Kubernetes上所有容器(pod)的性能指标的话,Promethus可以通过直接配置多个Kubernetes ApiServer的Endpoints来监控整个Kubernetes集群。


2.API监控

微服务对外暴露的api都是经过服务网关来访问的,那么我们可以在网关上对这些api进行流量的分析与监控,监控api的访问量,api的响应体状态码,当某些指标达到阀值时我们就可以进行报警,目前也有很多开源的产品可以使用,例如Kong,它可以安装很多功能性插件,其中就有dashboard插件,以及监控插件。


3.调用链监控

有了对整个微服务调用链的监控,我们就会有一种一览全局的感觉,对整个微服务集群的部署情况,以及运行情况了如指掌,可以很快的定位问题,协同开发人员进行性能调优,量化运维部门的价值。目前有谷歌的Google Dapper但是没有开源只有论文,Zipkin, OpenTracing,这些都是根据谷歌的论文开发的开源产品都很不错。


4.应用本身的监控

微服务应用本身的监控的方式就比较多样了。这里我就说一下我自己基于Kubernetes实现的微服务应用级的监控插件,先上个图:

 

 

在Kubernetes的master节点,也就是安装apiserver的那台服务器上运行一个监控插件,该插件可以通过一个kubernetes提供的官方客户端来访问apiserver,首先我们要告知插件要监控哪个namespace下的哪个service,然后,插件通过和apiserver进行交互获取某个service下所有Pods的实例,插件会并发访问所有pod提供的/metrics接口(Path可配),并给每个pod的返回数据(json格式,遵守一定的数据格式契约)打上pod_name的标签来标识每个pod返回的metrics,打上pod_name标签的同时也会打上service_name的标签用来区分具体是哪个service的监控数据。通过插件收集整理后的数据会上传到时间序列数据库中,后续就可以根据数据进行可视化分析以及展示(Granfana),同样若是结合开源监控Prometheus, OWL也可以实现监控报警,只不过结合不同的监控需要返回它们所需要的监控数据格式罢了。

 

参考链接:

https://juejin.im/post/5add3b05f265da0b80705525

https://blog.csdn.net/crave_shy/article/details/81334845



相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
17天前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
日志收集和Spring 微服务监控的最佳实践
|
1月前
|
存储 Prometheus 监控
从入门到实战:一文掌握微服务监控系统 Prometheus + Grafana
随着微服务架构的发展,系统监控变得愈发重要。本文介绍如何利用 Prometheus 和 Grafana 构建高效的监控系统,涵盖数据采集、存储、可视化与告警机制,帮助开发者提升系统可观测性,及时发现故障并优化性能。内容涵盖 Prometheus 的核心组件、数据模型及部署方案,并结合 Grafana 实现可视化监控,适合初学者和进阶开发者参考实践。
321 6
|
9天前
|
监控 Kubernetes Java
使用 New Relic APM 和 Kubernetes Metrics 监控 EKS 上的 Java 微服务
在阿里云AKS上运行Java微服务常遇性能瓶颈与OOMKilled等问题。本文教你通过New Relic实现集群与JVM双层监控,集成Helm部署、JVM代理注入、GC调优及告警仪表盘,打通从节点资源到应用内存的全链路观测,提升排障效率,保障服务稳定。
63 0
|
2月前
|
存储 监控 Shell
SkyWalking微服务监控部署与优化全攻略
综上所述,虽然SkyWalking的初始部署流程相对复杂,但通过一步步的准备和配置,可以充分发挥其作为可观测平台的强大功能,实现对微服务架构的高效监控和治理。尽管未亲临,心已向往。将一件事做到极致,便是天分的展现。
|
9月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
10月前
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
350 82
|
7月前
|
人工智能 Prometheus 监控
容器化AI模型的监控与治理:确保模型持续稳定运行
在前几篇文章中,我们探讨了AI模型的容器化部署及构建容器化机器学习流水线。然而,将模型部署到生产环境只是第一步,更重要的是确保其持续稳定运行并保持性能。为此,必须关注容器化AI模型的监控与治理。 监控和治理至关重要,因为AI模型在生产环境中面临数据漂移、概念漂移、模型退化和安全风险等挑战。全面的监控涵盖模型性能、数据质量、解释性、安全性和版本管理等方面。使用Prometheus和Grafana可有效监控性能指标,而遵循模型治理最佳实践(如建立治理框架、定期评估、持续改进和加强安全)则能进一步提升模型的可信度和可靠性。总之,容器化AI模型的监控与治理是确保其长期稳定运行的关键。
|
7月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
7月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
9月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
493 24