Централизирана система за дърводобив за ламбда функции

Снимка на Скот Уеб на Unsplash

Клиентите на AWS могат да имат достъп до специфични за услугата показатели и файлове на журнали, за да получат представа за това как всяка AWS услуга работи чрез AWS CloudWatch. Тази услуга може да се използва като централизирана платформа за регистрация за по-малки и по-малко сложни приложения, но ако средата ви е сложна и голяма, тогава няма да имате възможност да търсите решение на трети страни като Splunk, Datadog или ELK (ElasticSearch, Logstash, Кибана) стек.

В Foxintelligence използваме известния стек ELK като нашата платформа за регистрация за нашите Dockerized Microservices и CloudWatch Logs за AWS управлявани услуги (API Gateway, Lambda, Lambda @ Edge и др.). Въпреки това, с израстването на архитектурата без сървър, се нуждаехме от едно място, където можем да отстраним проблеми и да отстраним грешки нашите функции Lambda да се въртят в множество AWS региони, използвайки интерактивни и динамични табла за управление. Следователно в тази публикация ще ви преведа през процеса, който последвахме, за да доставяме почти емисии от дневници от CloudWatch в реално време до ELK. Работният процес е описан в схемата по-долу:

Регистриране в реално време на ламбда с Amazon Kinesis, Amazon CloudWatch и AWS Lambda

Ще използваме абонаменти в CloudWatch, за да получим достъп до емисиите в реално време на събития в дневника от функциите на Lambda и да го предоставим на Amazon Kinesis Data Streams. Оттам ще се задейства AWS Lambda за персонализирана обработка, анализ и прилагане на бизнес логика към нашите лог данни (обогатяване на лога), преди да ги заредите в Logstash.

За да започнете да се абонирате за регистрация на събития, създайте приемащия източник, където ще се доставят събитията. Преди да създадете поток Kinesis, изчислете обема на регистрационните данни (пропускателна способност), които ще бъдат генерирани. Не забравяйте да създадете Kinesis поток с достатъчно парчета, за да се справи с този обем. Ако потокът няма достатъчно парчета, лог потокът ще бъде заглушен:

След това създайте IAM роля, която ще предостави разрешения на CloudWatch Logs за вмъкване на регистрационни файлове във вашия Kinesis поток:

Ролята на IAM трябва да бъде конфигурирана, както е показано на следния екран:

Изпълнете командата по-долу, за да създадете дестинация на CloudWatch Logs:

За да доставите в Kinesis почти емисии в реално време на събития в дневника, трябва да създадете абонаментен филтър за CloudWatch Logs със следната команда:

Филтърът за абонаменти веднага стартира потока на данните от дневника в реално време от избраната група журнали към вашия поток Kinesis:

След като настроите абонаментния филтър, CloudWatch Logs препраща всички входящи събития в дневника, които съответстват на модела на филтъра, към вашия поток Kinesis. Сега трябва да разгърнете потребителския си дневник.

Потребителят е ламбда-базирана функция на Node, която ще обработва записи в потоци от данни на Kinesis:

Следователно, трябва да зададете изпълнителна роля с разрешения за извличане на записи от Kinesis, както е показано в следния пример:

И конфигурирайте размера на партидата, която ще бъде прочетена от вашия поток наведнъж:

В резултат на това AWS Lambda ще чете записите от потока от данни и ще извиква синхронно вашия обработчик на функции със събитие, което съдържа записи на потоци. По-долу е пример за събития, публикувани от Kinesis Data Streams:

Функционалният манипулатор е сам по себе си, той получава данни за събитията на Amazon Kinesis като вход, декодира записа на атрибута на данните (Атрибутът на данните в записа Kinesis е Base64 кодиран и компресиран в gzip формат) и записва дневника в Logstash:

Дневниците ще бъдат изпращани чрез UDP протокол, който е добър компромис по отношение на производителност и надеждност:

Доставка на някои трупи

За целта на този урок съм написал проста функция на Lambda, която изчислява стойността на Фибоначи на дадено число.

Ако всичко върви добре, в ElasticSearch ще бъде създаден нов индекс, чийто модел вече може да бъде определен в Кибана.

Натиснете „Създаване на образец на индекс“ и сте готови да анализирате дневниците:

В момента там няма да има много, защото вие само събирате трупи от функцията си Lambda. Можете да изградите изглед или табло, като подчертавате важна информация, която помага да се информират решения относно прилагането и функционалността на функциите на Lambda, така че не се колебайте да се разхождате!

Ако вече имате много съществуващи групи от журнали, можете да използвате следния скрипт за обвивка, за да се абонирате за дестинация Kinesis:

В резултат на това всички ваши регистрационни файлове на Lambda ще бъдат доставени в потоците от данни на Kinesis:

Можете да вземете това допълнително и да използвате силата на CloudTrail, за да се възползвате от функция Lambda въз основа на събитието CreateLogGroup, за да се абонирате автоматично за нови групи журнали.

Не споделяме това само за да вдигаме шум

Споделяме това, защото търсим хора, които искат да ни помогнат да решим някои от тези проблеми. Има само толкова много представа, че можем да се впишем в обява за работа, така че се надяваме, че това е дало малко повече и ще засили апетита ви. Ако поддържате открито мнението си за нова роля или просто искате чат - свържете се или кандидатствайте - ще се радваме да чуем от вас!