首页 > 其他分享 >多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布

多语言应用监控最优选,ARMS 应用监控 eBPF 版正式发布

时间:2023-12-27 23:55:52浏览次数:35  
标签:监控 eBPF demo arms ARMS 集群 应用

作者:古琦、千陆、彦鸿

随着 Kubernetes 、Serverless 等云原生技术引领研发、运维模式变革。应用架构从单体架构逐步演进为分布式、微服务化应用,随着业务的发展,多语言、多框架、多协议的微服务在企业内部越来越多,微服务的复杂度越来越高,如何通过可观测来快速发现、定位微服务的问题,对于运维人员、开发人员都非常重要。

如何得知应用当前的运行架构、上下游依赖是否正常、流量是否正常这些都是可观测上重要的产品能力,随着微服务类型的增多,不同的语言、不同的框架、不同的如何进行埋点、不同的协议如何处理、是否对性能有影响,这些都影响了微服务可观测能力的建设。为了满足全场景、端到端的应用监控需求,应用实时监控服务 ARMS 推出应用监控 eBPF 版,通过 eBPF 技术完善整个应用监控的体系,接下来将重点介绍应用监控 eBPF 版。

使用场景

随着公司业务的发展,微服务数量变的越来越多,在不同业务中也会使用一些特定语言来编写应用,导致常用的应用可观测无法满足这种复杂场景,同时非 Java 的语言大部分需要使用 SDK 的方式接入监控,大大降低了研发人员的工作效率,因此应用监控 eBPF 版主要用于解决多语言场景下的应用可观测问题,提供无侵入的、语言无关的可观测能力,同时针对 go 语言的微服务,我们后续将提供一些特定的监控能力,如 GC 监控、内存 Dump、Profiling 等能力。

什么是 eBPF

eBPF 技术是一种在 Linux 内核中运行沙盒程序,而无需更改任何源代码或加载任何内核模块,有以下特性:

  • 无侵入:成本极低,应用无需重启、无需修改代码
  • 动态可编程:不需要重启探针,动态下发采集脚本
  • 高性能:自带 JIT 编译成 native 代码
  • 安全:verifier 机制保障内核运行稳定

使用 eBPF 采集应用监控数据

eBPF Agent 在 Kubernetes 环境下是 以Daemonset 方式部署在每个节点上,在用户态通过 Load eBPF 的程序到内核中运行,采集到数据后发送到用户态进行数据处理,然后形成不同类型的指标。

eBPF 在可观测领域具备三个最重要的优势:

  • 无侵入: 用户不需要修改任何业务代码,eBPF Agent 通过节点部署的方式实现应用的网络数据监控,业务无感知。
  • 多语言、多框架、多协议: 由于 eBPF 探针的无侵入性,所以对微服务的语言、框架、协议没有限制,eBPF 采集到应用请求的网络数据后,eBPF Agent 可以对不同类型的协议进行解析、识别,同时支持不同的开发框架。

  • 全栈覆盖: 集从网络层到应用层的所有数据,实现全栈的覆盖,可以采集内核空间、用户空间中不同类型的数据,如内核空间的 TCP/UDP、Socket,用户空间的如 golang 的 net/http 库。

使用应用监控 eBPF 版进行应用可观测

  • 全局拓扑: 能够正确地反应当前运行的应用的调用关系,帮助用户感知整体微服务的架构,通过对比期望架构,发现问题,通常在新应用上线,新地区开服,整体链路梳理等场景使用。

  • 应用详情: 展示微服务的请求数、错误数、平均耗时、实例数、接口、CPU、内存等信息,能够完整的查看当前应用的运行情况。

  • 应用拓扑: 可以快速查看上游请求和下游依赖,以及自身服务实例的运行情况,进一步提升问题定位能力,通常在已经定位到某个异常节点后使用。

  • 实例监控: 查看应用运行的单个实例的请求数、错误数、平均延时,同时可以查看单个实例的Pod运行的容器监控。

  • 智能告警: 可以配置应用的主动告警的能力,如果请求数、延迟、错误数、Http状态码等告警。

如何接入应用监控 eBPF 版

(1)前提条件

  • 已开通 ARMS,具体操作,请参见开通和升级 ARMS [ 1]
  • 创建 Kubernetes 集群。目前应用监控 eBPF 版仅支持接入 ACK 集群,各集群创建方法如下:
    • 创建 Kubernetes 专有版集群 [ 2]
    • 创建 Kubernetes 托管版集群 [ 3]
  • 已确认当前环境支持应用监控 eBPF 版运行。更多信息,请参见应用监控 eBPF 版运行环境要求和限制 [ 4]

(2)接入说明

**为Kubernetes 集群安装以下监控组件即可将集群接入应用监控 eBPF 版:

  • Prometheus 监控组件

说明:应用监控 eBPF 版的指标类数据依赖 Prometheus 监控,因此您需要先安装 Prometheus 监控组件。

  • 应用监控 eBPF 版组件

