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

news2025/1/16 19:04:30

概述

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.coloradmin.cn/o/1674820.html

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

相关文章

虾皮选品:Shopee首季盈利2.4亿;TikTok美区电商权限要求降低

2024年5月14号,跨境电商日报: 1.Ozon已成功回款 2.TikTok降低美区达人开通电商权限要求 3.Shopee首季盈利2.4亿 4.6月1日起,亚马逊退货处理费收取标准更新 5.欧盟委员会对从中国台湾地区和越南进口的不锈钢冷轧产品征收反补贴和反倾销税…

[Cesium]Cesium基础学习——Primitive

Cesium开发高级篇 | 01空间数据可视化之Primitive - 知乎 Primitive由两部分组成:几何体(Geometry)和外观(Appearance)。几何体定义了几何类型、位置和颜色,例如三角形、多边形、折线、点、标签等&#xf…

最佳实践 | 用HelpLook构建一体化企业知识中台

企业知识中台是内容与数据的双向交流的重要载体,它不仅能够让企业的内容说话,也能够倾听和分析数据。 你是否因寻找建立企业内部知识库/知识中台和说明文档平台的合适工具而苦恼?HelpLook数字内容平台正是你的理想之选。该平台以其简洁且用户…

一个开箱即用的已集成全部主流前端工具、类库的vue3+nuxt3服务端渲染ssr项目

项目背景: 需实现公司国际官网项目的seo如果是react就选用next,因为我最近在用vue3,就试试使用nuxt在网上找了很多模版,发现都不理想,缺的东西比较多,没法做到开箱即用,所以自己造个模版项目采…

【Java基础】枚举类的方法及应用

