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 在 命令行工具 中
35KB
713 行
Cloudwatch Metrics Agent
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),可以在前台保持主进程的同时在后台启动代理程序。为了正确处理终止,必须使用管理器或初始化多路复用器(如 tini 或 dumb-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