安装前,需先检查目标集群是否存在 ARMS Addon Token,否则会出现权限不足的报错。若存在 ARMS Addon Token,ARMS 会进行免密授权,组件安装完成后,即可使用应用监控 eBPF 版;若不存在 ARMS Addon Token,则需要手动添加 ARMS 和链路追踪权限策略。查看 ARMS Addon Token 和手动添加权限策略方法如下:

查看集群是否存在 ARMS Addon Token。

  1. 登录容器服务管理控制台 [5 ] ,在集群列表页面,单击目标集群名称进入集群详情页。
  2. 在左侧导航栏选择配置管理 > 保密字典,然后在顶部选择命名空间为 kube-system, 查看 addon.arms.token 是否存在。

手动添加权限策略。

  1. 登录容器服务管理控制台。
  2. 在左侧导航栏选择集群, 然后单击目标集群名称。
  3. 在目标集群的集群信息页面上单击集群资源页签,然后单击 Worker RAM 角色右侧的链接。
  4. 在角色页面的权限管理页签上,单击新增授权
  5. 选择 AliyunARMSFullAccess 和 AliyunTracingAnalysisFullAccess 系统权限,然后单击确定

说明:Kubernetes 托管版集群:对于部分 Kubernetes 托管版集群,可能存在没有 ARMS Addon Token 的情况,因此,对于 Kubernetes 托管版集群,建议首先检查 ARMS Addon Token 是否存在。若不存在,仍需进行手动授权。

Kubernetes 专有版集群:默认不支持 ARMS Addon Token,需进行手动授权。

安装 Prometheus 监控组件

  1. 登录容器服务管理控制台,在集群列表页面单击目标集群名称。
  2. 在左侧导航栏,选择运维管理 > Prometheus 监控
  3. 如果 Prometheus 监控页面提示组件未安装,请执行下一步安装 Prometheus 监控组件。
  4. 在 Prometheus 监控页面,单击开始安装

ACK 控制台将会自动安装 Prometheus 监控组件。

说明:命名空间默认为 arms-prom。

(4)安装应用监控 eBPF 版组件

a. 为已有应用安装组件

  1. 登录容器服务管理控制台,在集群列表页面单击目标集群名称。
  2. 在左侧导航栏,选择运维管理 > 集群拓扑。
  3. 在集群拓扑页面,单击开始安装。ACK 控制台将会自动安装应用监控 eBPF 版组件。

说明:命名空间默认为 arms-prom。

b. 新建应用时安装组件

  1. 登录容器服务管理控制台,在集群列表页面上的目标集群右侧操作列单击应用管理。
  2. 无状态页面右上角单击使用 YAML 创建资源。
  3. 选择示例模板,并在模板(YAML格式)中将以下 labels 添加到 spec.template.metadata 层级下。
labels:
  armseBPFAutoEnable: "on"
  armseBPFCreateAppName: "<your-deployment-name>"    //请将<your-deployment-name>替换为您的应用名称。

创建一个无状态(Deployment)应用并开启 ARMS 应用监控 eBPF 版的完整 YAML 示例模板如下:

apiVersion: v1
kind: Namespace
metadata:
  name: arms-demo
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-springboot-demo
  namespace: arms-demo
  labels:
    app: arms-springboot-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: arms-springboot-demo
  template:
    metadata:
      labels:
        app: arms-springboot-demo
        armseBPFAutoEnable: "on"
        armseBPFCreateAppName: "arms-k8s-demo"
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
          imagePullPolicy: Always
          name: arms-springboot-demo
          env:
            - name: SELF_INVOKE_SWITCH
              value: "true"
            - name: COMPONENT_HOST
              value: "arms-demo-component"
            - name: COMPONENT_PORT
              value: "6666"
            - name: MYSQL_SERVICE_HOST
              value: "arms-demo-mysql"
            - name: MYSQL_SERVICE_PORT
              value: "3306"
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-springboot-demo-subcomponent
  namespace: arms-demo
  labels:
    app: arms-springboot-demo-subcomponent
spec:
  replicas: 2
  selector:
    matchLabels:
      app: arms-springboot-demo-subcomponent
  template:
    metadata:
      labels:
        app: arms-springboot-demo-subcomponent
        armseBPFAutoEnable: "on"
        armseBPFCreateAppName: "arms-k8s-demo-subcomponent"
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
          imagePullPolicy: Always
          name: arms-springboot-demo-subcomponent
          env:
            - name: SELF_INVOKE_SWITCH
              value: "false"
            - name: MYSQL_SERVICE_HOST
              value: "arms-demo-mysql"
            - name: MYSQL_SERVICE_PORT
              value: "3306"
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: arms-demo-component
  name: arms-demo-component
  namespace: arms-demo
spec:
  ports:
    # the port that this service should serve on
    - name: arms-demo-component-svc
      port: 6666
      targetPort: 8888
  # label keys and values that must match in order to receive traffic for this service
  selector:
    app: arms-springboot-demo-subcomponent
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-demo-mysql
  namespace: arms-demo
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
          name: mysql
          ports:
            - containerPort: 3306
              name: mysql
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: mysql
  name: arms-demo-mysql
  namespace: arms-demo