如何实现让一个类有固定个数的对象 手动封装构造方法(private) → 创建静态对象 → final修饰静态对象,使其成为常量 class Season { //枚举类public final static Season SPRING new Season();public final static Season SUMMER new Se…

【前端】打砖块游戏:实现细节介绍

打砖块游戏:实现细节介绍 在本文中,我将详细介绍如何使用HTML、CSS和JavaScript技术构建一个简单的打砖块游戏。我们将重点讨论游戏的三个核心技术方面:碰撞检测、画图和事件监听。 完整代码我放在:github可以直接拉取代码测试。 游戏概览 打砖块游戏中,玩家通过控制底…

如何用Rust获取本机CPU、内存在Web网页中显示?

目录 一、需求描述 二、具体操作步骤 三、知识点 1、systemstat 2、Actix 一、需求描述 需求: 1、需要使用Rust进行后端开发获取本机CPU和内存信息; 2、使用WEB框架发布API; 3、然后使用HTML/CSS/JavaScript进行前端开发&#xff0…

2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届CCPC河南省大学生程序 设计竞赛Problem A. Once In My Life

//构造 #include<bits/stdc.h> using namespace std; #define int long long int a,b,c ; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a;while(a--){cin>>b>>c;int mb,k0;while(m){m/10;k;}int v0;for(int i1;i<9;…

Linux之·网络编程·I/O复用·select

系列文章目录 文章目录 前言一、概述1.1 介绍IO复用的概念和作用1.1.1 I/O复用具体使用的场景1.1.2 I/O复用常用函数 二、select函数的重要性和用途2.1 基本的select函数2.2 如何使用FD_SET、FD_CLR等宏来设置和清除文件描述符集合2.3 select()函数函数整体使用框架&#xff1a…

如何将3DMax中制作的特效渲染为AVI格式视频?---模大狮模型网

在3D设计中&#xff0c;制作出精美的特效是吸引眼球的关键之一。然而&#xff0c;仅仅制作特效还不够&#xff0c;将其渲染为视频并分享给观众才能展现出其真正的魅力。本文将为您提供一份完整的指南&#xff0c;教您如何在3ds Max中将制作的特效渲染为AVI格式视频&#xff0c;…

Linux-基础命令第三天

1、命令&#xff1a;wc 作用&#xff1a;统计行数、单词数、字符数 格式&#xff1a;wc 选项 文件名 例&#xff1a; 统计文件中的行数、单词数、字符数 说明&#xff1a;59代表行数&#xff0c;111代表单词数&#xff0c;2713代表字符数&#xff0c;a.txt代表文件名 选项…

固定优先级仲裁器及RR轮询Verilog实现

一、固定优先仲裁器 所谓固定优先仲裁器&#xff0c;即其优先级是固定的&#xff0c;当有多个请求到达时&#xff0c;按照优先级得到仲裁结果&#xff0c;并且优先级一直保持不变。如当有四个请求到达时&#xff0c;如果最高优先级为0号请求&#xff0c;则对0号请求响应&#…

Steam喜加一,限时免费领取《Machinika Museum》

《Machinika Museum》限时免费领取啦&#xff01;这是一款烧脑解谜游戏&#xff0c;让你挖掘神秘外星装置的秘密。在这个非常特别的异星装置博物馆里&#xff0c;你将扮演一名研究员&#xff0c;负责解开各种机械谜题&#xff0c;探索背后的故事。 在这个未来世界&#xff0c;外…

docker 部署 prometheus + Grafana +

# prometheus安装 # 1.拉镜像 docker pull prom/prometheus:v2.43.0 # 2.创建配置文件 mkdir /opt/prometheus/data cd /opt/prometheus/ vi prometheus.yml # 3.使用root用户启动 docker run --name prometheus -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/pro…

制造业装备虚拟3D云展馆开发提升企业营销效果

随着元宇宙时代的到来&#xff0c;商城的运营模式也在发生深刻变革。在这一大背景下&#xff0c;元宇宙商城更加注重场景营造和商品的线上互动体验。3D技术的迅猛发展&#xff0c;为电商行业带来了全新的展示、体验与服务模式&#xff0c;电商3D化已成为不可阻挡的潮流。 华锐3…

【JVM】调优工具

这里简单介绍一下各种调优用到的工具 一&#xff0c;环境准备 首先我们需要准备好Java环境&#xff0c;和win上的jdk环境&#xff08;图形化界面如jconsole只有jdk中有&#xff09;。 有这样一个类Prolem&#xff0c;每个线程都会带来100个垃圾对象&#xff0c;线程new完100…

【以规划为导向的自动驾驶】Planning-oriented Autonomous Driving

ABSTRACT 研究背景&#xff1a; 现代自动驾驶系统是顺序化地排列多个任务模块, 近期的主流方法&#xff1a; ①为单个任务部署独立模型 ②设计具有分离式头部的多任务(multi-task)范式。 但是&#xff0c;这些方法会累积误差或任务间协同不足而不利于自动驾驶。 作者认为重…

HTML常用标签-列表标签

列表标签 有序列表 分条列项展示数据的标签, 其每一项前面的符号带有顺序特征 无序列表 分条列项展示数据的标签, 其每一项前面的符号不带有顺序特征 有序列表标签 ol无序列表标签 ul列表项标签 li代码 <!-- 有序列表 --><ol><li>JAVA</li><li>前…

基础学习-Git(分布式版本控制系统)

学习视频推荐 http://【黑马程序员Git全套教程&#xff0c;完整的git项目管理工具教程&#xff0c;一套精通git】 https://www.bilibili.com/video/BV1MU4y1Y7h5/?p5&share_sourcecopy_web&vd_source2b85bd9be9213709642d908906c3d863 1、Git环境配置 安装Git Git下…

【重生之我在学Android】WorkManager (章一)

相关文章 【重生之我在学Android原生】ContentProvider(Java) 【重生之我在学Android原生】Media3 【重生之我在学Android】WorkManager &#xff08;章一&#xff09; 前言 官方文档 官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现 案例 语言&#xff1a;JA…