AWS ELB 可观测性最佳实践

AWS ELB

AWS ELB(Elastic Load Balancing)是亚马逊网络服务提供的弹性负载均衡服务,能够自动分配传入流量到多个目标(如 EC2 实例、容器等),以实现高可用性和可伸缩性。它支持多种负载均衡算法,如轮询和最少连接,并且具备跨可用区的高可用性、与 Auto Scaling 集成的自动扩展能力、健康检查以及 SSL/TLS 终止等功能。AWS ELB 有三种类型:应用负载均衡器(ALB)适用于基于 HTTP/HTTPS 的应用程序,支持基于内容的路由;网络负载均衡器(NLB)针对 TCP/UDP 流量,性能高且支持静态 IP;网关负载均衡器(GLB)用于管理网络流量的路由,可连接到安全网关设备等。通过 AWS 管理控制台可以轻松创建和配置 ELB,同时需要合理设置安全组和网络配置,并利用 CloudWatch 等工具进行监控和日志记录。

AWS ELB(Elastic Load Balancing)的监控至关重要,它能够实时提供负载均衡器的性能指标(如请求计数、延迟、错误率等),帮助用户及时发现并解决潜在问题,确保应用程序的高可用性和性能优化。通过监控,可以快速定位故障点、优化资源配置,并根据流量变化调整负载均衡策略,从而保障业务的稳定运行和用户体验。

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

采集器配置

指标采集

  • 登录观测云控制台
  • 点击【集成】菜单,选择【云账号管理】
  • 点击【添加云账号】,选择【AWS】,填写界面所需的信息,如之前已配置过云账号信息,则忽略此步骤
  • 点击【测试】,测试成功后点击【保存】,如果测试失败,请检查相关配置信息是否正确,并重新测试
  • 点击【云账号管理】列表上可以看到已添加的云账号,点击相应的云账号,进入详情页
  • 点击云账号详情页的【集成】按钮,在未安装列表下,找到 AWS ELB,点击【安装】按钮,弹出安装界面安装即可。

日志采集

1、采集流程介绍

  • ELB 开启访问日志,并存储到 S3 桶
  • S3 触发Event 调用 Lambda函数,通过Datait 或者 Dataway 将数据上报到观测云平台

2、ELB application 开启访问日志

  • 选择对应的负载均衡器,进入详情页
  • 在详情页中,点击「操作」,然后选择「编辑负载均衡器属性」
  • 在「监控」类目下开启 「访问日志」,并选择对应的 S3 桶
  • 保存

3、创建 Lambda 函数

  • 打开 Lamba 控制台的函数页面。
  • 选择创建函数
  • 选择从头开始创作
  • 输入函数名称
  • 设置 运行时 选项为 Python 3.10
  • 在 Execution Role(执行角色)中,Lambda 创建执行角色,该角色授予函数上载日志到 Amazon CloudWatchlogs 的权限。在您调用函数时,Lambda 函数担任执行角色,并使用该执行角色为 Amazon 软件开发工具包创建凭证和从事件源读取数据,lambda 权限如下:
yaml 复制代码
  logs: CreateLogGroup 
  logs: CreateLogStream 
  logs: PutLogEvents 
  lambda: * AmazonS3ReadOnlyAccess
  • 点击创建函数
  • 在 GitHub 中拉取同步代码至下方代码源中将 lambda-forward.py 内容复制到 lambda-function.py
  • 在将 lambda-function.py 相同目录下新建 setting.pydatakit.pydataway.py 文件,并将 GitHub 中相应文件代码复制进去
  • 添加环境变量

这里采用 DataWay 上报数据,以下是必要的配置:

1)GUANCE_NODE:<<< custom_key.brand_name >>>节点,上报数据源为 dataway,必选,选值范围:

  • default: 中国区 1(杭州)
  • aws: 中国区 2(宁夏)
  • cn4: 中国区 4(广州)
  • cn6: 中国区 6(香港)
  • us1: 美洲区 1(俄勒冈)
  • eu1: 欧洲区 1(法兰克福)
  • ap1: 亚太区 1(新加坡)
  • za1: 非洲区 1(南非)
  • id1: 印尼区 1(雅加达)

2)GUANCE_TOKEN:观测云工作空间 Token,上报数据源为 dataway

  • 点击 Deploy 发布

4、配置 Lambda 触发器

  • 点击添加触发器
  • 设置选择一个源为 S3
  • 选择需要监听的 bucket
  • 选择要触发 Lambda 函数的事件 Event types
  • 同意 我承认不推荐对输入和输出使用相同的 S3 bucket,并且这种配置可能导致递归调用、增加 Lambda 使用和增加成本
  • 点击添加

5、访问 ELB 产生日志

访问 ELB 上的应用,ELB 将生成的日志上传到 S3,通过 Lambda 函数进行抓取并上报到观测云。

6、日志数据治理

观测云支持对日志数据的提取,提取规则如下:

