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.py
、datakit.py
、dataway.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 的关键指标(如健康主机数、请求计数、延迟等)实时采集并可视化展示,同时基于预设阈值触发告警,让运维人员迅速响应异常,确保业务稳定运行。