#cpu-memory #metrics #cloudwatch #aws #agent #sending #publishing

bin+lib cloudwatch_metrics_agent

将自定义 CPU 和内存指标发送到 Cloudwatch 的代理程序

6 个版本

0.1.8 2023 年 12 月 25 日
0.1.7 2023 年 11 月 11 日
0.1.6 2022 年 5 月 3 日
0.1.5 2022 年 2 月 22 日

#1207命令行工具

MIT 许可证

35KB
713

Cloudwatch Metrics Agent

Crates.io Build

cloudwatch_metrics_agent 是一个简单的代理程序,用于将自定义的 CPU 和内存指标发送到 Cloudwatch。

安装

cargo install cloudwatch_metrics_agent

使用方法

简单

启动代理程序,并每分钟将指标发送到 CloudWatch

cloudwatch_metrics_agent --namespace TestNamespace --service FooService --period 60

预览指标,而不实际将它们发送到 CloudWatch

RUST_LOG=info cloudwatch_metrics_agent --namespace TestNamespace --service FooService --period 60 --dry-run

副车容器中的代理程序

要在 ECS 中使用 Fargate 或 EC2 部署代理程序,只需将带有代理程序的容器添加到包含被监视服务的任务定义中。代理程序容器与其他容器共享任务定义中的资源和命名空间,因此收集的指标是有效的。

Docker 容器内的代理程序

如果计算环境不允许多容器配置(例如 AWS Batch),可以在前台保持主进程的同时在后台启动代理程序。为了正确处理终止,必须使用管理器或初始化多路复用器(如 tinidumb-init),以便后台代理进程接收 SIGTERM 信号并在关闭时刷新剩余的指标。由于使用入口点 shell 脚本作为入口点,整个进程组都必须接收信号。为此,必须使用带有 进程组 -g 标志tini,而 dumb-init 默认执行此操作。入口点脚本还必须在未发送信号时成功发送指标。

示例入口点脚本

#!/bin/bash

# launch agent in the background and save its pid
cloudwatch_metrics_agent --namespace TestNamespace --service FooService &
child=$!

# launch main process in the foreground
"$@"
exitcode=$?

echo "Terminating agent after foreground process exit" >&2
kill -TERM "$child"
wait "$child"
echo "Exiting with $exitcode" >&2
exit $exitcode

用于 Dockerfile 的示例 ENTRYPOINT 指令

ENTRYPOINT ["tini", "-g", "--"]

ENTRYPOINT ["dumb-init"]

工作原理

代理程序收集系统指标(CPU 和内存利用率)并定期将它们发送到发布者。发布者可以是 AWS CloudWatch 服务或控制台(用于调试)。

周期(--period 参数)指定日志向发布者发送的频率,默认为一分钟。在此周期内收集指标,分辨率更高(0.9秒),并按中位数和最大值聚合。因此,将发布周期设置为五分钟(非详细CloudWatch指标默认值)相对安全。

如果在发送大量指标后两次重试期间云服务不可用,则会跳过这批指标。当代理停止(收到SIGTERM或SIGINT信号)时,所有剩余的指标都会刷新到发布者。

发出的指标

  • CPUUtilization - 所有CPU核心的平均CPU利用率,以百分比表示。

  • MemoryUtilization - 平均内存利用率,以百分比表示。计算方法为已用内存除以总内存的百分比,其中已用内存为总内存减去空闲、缓冲区、页面缓存和slabs。

指标发布到指定的命名空间和服务名称。AWS凭证通过环境变量、配置文件或IAM角色配置

日志通过env_logger配置,因此默认情况下只通过错误控制日志。要仅显示发出的指标而省略其他日志,请设置环境变量RUST_LOG="cloudwatch_metrics_agent::publisher=info"RUST_LOG="cloudwatch_metrics_agent::cloudwatch=info"

代理使用Tokio框架进行异步工作,使用AWS SDK for Rust与AWS通信,并使用sysinfo收集指标。

可移植性

在Linux和macOS上运行。

要为容器使用构建静态二进制文件,请使用静态CRT链接。

cargo build --release --target x86_64-unknown-linux-musl

许可证

BSD 3-Clause

依赖项

~22–32MB
~485K SLoC