AWS ECS On Fargate 监控可观测最佳实践

概述

Amazon ECS on Fargate 为用户提供了简单、高效且可靠的容器化解决方案,使用户能够专注于应用程序开发和运行,而无需担心基础设施管理的复杂性。与其同时,用户需要实时了解在该环境中应用程序运行的性能、可用性、健康状况和资源使用情况。从而能够及时发现潜在问题并采取措施,帮助用户优化资源使用、感知问题和识别瓶颈等,以提高整体性能和用户体验。

观测云全面支持在 Amazon ECS on Fargate 上的可观测能力,提供包括对基础资源的监控、应用程序链路跟踪和日志监控等。文章将对在该环境上如何实现可观测进行说明和展示。

Amazon ECS On Fargate 简介

Amazon Elastic Container Service (Amazon ECS) 是一种高度可扩展、高性能的容器编排服务,支持 Docker 容器,可以轻松运行和扩展容器化应用程序。Amazon ECS 与Fargate 相结合,提供了一种无需管理基础设施的方式来运行容器。

Fargate 是一种无服务器计算引擎,可以在 Amazon ECS 中运行容器。它允许您在不需要预置或管理服务器的情况下运行容器。Fargate 负责管理底层的计算基础设施,如虚拟机、内核补丁、安全更新等。您只需要关注容器化应用程序的打包和部署。

使用 Amazon ECS 和 Fargate 的主要优势包括:

  • 无服务器:不需要预置或管理基础设施,可以快速启动和扩展容器化应用程序。
  • 简单性:不需要管理底层的操作系统、集群或虚拟机。Fargate 负责管理基础设施。
  • 可扩展性:可以根据应用程序需求自动扩展和缩减容器实例。
  • 高可用性: Fargate 跨多个可用区域运行容器,提供高可用性。
  • 安全性: Fargate 提供了安全的计算环境,并与 AWS 安全服务集成。
  • 集成:与其他亚马逊云服务(如 ALB、CloudWatch、IAM 等)无缝集成。

Amazon ECS 与 AWS Fargate 结合使用,可以帮助您更轻松地部署、管理和扩展容器化应用程序,而无需担心底层基础设施的管理。这种无服务器的方式可以降低运维成本,提高资源利用率,加快应用程序的交付速度。

AWS ECS On Fargate 中的监控数据采集说明

DataKit 是观测云的一款开源、一体式的数据采集 OneAgent,它提供全平台操作系统(Linux/Windows/macOS)的支持,拥有全面数据采集能力,涵盖主机、容器、中间件、Tracing、日志等各种数据采集的能力。

在 ECS 环境中,将通过 DataKit 进行监控数据采集,并上传到观测云。

如上图所示,在 ECS On Fargate 的环境中,在每一个需要接入可观测数据的 ECS 任务中,除了业务容器外,都需要配置一一对应的 DataKit 和 Log-router 容器。DataKit 会负责采集运行任务中容器的运行指标,应用的链路数据等。日志数据通过 Log-router(Amazon Firelens - Fluent-bit )的方式进行采集,并把采集的日志数据通过 logstream 的方式传输给 DataKit,并由 DataKit 进行数据处理后最终上传给观测云进行后续的查询和分析。各类型监控数据采集的进一步说明如下:

指标采集

DataKit 支持通过环境变量参数 “ENV_ECS_FARGATE: on” 的设置开启 AWS ECS Fargate 相关的运行指标。同时,支持通过 DataKit 中的 “statsd” 采集模块来对例如 Java 应用的 JVM 运行指标、NodeJS 应用的 rumetime 运行指标等进行采集和监控分析。

链路采集

在 AWS ECS 环境中,应用容器在启动时,通过加载 ddtrace agent 的方式产生对应的调用链路数据,并发送给 DataKit。DataKit 作为 Sidecar 与应用容器运行在同一个 Amazon ECS 任务中来接收应用产生的链路数据,并上传到观测云中进行查询分析。

日志采集

在 AWS ECS 环境中,通过 AWS FireLens(Fluent-Bit 插件) 作为 Sidecar 与应用容器运行在同一个 Amazon ECS 任务中来采集应用日志数据,并把采集到的日志数据发送给 datakit 的 logstream 采集模块,并最终上传观测云中进行日志的查询和分析。无需修改应用部署脚本,手动安装额外软件或编写其他代码。

AWS ECS 任务配置说明

该部分将对如何在 ECS On Fargate 环境中进行观测数据采集的部署配置进行说明。

前置条件

应用镜像

以 Java 应用为例,如果需要采集 Java 应用的调用链路数据,需要在应用的镜像中提前加入 ddtrace java agent 文件,并预留一个 Java 的定制化启动参数入口,方便后续对启动参数通过环境变量进行灵活调整。如下是这部分在 dockerfile 中的示例:

Bash
COPY dd-java-agent.jar /dd-java-agent.jar
ENTRYPOINT ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${your_app.jar}"]

观测云提供的最新 Java DDTrace agent 的下载链接地址:

https://static.guance.com/dd-image/dd-java-agent.jar

创建 ECS 任务定义

在同一个 AWS ECS 任务中,将创建三个容器,分别是应用容器、datakit 容器和 log-router 容器。详细的容器配置说明如下:

应用容器

应用容器 Json 格式的配置信息如下:

Bash{"name": "javatest","image": "registry.cn-xxx.com/test/javatest:v2.0","cpu": 1024,"portMappings": [{"name": "javservice","containerPort": 9080,"hostPort": 9080,"protocol": "tcp","appProtocol": "http"}],"essential": true,"environment": [{"name": "DD_SERVICE","value": "java_service"},{"name": "DD_ENV","value": "test"},{"name": "JAVA_OPTS","value": "-javaagent:/dd-java-agent.jar"},{"name": "DD_AGENT_HOST","value": "localhost"},{"name": "DD_TRACE_AGENT_PORT","value": "9529"}],"mountPoints": [],"volumesFrom": [],"logConfiguration": {"logDriver": "awsfirelens","options": {"Format": "json","Host": "localhost","Name": "http","Port": "9529","URI": "/v1/write/logstreaming?type=firelens&source=java&service=javatest&tags=project=test,app_name=java_app,cloud=amazon"}},"systemControls": []}      

这里有两个主要的配置项,说明如下:

  • 通过 environment 变量 JAVA_OPTS 配置 Java 的启动参数以及 ddtrace 相关的参数。DDtrace 具体支持的参数说明,可以参考如下链接: Java - 观测云文档
  • logConfiguration,配置通过 AWS Firelens fluent-bit plugin (logstash) 来进行应用日志的采集和转发。关于AWS Firelens plugin的详细信息,参考如下的链路: amazon-ecs-firelens-examples/examples/fluent-bit/logstash at mainline · aws-samples/amazon-ecs-firelens-examples · GitHub

关于在 URI 配置中,logstreaming 支持的参数说明如下:

  • type:数据格式,目前支持 influxdb 和 firelens 类型
    • 当 type 为 inflxudb 时( /v1/write/logsreaming?type=influxdb ),说明数据本身就是行协议格式将只添加内置 Tags 不再做其他操作
    • 当 type 为 firelens 时( /v1/write/logstreaming?type=firelens ),数据格式应是 JSON 格式的多条日志
    • 当此值为空时,会对数据做分行和 Pipeline 等处理
  • source:标识数据来源
  • service:添加 service 标签字段
  • tags:添加自定义 tag,多个 tag 间以英文逗号分割
  • Pipeline:指定数据需要使用的 pipeline 名称
Datakit 容器

Datakit 容器 Json 格式的配置信息如下:

Bash
{"name": "datakit","image": "pubrepo.guance.com/datakit/datakit:latest","cpu": 0,"portMappings": [],"essential": false,"environment": [{"name": "ENV_DATAKIT_INPUTS","value": "[[inputs.logstreaming]] \n ignore_url_tags = false"},{"name": "ENV_DATAWAY","value": "https://openway.guance.com?token=tkn_098042exxxx"},{"name": "ENV_HTTP_LISTEN","value": "0.0.0.0:9529"},{"name": "ENV_DEFAULT_ENABLED_INPUTS","value": "dk,container,ddtrace,statsd"},{"name": "ENV_ECS_FARGATE","value": "on"}],"mountPoints": [],"volumesFrom": [],"systemControls": []}

通过 environment 环境变量来对 DataKit 进行对应的配置。部分变量使用说明如下:

  • ENV_DATAKIT_INPUTS:开启 logstreaming 采集模块。主要用来接收通过 AWS Firelens fluent-bit 采集的日志数据
  • ENV_DATAWAY:数据上传路由地址。每个工作空间都会有一一对应的 Token
  • ENV_HTTP_LISTEN:DataKit 默认监听地址和端口
  • ENV_DEFAULT_ENABLED_INPUTS:配置默认开启的数据采集器模块
  • ENV_ECS_FARGATE:是否开启采集 ECS 中容器运行的相关指标
Log-Router 容器

Log-Router 容器 Json 格式的配置信息如下:

Bash
{"name": "log_router","image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable","cpu": 0,"memoryReservation": 50,"portMappings": [],"essential": true,"environment": [],"mountPoints": [],"volumesFrom": [],"user": "0","logConfiguration": {"logDriver": "awslogs","options": {"awslogs-create-group": "true","awslogs-group": "/ecs/ecs-aws-firelens-sidecar-container","awslogs-region": "cn-northwest-1","awslogs-stream-prefix": "firelens"}},"systemControls": [],"firelensConfiguration": {"type": "fluentbit"}}

该部分可以保持默认配置,不用做额外调整。

运行 AWS ECS Fargate 任务

基于新创建的任务定义创建 ECS Fargate 服务。服务成功启动后,将看到如下的三个在运行状态的容器:

观测云上使用效果展示

当完成上面所述的配置,并在 AWS 上成功启动任务后,我们就可以通过观测云全面监控 AWS ECS 中的服务运行情况。使用效果说明如下:

关于指标

当开启 ECS Fargate 的指标采集后,在观测云默认的基础设施监控中,可以实时监控ECS 容器的运行状态。

同时,也可以通过观测云的场景仪表板能力,自定义 ECS 相关的看板。如下图所示:

关于日志

可以通过观测云的日志查看器快速查看日志信息包括支持信息模糊查询,正则表达式查询等。也可以通过不同的过滤条件来对日志信息进行直接的筛选查看。如下图所示:

同时,在查看日志详情的过程中,如果用户想进一步了解产生该日志的链路信息,观测云也提供日志详细页面直接关联到对应链路的能力。如下图所示:

关于应用链路

当发生服务调用后,在观测云的 “应用性能监测” 中可以通过查看器看到链路相关的信息,如下图所示:

支持点击某一条链路来查看对应的详细信息,包括链路调用火焰图,调用依赖关系等。同时,可以通过关联内置视图来快速实现关联分析的能力。

如下图所示,当关联了ecs fargate的运行指标视图后,用户可以看到这条链路在被调用的时间点上(红色竖线对应的位置),对应ECS中容器的资源使用和运行情况。

如果关联了应用的日志,就能够在链路中直接关联到该服务调用时产生的日志信息来做快速的关联分析。

如果是 Java 应用,也可以快速关联 JVM 的运行指标情况。帮助用户快速了解服务调用时,JVM 的运行情况是否有异常,如下图所示:

上述提到的这些关联分析视图,都是可以根据用户的分析需求来做灵活的自定义配置和添加删除。

至此,我们就完成了对 AWS ECS On Fargate 环境的基本可观测能力的实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUUCTF】Crypto_RSA(铜锁/openssl使用系列)

【BUUCTF】Crypto_RSA(铜锁/openssl使用系列) 1、题目 在一次RSA密钥对生成中,假设p473398607161,q4511491,e17 求解出d作为flga提交 2、解析 RSA加密过程: 1)选择素数:选择两个不…

rabbitmq交换机,死信队列的简单例子

假设我们有一个场景,生产者有消息发到某个直连交换机,这个交换机上有两个队列分别存储两种类型的消息,但是与这两个队列相连的消费者太不争气了,处理消息有点慢,我们想5秒钟这个消息在队列中还没有被消费的话&#xff…

