Потоковая передача журналов Cloudwatch в Amazon ES

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

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

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

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

а) Cloudwatch?

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

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

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


person PythonEnthusiast    schedule 11.04.2020    source источник


Ответы (2)


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

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

ИЗМЕНИТЬ

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

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

Использование rel = "nofollow noreferrer"> 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. Для получения дополнительной информации см. Пользовательская маршрутизация журналов.

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

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

person james phillips    schedule 11.04.2020
comment
Вы имеете в виду использование awsfirelens в качестве logDriver? - person PythonEnthusiast; 11.04.2020
comment
Ах, мой плохой фаргейт не поддерживает драйвер журнала fluentd, в отличие от ec2 ecs. - person james phillips; 11.04.2020
comment
Просто просмотрел документы, и да, awsfirelens будет работать, не похоже, что они взимают за это плату, кроме обычных затрат на передачу данных. - person james phillips; 11.04.2020
comment
Если вы не хотите использовать пожарный шланг и можете перенаправить в другой контейнер, например, этот пример, github.com/aws-samples/amazon-ecs-firelens-examples/tree/master/ - person james phillips; 11.04.2020
comment
Я не понимаю, что делает контейнер log_router в github.com/aws-samples/amazon-ecs-firelens-examples/blob/master/? Увидел почти на всех примерах. Есть какие-нибудь мнения по этому поводу? - person PythonEnthusiast; 11.04.2020
comment
Разве я не могу напрямую переслать его в мою fluentd службу fargate? Этот дополнительный контейнер log_router в моем случае займет немного места / памяти. - person PythonEnthusiast; 11.04.2020
comment
Я в это не верю, здесь используется настраиваемая свободная битовая сборка github.com/ aws / aws-for-fluent-bit # плагины - person james phillips; 11.04.2020
comment
Пожалуйста, позвольте мне отредактировать ваш ответ. Ваш ответ был очень близок к тому, чтобы помочь мне найти решение. В любом случае спасибо. - person PythonEnthusiast; 13.04.2020
comment
@PythonEnthusiast У вас есть решение по этому поводу? Выполнение POC на AWS elasticsearch для управления журналами и необходимость знать приблизительную стоимость потоковой передачи журналов. - person mahendra rathod; 27.01.2021

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

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

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

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

введите описание изображения здесь

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

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

Больше информации:

Лямбда-код.

Как это работает за кулисами.

person Amit Baranes    schedule 11.04.2020
comment
Как насчет использования github.com/aws-samples/amazon-ecs-firelens-examples/blob/master/ ?? Разве это не будет дешевле по сравнению с потоковой передачей данных, которая включает облачный контроль, лямбды и кинезис? Мы очень ценим ваши мысли! - person PythonEnthusiast; 11.04.2020
comment
Я не пробовал это делать, но уверен, что если это сработает, затраты будут очень небольшими. Не могли бы вы рассказать немного о своей архитектуре? - person Amit Baranes; 11.04.2020
comment
Я отправил ответ. Пожалуйста, посмотрите. Он не включает Cloudwatch, Kinesis / Lambdas. - person PythonEnthusiast; 13.04.2020
comment
@PythonEnthusiast Хорошо, в то время, когда я столкнулся с этой проблемой, это было единственное решение. спасибо, что поделились этим с нами. - person Amit Baranes; 13.04.2020