Потоковая передача журналов Cloudwatch в Amazon ES - PullRequest
0 голосов
/ 11 апреля 2020

Я использую Fargate для развертывания своего приложения. Для регистрации журналов контейнера я использую awslogs в качестве драйвера журнала. Теперь я хочу отправить свои журналы в сервис Amazon ES. Проходя через документы для отправки, я обнаружил примечание, в котором упоминается

Streaming large amounts of CloudWatch Logs data to other
destinations might result in high usage charges. 

. Я хочу понять, за что все будет оплачиваться при отправке журналов в ELK? Как они определяют large amounts?

Будет ли мне выставлен счет за

a) Cloudwatch?

b) Драйвер журнала?

c) Лямбда-функция? Все ли строки журнала запускают лямбда-функцию?

Наконец, есть ли еще возможность снизить стоимость?

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

Лично я бы посмотрел бегло или бегло в другом контейнере рядом с вашим приложением https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch

Вы можете отправлять свои журналы напрямую в ES без затрат на облачные часы.

РЕДАКТИРОВАТЬ

Вот окончательное решение на случай, если кто-то ищет более дешевое решение.

Запустите Fluentd / Fuentbit в другом контейнере рядом с вашим приложением

Используя Github Config , я смог переслать журналы в ES с помощью следующей конфигурации:

{
    "family": "workflow",
    "cpu": "256",
    "memory": "512",
    "containerDefinitions": [
        {
            "name": "log_router",
            "image": "docker.io/amazon/aws-for-fluent-bit:latest",
            "essential": true,
            "firelensConfiguration": {
                "type": "fluentbit",
                "options":{
                   "enable-ecs-log-metadata":"true"
                }
            },
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "your_log_group",
                    "awslogs-region": "us-east-1",
                    "awslogs-stream-prefix": "ecs"
                }
            },
            "memoryReservation": 50
        },
        {
            "name": "ContainerName",
            "image": "YourImage",
            "cpu": 0,
            "memoryReservation": 128,
            "portMappings": [
                {
                    "containerPort": 5005,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "command": [
                "YOUR COMMAND"
            ],
            "environment": [],
            "logConfiguration": {
                "logDriver": "awsfirelens",
                "secretOptions": [],
                "options": {
                    "Name": "es",
                    "Host": "YOUR_ES_DOMAIN_URL",
                    "Port": "443",
                    "tls": "On",
                    "Index": "INDEX_NAME",
                    "Type": "TYPE"
                }
            },
            "resourceRequirements": []
        }
    ]
}

Контейнер log_router собирает журналы и отправляет их в ES. Для получения дополнительной информации см. Custom Log Routing

Обратите внимание, что в случае Fargate требуется контейнер log_router, но не с ECS.

Это самое дешевое из известных мне решений, в которое не входят Cloudwatch, Lamdas, Kinesis.

0 голосов
/ 11 апреля 2020

Как и любой ресурс, AWS взимает плату за использование и обслуживание. следовательно, плата будет взиматься за выполнение лямбда-функции и хранение данных в CloudWatch. причина, по которой они упомянули: Streaming large amounts of CloudWatch Logs data to other destinations might result in high usage charges. - потому что лямбда-функция требует времени для обработки журнала и вставки его в ES. При попытке потоковой передачи большого количества журналов лямбда-функция будет выполняться дольше.

  • Лямбда-функция? Все ли строки журнала запускают лямбда-функцию?

    Да, при включении потоковой передачи из CloudWatch в ES каждый журнал, вставленный в CloudWatch, запускает лямбда-функцию.

Изображение из демонстрация (см. триггер):

enter image description here

  • Есть ли еще возможность снизить стоимость еще?

Единственный способ снизить стоимость ( при использовании этой реализации ) - написать собственную лямбда-функцию, которая будет запускаться каждые X секунд \ минут, и вставлять ее в ES. Насколько я могу сказать, разрыв в затратах будет бессмысленным.

Дополнительная информация:

Лямбда-код .

Как это работает за кадром .

...