Keskitetty kirjausjärjestelmä Lambda-toimintoille

Kuva Scott Webb on Unsplash

AWS-asiakkaat pääsevät palvelukohtaisiin mittareihin ja lokitiedostoihin saadakseen kuvan siitä, kuinka kukin AWS-palvelu toimii AWS CloudWatch-palvelun kautta. Tätä palvelua voidaan käyttää keskitetynä logiikkaympäristönä pienemmille ja vähemmän monimutkaisille sovelluksille, mutta jos ympäristösi on monimutkainen ja iso, sinulla ei ole vaihtoehtoa kuin siirtyä kolmannen osapuolen ratkaisuun, kuten Splunk, Datadog tai ELK (ElasticSearch, Logstash, Kibana) pino.

Foxintelligence -sivustolla käytämme kuuluisaa ELK-pinoa logiikkaalustamme dokumentoitujen mikropalveluiden ja CloudWatch-lokiemme AWS-hallittujen palveluiden (API Gateway, Lambda, Lambda @ Edge jne.) Kanssa. Palvelimettoman arkkitehtuurin noustessa tarvitsimme kuitenkin yhden paikan, jossa voimme tehdä vianmäärityksiä ja korjata Lambda-toimintojamme useilla AWS-alueilla käyttämällä vuorovaikutteisia ja dynaamisia kojetauluja. Siksi tässä postituksessa seuraan sinua läpi prosessimme, jota seuraamme toimittaessasi lähes tosiaikaisen lokien syötteen CloudWatchista ELK: lle. Työnkulku on kuvattu alla olevassa kaaviossa:

Reaaliaikainen Lambda-hakkuut Amazon Kinesisin, Amazon CloudWatchin ja AWS Lambdan avulla

Käytämme CloudWatch-tilauksia saadaksesi reaaliaikaisen syötteen lokitapahtumia Lambda-toiminnoista ja toimitamme sen Amazon Kinesis Data Streams -sivulle. Sieltä AWS-lambda käynnistetään mukautettua käsittelyä, analysointia ja liiketoimintalogiikan soveltamiseksi lokitietoihimme (lokin rikastaminen) ennen niiden lataamista Logstashiin.

Aloita lokitapahtumien tilaaminen luomalla vastaanottava lähde, johon tapahtumat toimitetaan. Ennen kuin luot Kinesis-virran, laske generoitavien lokitietojen määrä (läpijuoksu). Muista luoda Kinesis-virta, jolla on tarpeeksi siruja tämän tilavuuden käsittelemiseksi. Jos streamissä ei ole tarpeeksi siruja, lokivirra kuristetaan:

Seuraavaksi luo IAM-rooli, joka myöntää CloudWatch-lokien käyttöoikeudet lokien lisäämiseen Kinesis-streamiin:

IAM-rooli tulisi määrittää seuraavan kuvakaappauksen osoittamalla tavalla:

Anna alla oleva komento luodaksesi CloudWatch Logs -kohteen:

Jos haluat toimittaa lokitapahtumien reaaliaikaisen syötteen Kinesikseen, sinun on luotava CloudWatch Logs -tilaussuodatin seuraavalla komennolla:

Tilaussuodatin aloittaa reaaliaikaisen lokitiedon virtauksen valitusta lokiryhmästä Kinesis-streamisi:

Kun olet asentanut tilaussuodattimen, CloudWatch Logs välittää kaikki tulevat lokitapahtumat, jotka vastaavat suodatinkuviota, Kinesis-streamisi. Nyt sinun on otettava lokien kuluttaja käyttöön.

Kuluttaja on Solmupohjainen Lambda-toiminto, joka käsittelee tietueita Kinesis-tietovirroissa:

Siksi sinun on määritettävä käyttörooli oikeuksilla hakea tietueita Kinesisistä, kuten seuraavassa esimerkissä näytetään:

Ja määritä eräkoko, joka luetaan streamistäsi kerralla:

Seurauksena on, että AWS Lambda lukee tietueet tietovirrasta ja kutsuu toimintosi käsittelijää synkronisesti tapahtuman kanssa, joka sisältää stream tietueita. Seuraava on esimerkki Kinesis Data Streamsin julkaisemista tapahtumista:

Toimintojen käsittelijä on itsestään selvä, se vastaanottaa syötteenä Amazon Kinesis -tapahtumatiedot, purkaa dataominaisuustietueen (Kinesis-tietueen dataominaisuus on Base64-koodattu ja pakattu gzip-muodossa) ja kirjoittaa lokin Logstashiin:

Lokit lähetetään UDP-protokollan kautta, mikä on hyvä kompromissi suorituskyvyn ja luotettavuuden suhteen:

Toimitamme joitain tukkeja

Tämän oppaan tarkoituksia varten olen kirjoittanut yksinkertaisen Lambda-toiminnon, joka laskee tietyn numeron Fibonacci-arvon.

Jos kaikki menee hyvin, ElasticSearchiin luodaan uusi hakemisto, jonka malli voidaan nyt määritellä Kibanassa.

Paina ”Luo ​​hakemistomalli”, ja olet valmis analysoimaan lokit:

Tällä hetkellä siellä ei ole paljon, koska kerät vain lokit Lambda-toiminnostasi. Voit rakentaa näkymän tai kojetaulun, joka korostaa tärkeitä tietoja, jotka auttavat tiedottamaan Lambda-toimintojen toteutusta ja toiminnallisuutta koskevista päätöksistä, joten rohkaise rohkeasti!

Jos sinulla on jo paljon olemassa olevia lokiryhmiä, voit tilata Kinesis-määränpäähän seuraavan komentotiedoston avulla:

Seurauksena on, että kaikki Lambda-toimintolokisi toimitetaan Kinesis-tietovirtoihin:

Voit viedä tämän eteenpäin ja hyödyntää CloudTrail-valtaa Lambda-toiminnon käynnistämiseen, joka perustuu CreateLogGroup -tapahtumaan, uusien lokiryhmien tilaamiseksi automaattisesti.

Emme jaa tätä vain melun lisäämiseksi

Jaamme tämän, koska etsimme ihmisiä, jotka haluavat auttaa meitä ratkaisemaan joitain näistä ongelmista. Työn ilmoitukseen on vain niin paljon näkemyksiä, että toivomme, että tämä on antanut hieman enemmän ja lisää ruokahaluasi. Jos pidät avointa mieltä uudesta roolista tai haluat vain keskustella - ota yhteyttä tai ota yhteyttä - me mielellämme kuulla sinusta!