
ECS์ ์ด๋ค ์๋น์ค์ ํ์คํฌ์ WAS 1๊ฐ์ Filebeat 1๊ฐ๊ฐ ์์ต๋๋ค. Filebeat๋ WAS์ CloudWatch ๋ก๊ทธ๋ค์ ์์งํ์ฌ, ์ ๋ถ Elasticsearch๋ก ๋ณด๋ด๋ ์ญํ ์ ์ํํด์ผ ํฉ๋๋ค.
Task definition ์์:
{
"family": "myapp-test-backend-task-def",
"containerDefinitions": [
{
"name": "myapp-test-backend",
"image": "123123123123.dkr.ecr.ap-northeast-2.amazonaws.com/myapp-test/backend:latest",
"cpu": 0,
"memory": 1024,
"portMappings": [
{
"containerPort": 18651,
"hostPort": 18651,
"protocol": "tcp"
}
],
"essential": true,
"environment": [
{
"name": "CORS_ALLOW_ORIGINS",
"value": "http://ec2-48-3-153-157.ap-northeast-2.compute.amazonaws.com"
},
{
"name": "RABBITMQ_URL",
"value": "amqp://testuserforrmq:testpasswordforrmq@my-rabbitmq-discovery.my-rmq-namespace-2:5672/"
}
],
"mountPoints": [],
"volumesFrom": [],
"secrets": [
{
"name": "AWS_ACCESS_KEY_ID",
"valueFrom": "arn:aws:ssm:ap-northeast-2:123123123123:parameter/S3_READONLY_ACCESS_KEY_ID"
},
{
"name": "AWS_SECRET_ACCESS_KEY",
"valueFrom": "arn:aws:ssm:ap-northeast-2:123123123123:parameter/S3_READONLY_ACCESS_KEY_SECRET"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/myapp-test-backend-task-def",
"awslogs-create-group": "true",
"awslogs-region": "ap-northeast-2",
"awslogs-stream-prefix": "ecs"
}
},
"systemControls": []
},
{
"name": "filebeat",
"image": "public.ecr.aws/elastic/filebeat:8.18.3",
"cpu": 0,
"portMappings": [],
"essential": false,
"entryPoint": [
"/bin/bash",
"-c"
],
"command": [
"cat /filebeat-yml/oj-b.yml && filebeat test output -c /filebeat-yml/oj-b.yml && filebeat -e -c /filebeat-yml/oj-b.yml"
],
"environment": [],
"mountPoints": [
{
"sourceVolume": "filebeat-volume",
"containerPath": "/filebeat-yml",
"readOnly": false
}
],
"volumesFrom": [],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/myapp-test-backend-task-def",
"awslogs-create-group": "true",
"awslogs-region": "ap-northeast-2",
"awslogs-stream-prefix": "ecs"
}
},
"systemControls": []
}
],
"taskRoleArn": "arn:aws:iam::123123123123:role/ecsTaskExecutionRole",
"executionRoleArn": "arn:aws:iam::123123123123:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"volumes": [
{
"name": "filebeat-volume",
"efsVolumeConfiguration": {
"fileSystemId": "fs-1231231231231230e14",
"rootDirectory": "/",
"transitEncryption": "ENABLED",
"authorizationConfig": {
"accessPointId": "fsap-123123123123123bca",
"iam": "ENABLED"
}
}
}
],
"placementConstraints": [],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "1024",
"memory": "3072",
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
}
}
`.yml` ํ์ผ์ ๋ด์ EFS ๊ฒฝ๋ก ๊ตฌ์กฐ ์์ (์ฌ๊ธฐ์๋ `./filebeat-yml/oj-b.yml`์ด ์ฌ์ฉ๋์์ต๋๋ค):
root@ip-10-0-27-199:/efs-fs-0c3a80# tree .
.
โโโ etc
โ โโโ prometheus
โ โโโ prometheus.yml
โโโ filebeat-yml
โโโ oj-b.yml
3 directories, 2 files
EFS์ access point ์์:
`./filebeat-yml/oj-b.yml` ํ์ผ ์์:
root@ip-10-0-27-199:/efs-fs-0c3a80/filebeat-yml# cat ./oj-b.yml
filebeat.inputs:
- type: aws-cloudwatch
region_name: ap-northeast-2
log_group_name: "/ecs/myapp-test-backend-task-def"
scan_frequency: 30s
processors:
- add_cloud_metadata: ~
- add_host_metadata: ~
- add_fields:
target: ""
fields:
data_stream.type: logs # ํ์
data_stream.dataset: mya.backend # ์ํ๋ ๋๋ก ์ง์
data_stream.namespace: prod # ํ๊ฒฝ(์ต์
)
event.dataset: mya.backend
source_type: cloudwatch
service_name: myapp-test-backend
output.elasticsearch:
hosts: ["http://10.7.245.124:9200"]
username: "testuserforelastic"
password: "testpasswordforelastic"
setup.template:
name: "myapp-test-template"
pattern: "myapp-test"
type: data_stream # (๊ธฐ๋ณธ๊ฐ์ด์ง๋ง ๋ช
์ ์ถ์ฒ)
setup.ilm.enabled: false # ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ILM ํ์ ์์
Elastic์์ data stream์ index template๋ฅผ ์์ฑํ๋ `curl` ์์:
[elasticsearch@b2d0f3b440b5 ~]$ curl -u testuserforelastic:${ELASTIC_PASSWORD} -X PUT "http://localhost:9200/_index_template/myapp-test-template" -H 'Content-Type: application/json' -d '
{
"index_patterns": [ "myapp-test" ],
"template": {
"settings": {
"index.lifecycle.rollover_alias": "myapp-test"
},
"mappings": {
"dynamic_templates": [
{ "strings": { "match_mapping_type": "string", "mapping": { "type": "keyword" } } }
]
}
},
"data_stream": {}
}
'
์ฐธ๊ณ : ECS์ tasks๋ฅผ ์คํํ๋ role์ ์๋์ ๊ฐ์ ๊ถํ์ด ํ๋ณด๋์ด ์์ด์ผ ํฉ๋๋ค. ๋ํ ๋ณด์ ๊ทธ๋ฃน (security group) ๊ตฌ์ฑํ๋ ๊ฒ๋ ์์ง ๋ง์ธ์.
์ดํ Kibana์์ ๋ฐ์ดํฐ๊ฐ ์์ง๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
'IT > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ ํ์ธ์.
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!