Not a customer? Click the 'Start a free trial' link to begin a 30-day SaaS trial of our product and to join our community.
Existing Cisco AppDynamics customers should click the 'Sign In' button to authenticate to access the community
03-07-2024 10:11 AM - edited 03-15-2024 09:35 AM
In this article we will try to get your ECS Java application monitored by AppDynamics Java Agent.
For starters I am assuming you have an application ready, if not a sample tomcat application image will be used in our task definition file.
{
"family": "aws-opensource-otel",
"containerDefinitions": [
##### Application image
{
"name": "aws-otel-emitter",
"image": "docker.io/abhimanyubajaj98/tomcat-app-buildx:latest",
"cpu": 0,
"portMappings": [
{
"name": "aws-otel-emitter",
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [
{
"name": "APPDYNAMICS_AGENT_ACCOUNT_NAME",
"value": "XXXXX"
},
{
"name": "APPDYNAMICS_AGENT_TIER_NAME",
"value": "abhi-tomcat-ecs"
},
{
"name": "APPDYNAMICS_CONTROLLER_PORT",
"value": "443"
},
{
"name": "JAVA_TOOL_OPTIONS",
"value": "-javaagent:/opt/appdynamics/javaagent.jar"
},
{
"name": "APPDYNAMICS_AGENT_APPLICATION_NAME",
"value": "abhi-ecs-fargate"
},
{
"name": "APPDYNAMICS_CONTROLLER_HOST_NAME",
"value": "XXXXX.saas.appdynamics.com"
},
{
"name": "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME_PREFIX",
"value": "abhi-tomcat-ecs"
},
{
"name": "APPDYNAMICS_CONTROLLER_SSL_ENABLED",
"value": "true"
},
{
"name": "APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY",
"value": "XXXXX"
},
{
"name": "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME",
"value": "true"
}
],
"mountPoints": [],
"volumesFrom": [
{
"sourceContainer": "appdynamics-java-agent"
}
],
"dependsOn": [
{
"containerName": "appdynamics-java-agent",
"condition": "START"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "True",
"awslogs-group": "/ecs/ecs-aws-otel-java-tomcat-app",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
"healthCheck": {
"command": [
"CMD-SHELL",
"curl -f http://localhost:8080/sample || exit1"
],
"interval": 300,
"timeout": 60,
"retries": 10,
"startPeriod": 300
}
},
#####Java Agent configuration
{
"name": "appdynamics-java-agent",
"image": "docker.io/abhimanyubajaj98/java-agent-ecs",
"cpu": 0,
"portMappings": [],
"essential": false,
"environment": [],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/java-agent-ecs",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
}
}
],
"taskRoleArn": "arn:aws:iam::778192218178:role/ADOTRole",
"executionRoleArn": "arn:aws:iam::778192218178:role/ADOTTaskRole",
"networkMode": "bridge",
"requiresCompatibilities": [
"EC2"
],
"cpu": "256",
"memory": "512"
}
You will need to edit all the sections with “XXXXX”
Your ECS task should have the appropriate permission. In my case I created a taskRole ADOTRole and taskexecutionrole ADOTTaskRole. The permission.
The policy for ADOTRole looks like->
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy",
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets",
"xray:GetSamplingStatisticSummaries",
"cloudwatch:PutMetricData",
"ec2:DescribeVolumes",
"ec2:DescribeTags",
"ssm:GetParameters"
],
"Resource": "*"
}
]
}
The policy for ADOTTaskRole looks like ->
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy",
"xray:PutTraceSegments",
"xray:PutTelemetryRecords",
"xray:GetSamplingRules",
"xray:GetSamplingTargets",
"xray:GetSamplingStatisticSummaries",
"cloudwatch:PutMetricData",
"ec2:DescribeVolumes",
"ec2:DescribeTags",
"ssm:GetParameters"
],
"Resource": "*"
}
]
}
Going back to the template, you can build your own image as well. The dockerfile for the image can be found here along with task definition file
https://github.com/Abhimanyu9988/ecs-java-agent
To understand more about AppDynamics Java Agent, Please refer to below document->
https://docs.appdynamics.com/appd/22.x/22.12/en/application-monitoring/install-app-server-agents/jav...
For any queries, you can reach out to me on LinkedIn or simply post your question on github.
Thank you! Your submission has been received!
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form