상세 컨텐츠

본문 제목

Custom otel collector configuration in AWS ECS EC2

Splunk/Observability

by 야솔아빠 2024. 3. 23. 22:13

본문

반응형

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": []
}

1초 단위로 매트릭 수집

 

[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 명령을 수행한 것입니다.

 

 

 

반응형

'Splunk > Observability' 카테고리의 다른 글

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

관련글 더보기

댓글 영역