spec:
  ports:
    # the port that this service should serve on
    - name: arms-mysql-svc
      port: 3306
      targetPort: 3306
  # label keys and values that must match in order to receive traffic for this service
  selector:
    app: mysql
--

ARMS 应用监控与应用监控 eBPF 版

ARMS 应用监控为 Java 服务提供无侵入的可观测能力,针对 Java 应用我们推荐大家接入 ARMS 应用监控,应用监控 eBPF 版因为其无侵入性,因此其提供语言无关的可观测能力,当前应用监控 eBPF 版只支持 Http 协议,其他协议陆续支持中,我们可以根据自身场景需要进行选型。

如果您在使用应用监控 eBPF 版中有任何问题,请联系答疑钉钉群(群号:35568145)获取帮助。

相关链接:

[1] 开通和升级 ARMS

https://help.aliyun.com/zh/arms/getting-started/activate-arms#concept-65257-zh

[2] 创建 Kubernetes 专有版集群

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-dedicated-cluster#task-skz-qwk-qfb

[3] 创建 Kubernetes 托管版集群

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb

[4] 应用监控 eBPF 版运行环境要求和限制

https://help.aliyun.com/zh/arms/application-monitoring-ebpf/getting-started/untitled-document-1698028648754

[5] 容器服务管理控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcs.console.aliyun.com%2F

点击此处,立即开通 ARMS 应用监控 eBPF 版。

标签:监控,eBPF,demo,arms,ARMS,集群,应用
From: https://www.cnblogs.com/alisystemsoftware/p/17931706.html

相关文章

  • 什么是革命性技术eBPF?为什么可观测性领域都得用它
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。如果有一种技术可以监控和采集任何应用信息,支持任何语言,并且应用完全无感知,零侵入,想想是不是很激动,那么这个技术是什么呢?就是eBPF,它应该是最近一两年非常热门的技术名词,我相信你或多或少都看到过,但......
  • 迅为RK3588开发板RTMP推流之视频监控之搭建 RTMP 媒流体服务器
    1.安装nginx+rtmp运行所要用到的库和依赖环境apt-getupdateapt-getinstallbuild-essentiallibpcre3libpcre3-devlibssl-devzlib1g-devopenssl2.下载nginx-1.20.2源码(下载地址:http://nginx.org/download/nginx-1.20.2.tar.gz)和nginx-rtmp-module(下载地址:hy......
  • 视频监控存储平台EasyCVR车载监控JT/T 808协议接入及场景应用
    JT/T808协议的全称是《道路运输车辆卫星定位系统终端通讯协议及数据格式》,也称为部标808协议,适用于GPS定位车载终端和监控平台之间的通信。本标准规定了道路运输车辆卫星定位系统车载终端与监管/监控平台之间的通信协议与数据格式,包括协议基础、通信连接、消息处理、协议分类与要......
  • 安防视频监控系统EasyCVR实现H.265视频在3秒内起播的注意事项
    可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,同时还具备权限管理、设备管理、鉴权管理、流......
  • 智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤
    视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,GB28181视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCVR支持多种播放协议,......
  • 可视化云监控/安防监控系统EasyCVR视频管理平台播流失败的原因(端口篇)
    安防视频监控EasyCVR平台兼容性强,可支持的接入协议众多,包括国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频流进行汇聚、转码与多格式分发,具体包括:RTMP、RTSP、HTTP-FLV、WebSo......
  • PMP-6.1 监控项目工作--工作绩效报告、变更请求
    #########################################在规划过程组中,制定项目管理计划属于项目整合管理。在执行过程组中,指导与管理项目工作和管理项目知识属于项目整合管理。监控项目工作和实施整体变更控制都属于项目整合管理领域。项目整合管理领域是对项目整体的控制的领域。#####......
  • Zabbix 监控Dell EMC Unity 480
    Zabbix监控DellEMCUnity4801、使用EMCUnityREST-APIv3,参考https://www.zabbix.com/integrations/emc?linkId=165523208https://github.com/aklyuk/zabbix-emc-unity 2、Zabbix注意事项 unity_get_state.py放入zabbix安装目录的externalscripts文件内,并赋予执行......
  • PMP-6. 监控过程组
    #########################################################所有以PMP-3开头的都是启动过程组的内容。所有以PMP-4开头的都是规划过程组的内容。所有以PMP-5开头的都是执行过程组的内容。这里给出的列表,只作为索引,具体的工具和使用,还是搜一下对应章节内容。 下面开始PMP-6......
  • day21 Prometheus Operator优化配置 -Prometheus Operator自定义监控对象(7.13-7.14)
    7.13-PrometheusOperator优化配置1、数据持久化1.1prometheus数据持久化默认Prometheus和Grafana不做数据持久化,那么服务重启以后配置的Dashboard、账号密码、监控数据等信息将会丢失,所以做数据持久化也是很有必要的。原始的数据是以emptyDir形式存放在pod里面,生命周期与po......