【MIT6.S081】Lab7: Multithreading(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab7.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/thread2/ Uthread: switching between threads 关键点:线程切换、swtch 思路: 本实验完成的任务为用户级线程系统设计上下文切换机制…

SGPM02陀螺仪模块通过惯性导航助力AGV小车的发展

之前我们介绍过SGPM01系列陀螺仪模块在智能泳池清洁机器人导航的方案(SGPM01)。这款惯性导航模块收到了许多企业的欢迎。由此,爱普生推出了SGPM02系列陀螺仪模块通过惯性导航,助力AGV小车的发展。 AGV是一种用于运输材料的无人驾驶车辆,并且A…

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…

老杨说运维 | 金融业数据中心的发展趋势

【这是老杨在2023.10乌镇大会上的演讲(一)。接下来,6月初老杨又要在成都开讲了。到时候再发新的】 最近几年,“企业数字化转型”是行业内最热的一个词。当然,“新质生产力”又成了这个月最热的词。虽然新词热词层出不…

基于JAVA8的lambda递归的treeNode树形遍历

1.TreeNode类 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List;Data NoArgsConstructor AllArgsConstructor public class TreeNode {Integer id;String value;/** 子节点信息 */List<TreeNode> childr…

SHELL-双重循环习题练习

1.99乘法表 #!/bin/bash #99乘法表for ((second1; second<9; second)) dofor ((first1; first<second; first))do echo -n -e "${first}*${second}$[first*second]\t" done echo done ######### 首先定义了一个外循环变量second&#xff0c;初始值为1&am…

AI 情感聊天机器人工作之旅 —— 与复读机问题的相遇与别离

前言&#xff1a;先前在杭州的一家大模型公司从事海外闲聊机器人产品&#xff0c;目前已经离职&#xff0c;文章主要讨论在闲聊场景下遇到的“复读机”问题以及一些我个人的思考和解决方案。文章内部已经对相关公司和人员信息做了去敏&#xff0c;如仍涉及到机密等情况&#xf…

linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源

目录 编译和移植 视频子系统 视频子系统产生图像的步骤 api 初始化 SDL 的相关子系统 使用指定的宽、高和色深来创建一个视窗 surface 使用 fmt 指定的格式创建一个像素点​编辑 将 dst 上的矩形 dstrect 填充为单色 color​编辑 将 src 快速叠加到 dst 上​编辑 更新…

连锁收银系统源代码有哪些功能,进销存+收银+会员+门店补货+线上商城

在现代零售行业&#xff0c;高效的管理系统是保持连锁店运营顺畅的关键。而开源连锁收银系统作为一款功能丰富的管理软件&#xff0c;为零售企业提供了全面的解决方案&#xff0c;涵盖了进销存管理、收银、会员、门店补货以及线上商城等多个方面&#xff0c;帮助企业实现精细化…

C语言判断字符旋转

前言 今天我们使用c语言来写代码来实现字符串选择的判断&#xff0c;我们来看题目 题目描述 写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如&#xff1a;给定s1 AABCD和s2 BCDAA&#xff0c;返回1 给定s1abcd和s2ACBD&#xff0c;返回0. A…

想白嫖?音视频的文本提取和总结?NoteGPT满足你

NoteGPT实现了音频、录音以及视频的AI总结 NoteGPT最近做了一个功能&#xff1a;Audio Summary&#xff08;Audio Summary with AI - NoteGPT&#xff09; 1&#xff09;完全免费&#xff1b; 2&#xff09;支持mp3、mp4&#xff1b; 3&#xff09;支持URL和本地上传&…

【UE Niagara】在UI上生成粒子

效果 步骤 1. 在虚幻商城中将“Niagara UI Render”插件安装到引擎 2. 打开虚幻编辑器&#xff0c;勾选插件“Niagara UI Renderer”&#xff0c;然后重启编辑器 3. 先创建一个控件蓝图&#xff0c;该控件蓝图只包含一个按钮 这里设置尺寸框尺寸为200*50 4. 显示该控件 5. 新…

Excel——项目管理,设置时间到期自动提醒及颜色高亮

效果图 第一步、自动获取合同到期日期 1、首先合同【签约日期】和【到期日期】下面的数据必须是日期格式&#xff0c;不能是其它的格式否则无法计算&#xff0c;如果是其它格式需要转换成标准的日期格式&#xff0c;如下图所示。 2、在“到期日期”下面的第一个单元格中输入公…

如何让机器理解人类语言?Embedding技术详解

如何让机器理解人类语言&#xff1f;Embedding技术详解 文章目录 如何让机器理解人类语言&#xff1f;Embedding技术详解介绍什么是词嵌入&#xff1f;什么是句子嵌入&#xff1f;句子嵌入模型实现句子嵌入的方法值得尝试的句子嵌入模型 句子嵌入库实践Step 1Step 2Step 3 Doc2…

GBJ3510-ASEMI室内空调机GBJ3510

编辑&#xff1a;ll GBJ3510-ASEMI室内空调机GBJ3510 型号&#xff1a;GBJ3510 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;35A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a;4…

股东那些事儿:解锁企业背后的权力玩家与盈利秘籍

Hello&#xff0c;大家好啊&#xff0c;今天咱们要聊的主角&#xff0c;是每个企业背后不可或缺的隐形巨擘——股东。他们是谁&#xff1f;他们怎样从公司的经营中分一杯羹&#xff1f;又如何在商业棋盘上运筹帷幄&#xff1f;搬好小板凳&#xff0c;咱们这就开启股东世界的探秘…

Node.js 学习笔记 express框架

express express 使用express下载express 初体验 express 路由什么是路由1路由的使用验证的方法 2获取请求报文参数3获取路由参数4响应设置响应报文 express 中间件5中间件全局中间件路由中间件 6静态资源中间件注意事项案例 7请求体数据8防盗链实现防盗链 9路由模块化router E…

Java——类和对象第二节——封装

1.什么是封装 封装是面向对象程序的三大特性之一&#xff0c;面向对象程序的三大特性分别是封装&#xff0c;继承&#xff0c;多态 而封装简单来说就是套壳隐藏细节 打个比方&#xff1a; 在一些电脑厂商生产电脑时&#xff0c;仅对用户提供开关机键&#xff0c;键盘输入&a…