css 复制代码
grok(_, "%{NOTSPACE:protocal} %{TIMESTAMP_ISO8601:timestamp} %{NOTSPACE:LoadBalancer} %{IP:client}:%{POSINT:client_port} %{IP:target}:%{POSINT:target_port} %{NUMBER:request_processing_time} %{NUMBER:target_processing_time} %{NUMBER:response_processing_time} %{NUMBER:elb_status_code} %{NUMBER:target_status_code} %{NUMBER:received_bytes} %{NUMBER:sent_bytes} "%{NOTSPACE:http_method} %{NOTSPACE:uri} HTTP/%{NUMBER:http_version}" "%{DATA:user_agent}" %{NOTSPACE:ssl_cipher} %{NOTSPACE:ssl_protocol} %{NOTSPACE:target_group_arn} "%{NOTSPACE:x_amzn_trace_id}" "%{DATA:domain_name}" "%{DATA:chosen_cert_arn}" %{NUMBER:matched_rule_priority} %{TIMESTAMP_ISO8601:request_creation_time} "%{WORD:actions_executed}" "%{DATA:redirect_url}" "%{DATA:error_reason}" "%{IP:target_host}:%{POSINT:target_host_port_list}" "%{NUMBER:target_status_code_list}" "%{DATA:classification}" "%{DATA:classification_reason}" %{NOTSPACE:conn_trace_id}")

status = "info"

cast(elb_status_code,"int")

if elb_status_code >=400 {
  status = "error"
}

add_key("aws_log_type","access_log")
add_key(status,status)
aws_json=load_json(aws)

lambda_func_data = aws_json["invoked_function_arn"]

add_key(s3_bucket,aws_json["s3"]["bucket"])

grok(lambda_func_data, "arn:aws:lambda:%{DATA:region}:%{NUMBER:account_id}:function:%{NOTSPACE:lambda_func}")

关键指标

指标名称 描述 单位
ActiveConnectionCount 当前活动的连接数,表示当前正在处理的客户端与ELB之间的连接总数。
ConsumedLCUs 每分钟消耗的负载均衡单元(LCU)数量,用于衡量负载均衡器的资源使用情况。 LCU/分钟
HTTPCode_ELB_4XX_Count ELB返回的4XX错误数量,表示客户端请求错误(如404未找到、403禁止等)。
HTTPCode_ELB_502_Count ELB返回的502错误数量,通常表示后端目标未正确响应。
HTTPCode_ELB_5XX_Count ELB返回的5XX错误数量,表示服务器端错误(如500内部服务器错误)。
HTTPCode_Target_2XX_Count 后端目标返回的2XX成功响应数量。
HTTPCode_Target_4XX_Count 后端目标返回的4XX错误数量。
HealthyHostCount 健康目标的数量,表示通过健康检查的目标实例数。
NewConnectionCount 每分钟新建立的连接数。 个/分钟
ProcessedBytes ELB处理的字节数,包括请求和响应数据。 字节
RequestCount 每分钟处理的请求数量。 次/分钟
TargetConnectionErrorCount 后端目标连接错误的数量,表示与后端目标建立连接时发生的错误。
TargetResponseTime 后端目标的平均响应时间,表示从ELB发送请求到接收响应的时间。 毫秒
UnHealthyHostCount 不健康目标的数量,表示未通过健康检查的目标实例数。
UnhealthyRoutingRequestCount 因后端目标不健康而未被路由的请求数量。

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 "ELB", 选择 "AWS Application ELB 监控视图",点击 "确定" 即可添加视图。

日志治理后,可以进行 table 页输出,方便查看和统计分析等。

在日志查看器可以看到日志信息。

监控器(告警)

观测云内置了监控器模板,可以选择从模版创建监控器,并开启适合业务的监控器以及时通知相关成员关注问题,触发条件、频率等信息可以依据实际业务进行调整。

登录观测云控制台,点击「监控」 -「新建监控器」,输入 "AWS Application ELB", 选择对应的监控器,点击 "确定" 即可添加。

AWS ELB Application 请求总数存在突变异常

AWS ELB Application 后端服务存在异常

AWS ELB Application 不健康主机数量过高

总结

AWS ELB 监控至关重要,它能实时洞察负载均衡器性能,助力及时发现并解决潜在问题,保障应用高可用性和性能优化。通过观测云,可集成 AWS ELB 的监控数据,实现一站式可视化和告警。观测云支持多种数据源接入,可将 ELB 的关键指标(如健康主机数、请求计数、延迟等)实时采集并可视化展示,同时基于预设阈值触发告警,让运维人员迅速响应异常,确保业务稳定运行。

相关推荐
A小辣椒7 小时前
AWS Clould Support Engineer就职面试题
aws
亚林瓜子3 天前
AWS WAF中如何放行某个触发了托管规则的接口
aws·waf
悠悠121384 天前
AWS DevOps Agent 体验一周后,我决定把 oncall 手机调成静音了
云计算·aws·devops
yyuuuzz5 天前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
yyuuuzz5 天前
游戏云服务器推荐的技术选择思路
大数据·运维·服务器·游戏·云计算·aws
kernelcraft6 天前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws
普通网友13 天前
Serverless 框架:多云函数部署(AWS + 阿里云 + 腾讯云)
阿里云·serverless·aws
TG_yunshuguoji14 天前
亚马逊云代理商:如何用 CloudWatch+Lambda 打造自动化告警系统
大数据·运维·自动化·云计算·aws
yyuuuzz14 天前
独立站搭建的几个核心技术问题
运维·服务器·网络·数据库·aws
yyuuuzz14 天前
aws亚马逊云服务的基础认知与常见场景
大数据·运维·服务器·网络·云计算·aws