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 环境的基本可观测能力的实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在VMware安装Androidx86_64系统要点

上篇使用VirtualBox安装过Androidx86_64系统,尝试了没有蓝牙共享的好方法。本篇记录下使用Vmware虚机安装改系统,并使用蓝牙共享功能。 1.准备材料 本篇安装环境是安装Window10_64位系统。需要下载好Vmware安装包,VMWare版本:VMw…

antv x6实现ER图

前端:安装相关依赖 npm install antv/x6 antv/x6-plugin-history antv/x6-plugin-selection antv/x6-plugin-minimap antv/layout 代码参考来源learn-antv-x6: antv/X6学习 antv官网https://antv.antgroup.com/ 代码包:链接: https://pan.baidu.c…

C++笔试强训day22

目录 1.添加字符 2.数组变换 3.装箱问题 常规一维优化&#xff1a; 1.添加字符 链接 因为lenA < lenB < 50&#xff0c;因此可以无脑暴力解题&#xff1a; 遍历所有符合条件的匹配方法&#xff0c;找出最小的不同的数量&#xff0c;即最大的相同的数量 #include &…

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作&#xff1f; useEffect 用于编写由渲染本身引起的对接组件外部的操作&#xff08;官方称呼为&#xff1a;副作用操作&#xff09; 以下情况会触发页面渲染 初次加载页面&#xff08;组的挂载&#xff09;响应式变量发生变化&#xff0c;触发页面根据新值重新…

生活服务商家拥抱数字化,鸿运果系统加速“服务生意数字化”进程

在数字化转型的大潮中&#xff0c;生活服务商家正积极拥抱变革&#xff0c;以适应新的市场环境和消费者需求。鸿运果系统作为专业的“服务生意”数字化解决方案提供商&#xff0c;正助力商家加速数字化转型&#xff0c;推动行业向智能化、个性化服务转型。 数字化转型的背景 …

ORACLE ODA一体机存储节点电源故障的分析处理

近期&#xff0c;某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警&#xff1b;用户反馈次问题后我们立刻通过远程方式&#xff0c;登陆ODA的控制台进行查看&#xff1b; 对于ODA一体机&#xff08;2个计算节点1个存储节点&#xff09;&#xff0c;计算节点可以通过il…

USB3.0接口——(3)协议层(包格式)

7.协议层 7.1.超高速传输事务 超高速事务&#xff08;SuperSpeed transactions&#xff09;由主机对设备端点请求或发送数据开始&#xff0c;并在端点发送数据或确认收到数据时完成。超高速总线上的数据传输&#xff08;transfer&#xff09;是主机请求设备应用程序生成的数据…

在做题中学习(58):和为K的子数组

560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 因为是判断子数组的和 要返回 k 的次数&#xff0c;所以 解法&#xff1a;前缀和 哈希表 提出一个概念&#xff1a;以下标i为结尾的所有子数组 那要找出所有和 k的子数组 就相当于&#xff1a;找出所有值为…

高端智能终端RK3399主板在配送机器人项目的应用,支持免费定制

基于高端智能终端主板IoT-3399E推出了系列配送机器人&#xff0c;面向各类线下门店的配送服务。配送机器人可实现智能识别、精准配送、自动避障、自主调度系统、语音播报、信息互动等功能&#xff0c;大幅提升服务效率&#xff0c;为消费者带来更加便捷、智能的服务体验。 核心…

Zab之光:照亮分布式系统数据一致性迷宫的智慧火把

关注微信公众号 “程序员小胖” 每日技术干货&#xff0c;第一时间送达&#xff01; 引言 在构建大型分布式系统时&#xff0c;数据一致性是我们必须面对的挑战之一。随着业务的增长和系统规模的扩大&#xff0c;如何保证在多个节点间复制的数据保持一致&#xff0c;成为了一…

keepalived双机热备超详细入门介绍

keepalived 一、keepalived入门介绍 1.keepalived简介 2.keepalived服务的三个重要功能 2.1.管理LVS负载均衡软件 2.2.实现对LVS集群节点健康检查功能 2.3.作为系统网络服务的高可用功能 3.keepalived高可用故障切换转移原理 4.keepalived安装及主配置文件介绍 …

图搜索算法-最短路径算法-贝尔曼-福特算法

相关文章&#xff1a; 数据结构–图的概念 图搜索算法 - 深度优先搜索法&#xff08;DFS&#xff09; 图搜索算法 - 广度优先搜索法&#xff08;BFS&#xff09; 图搜索算法 - 拓扑排序 图搜索算法-最短路径算法-戴克斯特拉算法 贝尔曼-福特算法&#xff08;Bellman-Ford&#…

OpenAI春季发布会, GPT-4o引爆科技圈 |千字文全面解读

今天&#xff0c;OpenAI再一次引爆了科技圈。这次的核心亮点无疑是他们的全新模型&#xff1a;GPT-4o&#xff0c;以及基于此模型构建的全新ChatGPT版本。 GPT-4o是什么&#xff1f; OpenAI 最新推出的 GPT-4o&#xff0c;“o”代表“Omni”&#xff0c;这一拉丁词根在英语中常…

CentOS报错: Fontconfig head is null, check your fonts or fonts configuration

错误 解决方案 这个报错的原因时java读取本地字体时发现字体损坏或者缺失&#xff0c;只需要补充一下字体就可以了&#xff0c;解决方法安装FontConfig组件即可&#xff1a; sudo yum install fontconfig

弥合孤岛:克服构建 DevOps 文化的挑战

持续变革正在发生软件开发行业。DevOps 因其对自动化、协作和持续改进的关注而成为优化软件交付并弥合开发和运营团队之间鸿沟的重要方法。然而&#xff0c;过渡到真正的 DevOps 文化并非没有挑战。本文探讨了您在追求 DevOps 时可能面临的障碍并提供了解决方案。 01 了解 Dev…

JINGWHALE 数字认证体系 · 进阶知识库

JINGWHALE 数字认证体系 是 JINGWHALE 数字科学艺术创新中心 的数字认证服务。 ◢◤ 宗旨 致力于数字化知行合一的知识赋能&#xff01; ◥ 数字化人才培养 培养数字化思维&#xff0c;传播数字化知识&#xff0c;赋能各行业数字化。 ◥ 职业人才发展 无缝衔接学校高等…

Databend 开源周报第 144 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …

有一个21年的前端vue项目,死活安不上依赖

在公司开发的时候遇到的一个很玄幻的问题,这个项目是21年开发的,现在我是24年中途二开增加新功能 这个项目经过多人之手,现在已经出现了问题------项目依赖安不上,我能启动完全是因为在23年的时候写这个项目的时候将依赖费九牛二虎之力下载好后打成了压缩包发给另外一个安不上依…

分析 vs2019 c++ 中的 decltype 与 declval

&#xff08;1&#xff09; decltype 可以让推断其参数的类型。按住 ctrl 点击 decltype &#xff0c;会发现无法查阅 其定义 &#xff1a; &#xff08;2&#xff09; 但 STL 库里咱们可以查阅函数 declval 的 定义&#xff0c;很短&#xff0c;摘抄如下&#xff1a; templat…

PostgreSQL源码安装

文章目录 一、先决条件检查二、源码安装1、获取源代码2、编译安装1.运行 configure2.运行make 3、PostgreSQL的配置4、安装contrib目录下的工具 三、初始化数据库1、创建数据库管理员2、创建数据库实例3、启动和停止数据库4、设置数据库密码 四、PostgreSQL的简单配置1、pg_hba…