Kuinka toteuttaa lokiyhdistelmä AWS Lambda -sovellukselle

Lähetä Lambda-toimintojen lokit lokien yhdistämispalveluun, kuten Logz.io

Lambda-toiminnon suorittamisen aikana Lambda kaappaa kaiken, mitä kirjoitat stdoutiin (esimerkiksi käyttämällä konsoli.logia Node.js: ssä) ja lähettää CloudWatch-lokit asynkronisesti taustalla. Ja se tekee tämän lisäämättä lisäkustannuksia funktion suoritusaikaasi.

Löydät kaikki Lambda-toimintojen lokit CloudWatch-lokit -sivulta. Jokaiselle toiminnolle on yksilöllinen lokiryhmä. Jokainen lokiryhmä koostuu sitten monista lokivirroista, yksi jokaiselle toiminnon samanaikaisesti suorittavalle esiintymälle.

Voit lähettää lokit CloudWatch-lokkeihin itse PutLogEvents-toiminnon kautta. Tai voit lähettää ne haluamallesi lokien yhdistämispalvelulle, kuten Splunk tai Elasticsearch.

Mutta muista, että kaiken täytyy tehdä toiminnon kutsun aikana. Jos soitat ylimääräisiä verkkopuheluita kutsun aikana, maksat siitä lisäaikaa. Käyttäjien on myös odotettava pidempään, kunnes sovellusliittymä vastaa.

Nämä ylimääräiset verkkopuhelut saattavat lisätä vain 10–20 ms kutakin kutsua kohden. Mutta sinulla on mikropalveluita, ja yksi käyttäjän toiminta voi sisältää useita API-puheluita. Nämä 10–20 ms / API-puhelu voi yhdistää ja lisätä yli 100 ms käyttäjän odottavaan latenssiin, mikä riittää vähentämään myyntiä 1 prosentilla Amazonin mukaan.

Joten älä tee sitä!

Käytä sen sijaan lokit CloudWatch-lokit tosiasian jälkeen.

CloudWatch Logs -konsolissa voit valita lokiryhmän ja suoratoistaa tiedot suoraan Amazonin isännöimään Elasticsearch-palveluun.

Tämä on erittäin hyödyllistä, jos käytät jo isännöityä Elasticsearch-palvelua. Mutta jos arvioit silti vaihtoehtojasi, anna tämä viesti lukea, ennen kuin päätät AWS-isännöimästä joustavuustutkimuksesta.

Voit suoratoistaa lokit myös Lambda-toimintoon. Jo olemassa on useita Lambda-toimintopiirustuksia CloudWatch-lokien siirtämiseksi jo muihin lokien yhdistämispalveluihin.

On selvää, että tämä on jotain, mitä monet AWS: n asiakkaat ovat pyytäneet.

Löydät piirustukset CloudWatch-lokien lähettämiseen Sumologic-, Splunk- ja Loggly-tiedostoihin laatikosta.

Näiden piirustusten avulla voit kirjoittaa Lambda-toiminnon, joka lähettää CloudWatch-lokit haluamallesi lokien yhdistämispalvelulle. Mutta tässä on vielä muutama mielessä pidettävä asia.

Aina kun luot uuden Lambda-toiminnon, se luo uuden lokiryhmän CloudWatch-lokiin. Haluat välttää manuaalista prosessia lokiryhmien tilaamiseksi lokien lähetystoimintoosi.

Ota sen sijaan käyttöön CloudTrail ja määritä sitten tapahtumakuvio CloudWatch-tapahtumissa kutsuaksesi toista Lambda-toimintoa aina kun lokiryhmä luodaan.

Voit tehdä tämän kertaluonteisen asennuksen CloudWatch-konsolissa.

Vastaa CreateLogGroup-sovellusliittymäkutsua CloudWatch-lokit -sovelluksessa ja laukaise tilaa-loki-ryhmän Lambda-toiminto. Tämä toiminto tilaa uuden lokiryhmän lokien lähetystoiminnolle.

Jos työskentelet useiden AWS-tilien kanssa, sinun tulee välttää tekemästä asennusta manuaaliseksi prosessiksi. Palvelimettomalla kehyksellä voit määrittää tämän tilaamisen-loki-ryhmätoiminnon tapahtumalähteen serverless.yml -kohdassa.

Toinen mielessä pidettävä asia on, että sinun on vältettävä tilaamasta lokiryhmän lokiryhmää itselleen. Se luo ääretön kutsumisilmukan ja se on tuskallinen oppitunti, jonka haluat välttää.

Yksi asia vielä.

Kun Lambda luo uuden lokiryhmän toiminnollesi, oletusarvoisesti säilytyskäytännöksi asetetaan Ei koskaan vanhene. Tämä on ylenmääräistä, koska tietojen tallennuskustannukset voivat kasvaa ajan myötä. Ei myöskään ole tarpeellista, jos lähetät lokit jo muualle!

Oletuksena Lambda-toimintojen lokit pidetään CloudWatch-lokissa ikuisesti

Voimme soveltaa samaa tekniikkaa yllä ja lisätä toisen Lambda-toiminnon päivittääksesi säilytyskäytännön automaattisesti jotain järkevämpää.

Tässä on Lambda-toiminto päivittää lokin säilyttämiskäytäntö automaattisesti 30 päivään.

Jos sinulla on jo paljon olemassa olevia lokiryhmiä, harkitse kertaluonteisten komentosarjojen kirjoittamista päivittääksesi ne kaikki. Voit tehdä tämän toistamalla kaikki lokiryhmät läpi DescribeLogGroups API -kutsujen avulla.

Jos olet kiinnostunut soveltamaan näitä tekniikoita itse, olen rakentanut sinulle yksinkertaisen esittelyprojektin. Jos noudatat README-ohjeita ja otat käyttöön toiminnot, kaikki Lambda-toimintojen lokit toimitetaan Logz.io.