当前位置: 首页 > news >正文

AWS中国云中的调用链监控(EC2版)

问题

现在有个SpringBoot项目部署在AWS中国云,需要进行性能测试。要进行性能测试势必要对服务与服务之间的调用链进行监控,这里就需要部署AWS云的调用链监控来监控请求调用链状况了。

Amazon X-Ray vs AWS CloudWatch Application Signals

AWS X-Ray的Java SDK有一段文是这样的,如下:

End-of-support notice – On February 25th, 2027, Amazon X-Ray will discontinue support for Amazon X-Ray SDKs and daemon. After February 25th, 2027, you will no longer receive updates or releases. For more information on the support timeline, see X-Ray SDK and daemon end of support timeline. We recommend to migrate to OpenTelemetry. For more information on migrating to OpenTelemetry, see Migrating from X-Ray instrumentation to OpenTelemetry instrumentation .

简单来说Amazon X-Ray SDK到2027 年 2 月 25 日之后他们就不维护了,意思以后要用Application Signals来进行监控来,Application Signals实际上就是OpenTelemetry,所以,接下来步骤和OpenTelemetry差不了多少。

AWS CloudWatch Application Signals集成

步骤 1:在账户中启用 Application Signals

这一步我已经完成了跳过。

步骤 2:下载并启动 CloudWatch 代理

# 在EC2上面安装CloudWatch代理程序
sudo yum -y install amazon-cloudwatch-agent
# 复制日志收集配置文件
sudo chmod 757 /opt/aws/amazon-cloudwatch-agent/etc/
# 为CloudWatch代理程序配置collectd插件
sudo mkdir -p /usr/share/collectd
sudo touch /usr/share/collectd/types.db
# 生成新的cloudwatch配置文件 注意这里有环境变量,是预先配置好的:${APPLICATION_NAME} ${DEPLOYMENT_GROUP_NAME}
sudo tee ~/amazon-cloudwatch-agent.json > /dev/null <<EOF
{"traces": {"traces_collected": {"application_signals": {}}},"logs": {"metrics_collected": {"application_signals": {}},"logs_collected": {"files": {"collect_list": [{"file_path": "/var/mtgcms-${APPLICATION_NAME}/log/${APPLICATION_NAME}.log","log_group_name": "${DEPLOYMENT_GROUP_NAME}-${APPLICATION_NAME}-spring-logging","log_stream_name": "${DEPLOYMENT_GROUP_NAME}-${APPLICATION_NAME}-spring-logging-{instance_id}.log","timestamp_format": "%Y-%m-%d %H:%M:%S.%f","multi_line_start_pattern": "{timestamp_format}"}]}}},"agent": {"metrics_collection_interval": 60,"run_as_user": "root"},"metrics": {"aggregation_dimensions": [["InstanceId"]],"append_dimensions": {"AutoScalingGroupName": "\${aws:AutoScalingGroupName}","ImageId": "\${aws:ImageId}","InstanceId": "\${aws:InstanceId}","InstanceType": "\${aws:InstanceType}"},"metrics_collected": {"collectd": {"metrics_aggregation_interval": 60},"cpu": {"measurement": ["cpu_usage_idle","cpu_usage_iowait","cpu_usage_user","cpu_usage_system"],"metrics_collection_interval": 60,"resources": ["*"],"totalcpu": false},"disk": {"measurement": ["used_percent","inodes_free"],"metrics_collection_interval": 60,"resources": ["*"]},"diskio": {"measurement": ["io_time"],"metrics_collection_interval": 60,"resources": ["*"]},"mem": {"measurement": ["mem_used_percent"],"metrics_collection_interval": 60},"statsd": {"metrics_aggregation_interval": 60,"metrics_collection_interval": 60,"service_address": ":8125"},"swap": {"measurement": ["swap_used_percent"],"metrics_collection_interval": 60}}}
}
EOF
echo "开始安装amazon-cloudwatch-agent配置文件"
sudo mv -f ~/amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# 复原CloudWatch目录权限
sudo chmod 755 /opt/aws/amazon-cloudwatch-agent/etc/
sudo chown root:root /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
# 启用CloudWatch应用SysV服务
sudo systemctl enable amazon-cloudwatch-agent
sudo systemctl daemon-reload

EC2运行角色权限设置

EC2运行的角色需要有CloudWatchAgentServerPolicy权限策略。

步骤3:配置aws-otel-java-instrumentation

打开aws-otel-java-instrumentation开源项目,下载java的代理jar程序,链接:https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar
下载这个jar程序后,在我们SpringBoot应用程序的环境变量JAVA_OPTS,内容类似如下配置:

export JAVA_OPTS="-javaagent:/var/aws-opentelemetry-agent.jar -Dotel.resource.attributes=service.name={SpringBoot项目服务名},deployment.environment.name=SpringBoot项目环境变量"

例子如下:

JAVA_OPTS="-javaagent:/var/aws-opentelemetry-agent.jar -Dotel.resource.attributes=service.name=admin,deployment.environment.name=dev -Dspring.profiles.active=dev -server -Xms16g -Xmx16g -XX:MaxGCPauseMillis=500 -XX:+UseParallelGC"

还需要配置一些环境变量:

Environment="OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true"
Environment="OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf"
Environment="OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT=http://localhost:4316/v1/metrics"
Environment="OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4316/v1/traces"

启动SpringBoot项目即可。

效果

测试效果

参考

  • Amazon X-Ray 适用于 Java 的 SDK
  • 使用 collectd 检索自定义指标
  • Manual setup with -javaagent flag
  • 在 Amazon EC2 上启用应用程序
http://www.dtcms.com/a/391286.html

相关文章:

  • CI/CD到底是什么?
  • 3dmax三维动画渲染很慢怎么办?
  • ASIS CTF 2025 SatoNote
  • BasicForm的使用
  • CSP初赛——STL中的函数整理
  • 小杰机器学习高级(two)——极大似然估计、交叉熵损失函数
  • 关于px4 1.15.0电机控制有效矩阵的更新
  • 【设计模式】职责链模式
  • 22届考研(华为oD)-Java面经
  • 轻松实践:用Python实现“名字大作战”游戏,表白Zulu
  • EasyDSS视频直播点播平台如何为游戏直播提供超强技术底座?
  • MySQL----MVCC机制
  • 设计|str增量法|计算贡献
  • Spring中Controller层中容易搞混的注解
  • Git GitHub 个人账户创建教程
  • Python学习系统计划:从零到精通的科学路径
  • 解锁 JavaScript 的数学魔法:深入探索 Math 对象
  • dcm4che系列主要开源项目概述
  • 枚举深入解析
  • Qt中delete与deleteLater()的使用
  • AD5621(单通道缓冲电压输出DAC)芯片的详细用法
  • vLLM的面试题
  • 最优控制3 -- 动态规划-一个解析解的例子
  • 深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论
  • 京东零售张科:DataAI Infra会成为驱动未来的技术基石
  • Java 运维中的一些常用命令
  • 用 go-commons 打造一套最小可行监控体系
  • 广东省省考备考(第一百零二天9.19)——言语(拔高突破第二节课)
  • 在vscode中,在powershell 下,如何进入子目录?
  • 易语言源码怎么制作软件 易语言源码和模块怎么做成软件