splunk otel collector는 ECS 환경에서 커스터마이징 하는 방법입니다.
workaround 방법이지만 쉽게 응용할 수 있습니다.
splunk-otel-collector container definition에 아래 처럼 정의합니다.
"entryPoint": [
"sh",
"-c"
],
"command": [
"curl --fail $CONFIG_URL > /etc/otel/collector/ecs_ec2_config.yaml && exec /otelcol"
],
"environment": [
...
{
"name": "CONFIG_URL",
"value": "https://raw.githubusercontent.com/InhoJung/custom-splunk-otel-collector/main/ecs_ec2_config/updated_ecs_ec2_config.yaml"
}
...
]
https://raw.githubusercontent.com/InhoJung/custom-splunk-otel-collector/main/ecs_ec2_config/updated_ecs_ec2_config.yaml <--- 이곳에 커스터마이징할 ecs_ec2_config.yaml 파일을 저장하고, curl 명령으로 default 파일 /etc/otel/collector/ecs_ec2_config.yaml 에 overwrite 합니다. 이후 exec 명령으로 splunk otel collector를 재기동하는 것입니다.
따라서 이렇게 하기 위해서는 splunk otel collector 버전이 지원하는 default config yaml 파일을 복사하여 커스터마이징 해야 합니다.
splunk-otel-collector 버전은 계속 증가할 텐데, 제 블로그의 config 값을 그대로 사용한다면 문제가 생길 것입니다.
아래 task definition은 저의 github에 커스터마이징한 ecs_ec2_config.yaml로 기동하는 예제 입니다. (사이드카 방식)
{
"taskDefinitionArn": "arn:aws:ecs:us-east-1:432274630114:task-definition/factorial-task:26",
"containerDefinitions": [
{
"name": "factorial",
"image": "public.ecr.aws/e7b5k4u7/factorial",
"cpu": 1024,
"links": [
"splunk-otel-collector"
],
"portMappings": [
{
"name": "forwader8080",
"containerPort": 8080,
"hostPort": 8080,
"protocol": "tcp",
"appProtocol": "http"
},
{
"name": "forwarder80",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"appProtocol": "http"
}
],
"essential": true,
"environment": [
{
"name": "OTEL_SERVICE_NAME",
"value": "InhoFactorialService"
},
{
"name": "OTEL_RESOURCE_ATTRIBUTES",
"value": "deployment.environment=INHO,service.version=1.0.0"
},
{
"name": "OTEL_JAVAAGENT_DEBUG",
"value": "true"
},
{
"name": "OTEL_EXPORTER_OTLP_ENDPOINT",
"value": "http://172.17.0.1:4317"
},
{
"name": "SPLUNK_METRICS_ENDPOINT",
"value": "http://172.17.0.1:9943"
}
],
"mountPoints": [],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-create-group": "true",
"awslogs-group": "/ecs/factorial-task",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
},
"systemControls": []
},
{
"name": "splunk-otel-collector",
"image": "quay.io/signalfx/splunk-otel-collector:latest",
"cpu": 512,
"memory": 512,
"portMappings": [
{
"containerPort": 4317,
"hostPort": 4317,
"protocol": "tcp"
}
],
"essential": true,
"entryPoint": [
"sh",
"-c"
],
"command": [
"curl --fail $CONFIG_URL > /etc/otel/collector/ecs_ec2_config.yaml && exec /otelcol"
],
"environment": [
{
"name": "METRICS_TO_EXCLUDE",
"value": "[]"
},
{
"name": "HOST_DEV",
"value": "/hostfs/dev"
},
{
"name": "HOST_ETC",
"value": "/hostfs/etc"
},
{
"name": "SPLUNK_CONFIG",
"value": "/etc/otel/collector/ecs_ec2_config.yaml"
},
{
"name": "SPLUNK_REALM",
"value": "us1"
},
{
"name": "HOST_PROC",
"value": "/hostfs/proc"
},
{
"name": "SPLUNK_ACCESS_TOKEN",
"value": "토큰"
},
{
"name": "HOST_SYS",
"value": "/hostfs/sys"
},
{
"name": "HOST_RUN",
"value": "/hostfs/run"
},
{
"name": "ECS_METADATA_EXCLUDED_IMAGES",
"value": "[\"quay.io/signalfx/splunk-otel-collector\"]"
},
{
"name": "HOST_VAR",
"value": "/hostfs/var"
},
{
"name": "CONFIG_URL",
"value": "https://raw.githubusercontent.com/InhoJung/custom-splunk-otel-collector/main/ecs_ec2_config/updated_ecs_ec2_config.yaml"
}
],
"mountPoints": [
{
"sourceVolume": "hostfs",
"containerPath": "/hostfs",
"readOnly": true
}
],
"volumesFrom": [],
"systemControls": []
}
],
"family": "factorial-task",
"taskRoleArn": "arn:aws:iam::432274630114:role/ecsTaskExecutionRole",
"executionRoleArn": "arn:aws:iam::432274630114:role/ecsTaskExecutionRole",
"networkMode": "bridge",
"revision": 26,
"volumes": [
{
"name": "hostfs",
"host": {
"sourcePath": "/"
}
}
],
"status": "ACTIVE",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"placementConstraints": [],
"compatibilities": [
"EC2"
],
"requiresCompatibilities": [
"EC2"
],
"cpu": "2048",
"memory": "6072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"registeredAt": "2024-03-23T12:21:22.856Z",
"registeredBy": "arn:aws:sts::432274630114:assumed-role/AWSReservedSSO_SPLKAdministratorAccess_06c8810013bb6e59/ijung@splunk.com",
"tags": []
}
[config file 변경되었는지 확인 여부]
EC2 instance에 ssh 접속.
저는 session manager로 접속하였습니다.
sudo docker ps -a
splunk otel collector 컨테이너 ID 를 확인하고 아래처럼 입력해보면, 변경한 yaml 파일을 확인해볼 수 있습니다.
eaad009024cc 는 docker ps -a 명령으로 확인한 컨테이너 id 입니다.
sudo docker exec -it eaad009024cc cat /etc/otel/collector/ecs_ec2_config.yaml
이 명령의 부연설명을 하자면, eaad009024cc 컨테이너 환경게 접속해서, "cat /etc/otel/collector/ecs_ec2_config.yaml" linux 명령을 수행한 것입니다.
Private Connectivity (0) | 2024.04.13 |
---|---|
AWS ECS EC2 - Otel collector 설치 (0) | 2024.04.02 |
Splunk Observability APM with AWS ECS EC2 (0) | 2024.03.22 |
Splunk Otel Collector install on AWS ECS EC2 (0) | 2024.03.20 |
Oracle database monitoring (1) | 2023.10.08 |
댓글 영역