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 上启用应用程序