Ife a Badoo nthawi zonse timayang'anira umisiri watsopano ndikuwunika ngati tingawagwiritse ntchito m'dongosolo lathu. Tikufuna kugawana nawo limodzi mwa maphunzirowa ndi anthu ammudzi. Imaperekedwa kwa Loki, dongosolo lophatikiza logi.
Loki ndi njira yothetsera kusungirako ndi kuwonera zipika, ndipo stack iyi imaperekanso njira yosinthika yowunikira ndikutumiza deta ku Prometheus. Mu Meyi, kusintha kwina kunatulutsidwa, komwe kumalimbikitsidwa kwambiri ndi omwe amapanga. Tidachita chidwi ndi zomwe Loki angachite, zomwe amapereka, komanso momwe angakhalire m'malo mwa ELK, stack yomwe timagwiritsa ntchito pano.
Loki ndi chiyani
Grafana Loki ndi gulu la magawo amtundu wathunthu wodula mitengo. Mosiyana ndi machitidwe ena ofanana, Loki amachokera ku lingaliro lolozera metadata ya chipika - zolemba (monga Prometheus), ndikukankhira zipikazo mbali ndi mbali kukhala zigawo zosiyana.
Ndisanalowe zomwe mungachite ndi Loki, ndikufuna kufotokozera tanthauzo la "lingaliro lolozera metadata yokha". Tiyeni tifanizire njira ya Loki ndi njira yolondolera pamayankho achikhalidwe, monga Elasticsearch, pogwiritsa ntchito chitsanzo cha mzere kuchokera pa chipika cha nginx:
Makina akale amagawa mzere wonsewo, kuphatikiza magawo okhala ndi ma user_id ndi item_id, ndikusunga chilichonse m'ma index akulu. Ubwino wa njirayi ndikuti mutha kuyendetsa mafunso ovuta mwachangu, popeza pafupifupi ma data onse ali mu index. Koma muyenera kulipira izi chifukwa indexyo imakhala yayikulu, yomwe imatanthawuza zofunika kukumbukira. Zotsatira zake, zolemba zonse za zipika zimafanana ndi kukula kwa zipika zomwezo. Kuti mufufuze mwachangu, indexyo iyenera kukwezedwa mu kukumbukira. Ndipo mitengo yochulukirachulukira, indexyo imakula mwachangu komanso kukumbukira komwe kumadya.
Njira ya Loki imafuna kuti deta yofunikira yokha ichotsedwe mu chingwe, chiwerengero cha makhalidwe omwe ndi ochepa. Mwanjira iyi timapeza kalozera kakang'ono ndipo tikhoza kusaka deta poyisefa ndi nthawi ndi magawo omwe ali ndi indexed, ndiyeno kusanthula zina zonse ndi mawu okhazikika kapena kufufuza kwazing'ono. Njirayi sikuwoneka yothamanga kwambiri, koma Loki amagawa pempholo m'magawo angapo ndikumakwaniritsa mofanana, ndikukonza deta yambiri mu nthawi yochepa. Chiwerengero cha shards ndi zopempha zofanana mwa izo ndi configurable; motero, kuchuluka kwa deta yomwe ingathe kukonzedwa pa nthawi imodzi imadalira motsatira kuchuluka kwa zinthu zomwe zaperekedwa.
Kugulitsa uku pakati pa index yayikulu yofulumira ndi index yaying'ono yofanana ndi brute-force kumapangitsa Loki kuwongolera mtengo wadongosolo. Itha kusinthidwa mosinthika ndikukulitsidwa malinga ndi zosowa zanu.
Loki stack ili ndi zigawo zitatu: Promtail, Loki, Grafana. Promtail imasonkhanitsa zipika, kuzikonza ndikuzitumiza ku Loki. Loki amawasunga. Ndipo Grafana akhoza kupempha deta kuchokera kwa Loki ndikuwonetsa. Mwambiri, Loki angagwiritsidwe ntchito osati kungosunga zipika ndikuzifufuza. Mundawu wonse umapereka mwayi wabwino wokonza ndi kusanthula deta yomwe ikubwera pogwiritsa ntchito njira ya Prometheus.
Kufotokozera za ndondomeko unsembe angapezeke apa.
Log Search
Mutha kufufuza zipika mu mawonekedwe apadera Grafana - Explorer. Mafunsowa amagwiritsa ntchito chilankhulo cha LogQL, chomwe ndi chofanana kwambiri ndi PromQL yomwe Prometheus amagwiritsa ntchito. M'malo mwake, itha kuganiziridwa ngati grep yogawidwa.
Mawonekedwe osakira amawoneka motere:
Funso lokha lili ndi magawo awiri: selector ndi fyuluta. Selector ndikusaka kwa metadata (malebulo) omwe amaperekedwa ku zipika, ndipo fyuluta ndi chingwe chosakira kapena regexp yomwe imasefa zolemba zomwe zafotokozedwa ndi wosankhayo. Muchitsanzo choperekedwa: M'mabulaketi opindika - chosankha, chilichonse pambuyo - fyuluta.
{image_name="nginx.promtail.test"} |= "index"
Chifukwa cha momwe Loki amagwirira ntchito, simungapemphe popanda chosankha, koma malembo amatha kupangidwa mwachisawawa.
Fyuluta ndi mawu kapena regexp yomwe idzasefa zonse zomwe zalandilidwa ndi wosankhayo.
Ndizotheka kupeza ma ad-hoc graphs kutengera zomwe zalandilidwa mumayendedwe a metrics. Mwachitsanzo, mutha kudziwa kuchuluka kwa zomwe zimachitika mu zipika za nginx za cholowa chomwe chili ndi chingwe cholozera:
Kufotokozera kwathunthu kwa zinthuzo kungapezeke muzolemba LogQL.
Kusanthula mitengo
Pali njira zingapo zosonkhanitsira zipika:
Mothandizidwa ndi Promtail, gawo lokhazikika la zotola zotola zipika.
Pali kuphatikiza ndi Kubernetes: Promtail imadziwikiratu momwe gululi lilili kudzera pa Kubernetes REST API ndikusonkhanitsa zipika kuchokera ku node, service kapena pod, nthawi yomweyo kutumiza zilembo zochokera ku metadata kuchokera Kubernetes (dzina la pod, dzina lafayilo, ndi zina).
Mukhozanso kupachika zilembo kutengera deta kuchokera pa chipikacho pogwiritsa ntchito Pipeline. Pipeline Promtail ikhoza kukhala ndi mitundu inayi yamagawo. Zambiri - mu zolemba zovomerezeka, nthawi yomweyo ndiwona zina mwazinthu.
Magawo owerengera. Ili ndiye gawo la RegEx ndi JSON. Panthawiyi, timachotsa deta kuchokera muzitsulo zomwe zimatchedwa mapu ochotsedwa. Mutha kuchotsa ku JSON pongotengera minda yomwe tikufuna pamapu ochotsedwa, kapena kudzera m'mawu okhazikika (RegEx), pomwe magulu otchulidwa "amajambulidwa" pamapu ochotsedwa. Mapu ochotsedwa ndi malo osungira chinsinsi, pomwe chinsinsi ndi dzina la munda, ndipo mtengo wake ndi mtengo wake kuchokera pazipika.
Onjezani njira yopita ku zipika ku promtail.yml (pali njira ya "docker" mu config yomwe imachita chimodzimodzi pamzere umodzi, koma sizingakhale zoonekeratu):
scrape_configs:
- job_name: containers
static_configs:
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*log # for linux only
Kusintha uku kukayatsidwa, Loki alandila zipika kuchokera m'mabokosi onse. Kuti tipewe izi, timasintha makonda a test nginx mu docker-compose.yml - onjezani mitengo pagawo la tag:
Ngati kunali kotheka kuyika gawo la tag pamapu ochotsedwa, ndiye pogwiritsa ntchito regexp timachotsa mayina azithunzi ndi chidebe.
- labels:
image_name:
container_name:
Timagawa zilembo. Ngati makiyi image_name ndi container_name akupezeka mu data yochotsedwa, ndiye kuti ma values ββββaperekedwa ku zilembo zoyenera.
- match:
selector: '{job="docker",container_name="",image_name=""}'
action: drop
Timataya zipika zonse zomwe zilibe zilembo image_name ndi container_name set.
Pa zipika zonse zomwe image_name yake ndi yofanana ndi nginx.promtail.test, chotsani chipikacho kuchokera pachipika choyambira ndikuchiyika pamapu ochotsedwa ndi kiyi ya mzere.
Sanjani request_url. Mothandizidwa ndi regexp, timazindikira cholinga cha pempho: ku statics, zithunzi, ku API ndikuyika kiyi yofananira pamapu ochotsedwa.
- template:
source: request_type
template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"
Pogwiritsa ntchito operekera zovomerezeka mu Template, timayang'ana zomwe zayikidwa pamapu ochotsedwa ndikuyika zofunikira pagawo la request_type: chithunzi, static, API. Perekani zina ngati zalephera. Tsopano request_type ili ndi mtundu wa pempho.
Kumbukirani kuti kuchotsa zilembo zokhala ndi zikhalidwe zambiri (makadinali) kumatha kuchepetsa kwambiri Loki. Ndiye kuti, simuyenera kuyika index, mwachitsanzo, user_id. Werengani zambiri za izi m'nkhaniyiMomwe zolemba mu Loki zingapangire kufunsa kwa log mwachangu komanso kosavuta". Koma izi sizikutanthauza kuti simungathe kusaka ndi user_id popanda indexes. Ndikofunikira kugwiritsa ntchito zosefera posaka ("kugwira" molingana ndi deta), ndipo index pano imakhala ngati chizindikiritso cha mtsinje.
Mawonekedwe a log
Loki amatha kukhala ngati gwero la data pama chart a Grafana pogwiritsa ntchito LogQL. Zotsatirazi zimathandizidwa:
mlingo - chiwerengero cha zolemba pamphindi;
kuwerengera m'kupita kwa nthawi - chiwerengero cha zolembera zomwe zaperekedwa.
Palinso ntchito zophatikizira Sum, Avg ndi ena. Mutha kupanga ma graph ovuta kwambiri, mwachitsanzo, chithunzi cha kuchuluka kwa zolakwika za HTTP:
Gwero lachidziwitso la Loki ndilochepa kwambiri kuposa gwero la deta la Prometheus (mwachitsanzo, simungasinthe nthano), koma Loki akhoza kulumikizidwa ngati mtundu wa Prometheus. Sindikutsimikiza ngati izi ndizomwe zalembedwa, koma kuweruza ndi mayankho ochokera kwa opanga "Momwe mungasinthire Loki ngati Prometheus datasource? Β· Nkhani #1222 Β· grafana/lokiβ, mwachitsanzo, ndizovomerezeka ndipo Loki imagwirizana kwathunthu ndi PromQL.
Onjezani Loki ngati gwero la data ndi mtundu wa Prometheus ndikuwonjezera URL / loki:
Ndipo mutha kupanga ma graph, ngati tikugwira ntchito ndi ma metrics ochokera ku Prometheus:
Ndikuganiza kuti kusiyana kwa magwiridwe antchito ndi kwakanthawi ndipo opanga adzakonza mtsogolo.
Metrics
Loki imapereka mwayi wochotsa ma metric manambala kuchokera pamitengo ndikutumiza ku Prometheus. Mwachitsanzo, chipika cha nginx chili ndi chiwerengero cha ma byte pa yankho lililonse, komanso, ndi kusintha kwina kwa mtundu wa chipika chokhazikika, nthawi ya masekondi yomwe idatenga kuyankha. Deta iyi ikhoza kuchotsedwa ndikutumizidwa ku Prometheus.
Kusankhaku kumakupatsani mwayi wofotokozera ndikusintha ma metrics kutengera zomwe zachokera pamapu ochotsedwa. Ma metrics awa samatumizidwa ku Loki - amawonekera kumapeto kwa Promtail /metrics. Prometheus iyenera kukhazikitsidwa kuti ilandire deta kuchokera pagawoli. Muchitsanzo chapamwambachi, pa request_type="api" timasonkhanitsa histogram metric. Ndi ma metric amtunduwu ndikosavuta kupeza ma percentiles. Pa ma statics ndi zithunzi, timasonkhanitsa kuchuluka kwa ma byte ndi kuchuluka kwa mizere yomwe tidalandira mabayiti kuti tiwerengere avareji.
Kuti ndiyese kukula kwake kwa index, ndidatenga zipika kuchokera mu chidebe cha nginx chomwe Pipeline pamwambapa idakhazikitsidwa. Fayilo ya chipikacho inali ndi mizere 406 yokhala ndi 624 MB. Mitengo idapangidwa mkati mwa ola limodzi, pafupifupi zolemba 109 pamphindikati.
Chitsanzo cha mizere iwiri kuchokera pachipika:
Ikalembedwa ndi ELK, izi zidapereka kukula kwa index ya 30,3 MB:
Pankhani ya Loki, izi zidapereka pafupifupi 128 KB ya index ndi pafupifupi 3,8 MB ya data mu chunks. Ndikoyenera kudziwa kuti chipikacho chinapangidwa mwachisawawa ndipo sichinali ndi deta yambiri. Gzip yosavuta pa chipika choyambirira cha Docker JSON chokhala ndi deta chinapereka kupsinjika kwa 95,4%, ndikupatsidwa kuti chipika choyeretsedwa chokha cha nginx chinatumizidwa ku Loki mwiniwake, kukanikiza kwa 4 MB ndikomveka. Chiwerengero chonse chazinthu zapadera za zolemba za Loki zinali 35, zomwe zimafotokoza za kuchepa kwa index. Kwa ELK, chipikacho chinachotsedwanso. Chifukwa chake, Loki adapanikiza zoyambira ndi 96%, ndi ELK ndi 70%.
Kugwiritsa ntchito kukumbukira
Tikayerekeza mulu wonse wa Prometheus ndi ELK, ndiye Loki "amadya" kangapo zochepa. Zikuwonekeratu kuti ntchito ya Go imadya zochepa kuposa ntchito ya Java, ndikuyerekeza kukula kwa Heap Elasticsearch JVM ndi kukumbukira komwe kunaperekedwa kwa Loki ndikolakwika, komabe, ndikofunikira kudziwa kuti Loki amagwiritsa ntchito kukumbukira pang'ono. Ubwino wake wa CPU sizowoneka bwino, koma umapezekanso.
Kuthamanga
Loki "amawononga" mitengo mwachangu. Kuthamanga kumadalira zinthu zambiri - ndi mtundu wanji wa zipika, momwe timawafotokozera mozama, maukonde, litayamba, etc. - koma ndithudi apamwamba kuposa ELK (mu mayeso anga - pafupifupi kawiri). Izi zikufotokozedwa ndi mfundo yakuti Loki amaika deta yocheperako mu ndondomekoyi ndipo, motero, amathera nthawi yochepa pa indexing. Pankhaniyi, zinthu zimasinthidwa ndi liwiro losaka: Loki amachepetsa kwambiri pa data yayikulu kuposa ma gigabytes angapo, pomwe ELK, liwiro lofufuzira silidalira kukula kwa data.
Log Search
Loki ndiwotsika kwambiri kwa ELK potengera luso lakusaka. Grep yokhala ndi mawu okhazikika ndi chinthu champhamvu, koma ndiyotsika ku database yayikulu. Kusowa kwamafunso osiyanasiyana, kuphatikizika kokha ndi zilembo, kulephera kusaka popanda zilembo - zonsezi zimatilepheretsa kusaka zambiri za Loki. Izi sizikutanthauza kuti palibe chomwe chingapezeke pogwiritsa ntchito Loki, koma chimatanthawuza kuyenda kwa ntchito ndi zipika, pamene mukuyamba kupeza vuto pa ma chart a Prometheus, ndiyeno yang'anani zomwe zinachitika mu zipika pogwiritsa ntchito malemba awa.
mawonekedwe
Poyamba, ndizokongola (pepani, sizinathe kukana). Grafana ali ndi mawonekedwe owoneka bwino, koma Kibana ndiwothandiza kwambiri.
Loki zabwino ndi zoipa
Pazowonjezera, zitha kudziwika kuti Loki amaphatikizana ndi Prometheus, motsatana, timapeza ma metric ndikuchenjeza kuchokera m'bokosi. Ndiwosavuta kusonkhanitsa zipika ndikuzisunga ndi Kubernetes Pods, chifukwa ili ndi zomwe zapezeka kuchokera ku Prometheus ndipo zimangoyika zilembo.
Mwa minuses - zolembedwa zolakwika. Zinthu zina, monga mawonekedwe ndi kuthekera kwa Promtail, ndidapeza ndikungophunzira kachidindo, phindu lotseguka. Kuipa kwina ndi kufooka kwapang'onopang'ono. Mwachitsanzo, Loki sangathe kuyika zipika zamitundu yambiri. Komanso, zoyipazo zikuphatikizanso mfundo yoti Loki ndiukadaulo wachichepere (kutulutsa 1.0 kunali mu Novembala 2019).
Pomaliza
Loki ndi teknoloji yosangalatsa ya 100% yomwe ili yoyenera kumapulojekiti ang'onoang'ono ndi apakatikati, omwe amakulolani kuthetsa mavuto ambiri a log aggregation, kufufuza kwa log, kuyang'anira ndi kusanthula zipika.
Sitigwiritsa ntchito Loki ku Badoo, chifukwa tili ndi stack ya ELK yomwe imatikwanira ndipo yakhala yodzaza ndi mayankho osiyanasiyana pazaka zambiri. Kwa ife, chopunthwitsa ndicho kufufuza mβzipika. Ndi pafupifupi 100 GB ya zipika patsiku, ndikofunika kuti tithe kupeza chirichonse ndi pang'ono ndikuchita mwamsanga. Popanga ma chart ndi kuyang'anira, timagwiritsa ntchito njira zina zomwe zimagwirizana ndi zosowa zathu ndikuphatikizidwa wina ndi mnzake. Loki stack ili ndi zopindulitsa zowoneka, koma sizingatipatse zambiri kuposa zomwe tili nazo, ndipo phindu lake silidzaposa ndendende mtengo wakusamuka.