Ao amin'ny Badoo, manara-maso tsy tapaka ireo teknolojia vaovao izahay ary manombana raha mendrika ny hampiasaina ao amin'ny rafitray. Tianay ny hizara ny iray amin'ireo fianarana ireo amin'ny fiaraha-monina. Izy io dia natokana ho an'ny Loki, rafitra fanangonana log.
Loki dia vahaolana amin'ny fitehirizana sy fijerena logs, ary ity stack ity koa dia manome rafitra mora azo handinihana azy ireo sy handefasana angona any amin'ny Prometheus. Tamin'ny volana Mey, nisy fanavaozana hafa navoaka, izay nampiroboroboin'ny mpamorona. Liana tamin'ny zavatra azon'i Loki atao izahay, inona ny fahaiza-manao omeny, ary hatraiza no ahafahany miasa ho solon'ny ELK, ilay stack ampiasainay ankehitriny.
Inona no Loki
Grafana Loki dia fitambarana singa ho an'ny rafitra feno amin'ny fiasana amin'ny hazo. Tsy toy ny rafitra hafa mitovy amin'izany, Loki dia mifototra amin'ny indexing afa-tsy log metadata - etikety (mitovy amin'ny ao amin'ny Prometheus), ary hanery ny tenany ho tapa-kazo misaraka.
Ny rafitra nentim-paharazana dia mamakivaky ny andalana manontolo, ao anatin'izany ny saha misy sandan'ny mpampiasa_id sy item_id tsy manam-paharoa, ary mitahiry ny zava-drehetra ao anaty tondro lehibe. Ny tombony amin'ity fomba fiasa ity dia ny ahafahanao mametraka fanontaniana sarotra haingana, satria saika ny angona rehetra dia ao amin'ny index. Saingy tonga amin'ny vidiny izany satria lasa lehibe ny index, izay midika ho fitadidiana fitadidiana. Vokatr'izany, ny index log-text feno dia mitovy amin'ny haben'ny logs. Mba hikarohana haingana azy io dia tsy maintsy ampidirina ao anaty fitadidiana ny tondro. Ary raha betsaka ny logs, dia mitombo haingana kokoa ny index ary mihamaro ny fitadidiany.
Ny fomba fiasa Loki dia mitaky ny angon-drakitra ilaina ihany no alaina avy amin'ny tady, ny isan'ny sandany dia kely. Amin'izany fomba izany dia mahazo tondro kely isika ary afaka mikaroka ny angon-drakitra amin'ny alΓ lan'ny fanivanana azy amin'ny alΓ lan'ny fotoana sy amin'ny saha voarakitra, ary avy eo mijery ny ambiny amin'ny fomba fiteny mahazatra na fikarohana substring. Toa tsy ny haingana indrindra ilay dingana, fa nozarain'i Loki ho ampahany maromaro ny fangatahana ary tanterahiny mifanandrify, fanodinana angon-drakitra be dia be ao anatin'ny fotoana fohy. Ny isan'ny shards sy ny fangatahana mifanitsy amin'izy ireo dia azo amboarina; noho izany, ny habetsaky ny angona azo karakaraina isaky ny vanim-potoana dia miankina amin'ny habetsaky ny loharanon-karena omena.
Ity fifanakalozam-barotra eo amin'ny fanondroana lehibe sy haingana ary kely, parallèle brute-force index ity dia ahafahan'i Loki mifehy ny vidin'ny rafitra. Izy io dia azo amboarina moramora sy mivelatra araka izay ilaina.
Ny stack Loki dia misy singa telo: Promtail, Loki, Grafana. Manangona logs ny Promtail, manodina azy ary mandefa azy any Loki. Loki no mitazona azy ireo. Ary afaka mangataka angona avy amin'i Loki i Grafana ary mampiseho izany. Amin'ny ankapobeny, ny Loki dia tsy azo ampiasaina amin'ny fitahirizana logs sy fikarohana amin'ny alalan'izy ireo ihany. Ny stack manontolo dia manome fahafahana lehibe amin'ny fanodinana sy famakafakana ny angona miditra amin'ny alΓ lan'ny fomba Prometheus.
Misy famaritana ny dingana fametrahana dia hita eto.
Fikarohana Log
Azonao atao ny mikaroka ny logs amin'ny interface Grafana manokana - Explorer. Ny fanontaniana dia mampiasa ny fiteny LogQL, izay mitovy amin'ny PromQL ampiasaina ao amin'ny Prometheus. Amin'ny ankapobeny, azo heverina ho grep zaraina izy io.
Toy izao ny endriky ny fikarohana:
Ny fangatahana dia misy ampahany roa: mpifidy sy sivana. Ny Selector dia fikarohana mampiasa metadata (labels) voatondro izay voatendry amin'ny logs, ary ny sivana dia tady fikarohana na regexp izay manivana ireo rakitra voafaritry ny mpifidy. Ao amin'ny ohatra omena: Ao amin'ny braces olioly dia misy mpifidy, ny zava-drehetra aorian'izany dia sivana.
{image_name="nginx.promtail.test"} |= "index"
Noho ny fomba fiasan'i Loki dia tsy afaka manao fanontaniana ianao raha tsy misy mpifidy, fa ny etikety dia azo atao amin'ny ankapobeny araka izay tianao.
Ny selector dia sanda manan-danja amin'ny braces olioly. Azonao atao ny manambatra ny mpifidy ary mamaritra ny toe-pikarohana samihafa amin'ny fampiasana ny operators =, != na fomba fiteny mahazatra:
Ny sivana dia lahatsoratra na regexp izay hanivana ny angona rehetra azon'ny mpifidy.
Azo atao ny mahazo kisary ad-hoc mifototra amin'ny angona voaray amin'ny fomba metrika. Ohatra, azonao atao ny mahita hoe impiry ny fidirana misy ny index index dia miseho ao amin'ny log nginx:
Ny famaritana feno momba ny fahaiza-manao dia hita ao amin'ny antontan-taratasy LogQL.
MampiasΓ Fluentd na Fluent Bit, izay afaka mandefa angona any Loki. Tsy toa an'i Promtail, manana parser efa vonona ho an'ny karazana log rehetra izy ireo ary afaka mitantana logs multiline ihany koa.
Matetika ny Promtail dia ampiasaina amin'ny fanaparitahana. Manao zavatra telo izy io:
Mitady loharanom-baovao.
Mametraka etikety amin'izy ireo.
Mandefa angona any Loki.
Amin'izao fotoana izao, ny Promtail dia afaka mamaky logs avy amin'ny rakitra eo an-toerana sy avy amin'ny diary systemd. Tsy maintsy apetraka amin'ny milina tsirairay izay anangonana hazo.
Misy ny fampidirana miaraka amin'ny Kubernetes: Promtail mandeha ho azy, amin'ny alΓ lan'ny Kubernetes REST API, mahafantatra ny toetry ny cluster ary manangona logs avy amin'ny node, serivisy na pod, mandefa avy hatrany ireo etikety mifototra amin'ny metadata avy amin'ny Kubernetes (anarana pod, anaran-drakitra, sns.) .
Azonao atao ihany koa ny manantona etikety mifototra amin'ny angona avy amin'ny diary mampiasa Pipeline. Ny Pipeline Promtail dia mety ahitana dingana efatra. Ny antsipiriany bebe kokoa ao amin'ny antontan-taratasy ofisialy, hanamarika avy hatrany aho.
Dingana famakafakana. Ity no dingana RegEx sy JSON. Amin'ity dingana ity, dia maka angon-drakitra avy amin'ny diary mankany amin'ilay antsoina hoe sari-tany nalaina. Afaka maka avy amin'ny JSON isika amin'ny alΓ lan'ny kopia fotsiny ireo saha ilaintsika ao amin'ny sari-tany nalaina, na amin'ny alΓ lan'ny fomba fiteny mahazatra (RegEx), izay misy vondrona antsoina hoe "sarintany" ao amin'ny sarintany nalaina. Ny sarintany nalaina dia fivarotana sanda manan-danja, izay ny fanalahidy dia ny anaran'ny saha, ary ny sandany dia ny sandany avy amin'ny diary.
Transform stages. Ity dingana ity dia manana safidy roa: manova, izay ametrahantsika ny fitsipika fanovana, ary loharano - ny loharanon'ny angona ho an'ny fanovana avy amin'ny sarintany nalaina. Raha tsy misy saha toy izany ao amin'ny sarintany nalaina dia ho noforonina izany. Amin'izany fomba izany dia azo atao ny mamorona etikety izay tsy mifototra amin'ny sarintany nalaina. Amin'ity dingana ity dia afaka manodikodina ny angon-drakitra ao amin'ny sari-tany nalaina isika amin'ny fampiasana sari-tany matanjaka Golang Template. Fanampin'izay, tsy maintsy tsaroantsika fa ny sari-tany nalaina dia fenoina tanteraka mandritra ny famakafakana, izay mahatonga azy ho azo atao, ohatra, ny manamarina ny sanda ao anatiny: β{{raha .tag} misy ny sandan'ny tag{end}}β. Ny maodely dia manohana ny fepetra, ny tadivavarana, ary ny fiasan'ny tady sasany toy ny Soloy sy Trim.
Ampio ny lalana mankany amin'ny logs amin'ny promtail.yml (misy safidy "docker" ao amin'ny config, izay manao zavatra mitovy amin'ny andalana iray, saingy tsy ho mazava loatra izany):
scrape_configs:
- job_name: containers
static_configs:
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*log # for linux only
Rehefa alefa io fandrindrana io, dia halefa any amin'ny Loki ny logs avy amin'ny container rehetra. Mba hialana amin'izany dia ovainay ny firafitry ny test nginx ao amin'ny docker-compose.yml - ampio saha misy tenifototra:
Raha nahavita nametraka ny saha tag tao amin'ny sarintany nalaina izahay, dia mampiasa regexp ny anaran'ny sary sy ny container.
- labels:
image_name:
container_name:
Manome labels izahay. Raha hita ao amin'ny angon-drakitra nalaina ny fanalahidin'ny image_name sy container_name, dia homena amin'ny marika mifanaraka amin'izany ny sandany.
- match:
selector: '{job="docker",container_name="",image_name=""}'
action: drop
Arianay ny diary rehetra tsy misy labels image_name sy container_name.
Andeha hojerentsika ny request_url. Amin'ny fampiasana regexp dia mamaritra ny tanjon'ny fangatahana izahay: amin'ny angona static, amin'ny sary, amin'ny API ary mametraka ny fanalahidy mifanaraka amin'izany ao amin'ny sarintany nalaina.
- template:
source: request_type
template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"
Amin'ny fampiasana mpandraharaha misy fepetra ao amin'ny Template, dia manamarina ireo saha napetraka ao amin'ny sarintany nalaina izahay ary mametraka ny soatoavina ilaina amin'ny sehatra request_type: sary, static, API. Manendre hafa raha tsy mahomby. request_type dia misy ny karazana fangatahana.
Napetrakay ny mari-pamantarana api_request, virtual_host, request_type ary sata (statut HTTP) mifototra amin'ny zavatra vitanay napetraka tao amin'ny sarintany nalaina.
- output:
source: nginx_log_row
Hanova ny vokatra. Ankehitriny ny log nginx voadio avy amin'ny sarintany nalaina dia mankany Loki.
Aorian'ny fampandehanana ny config etsy ambony dia ho hitanao fa ny fidirana tsirairay dia nomena marika mifototra amin'ny angona avy amin'ny log.
Ny zavatra iray tokony hotadidina dia ny famerenana ny etikety misy sanda marobe (kardinaly) dia mety hampiadana be an'i Loki. Izany hoe, tsy tokony hametraka, ohatra, ny user_id ao amin'ny index. Vakio bebe kokoa momba izany ao amin'ny lahatsoratra "Ahoana no ahafahan'ny etikety ao amin'ny Loki hanafaingana sy hanamora kokoa ny fangatahana diary" Saingy tsy midika izany fa tsy afaka mikaroka amin'ny user_id ianao raha tsy misy index. Mila mampiasa sivana ianao rehefa mikaroka ("grab" ny angon-drakitra), ary ny tondro eto dia miasa ho toy ny famantarana ny renirano.
Visualization ny logs
Loki dia afaka miasa ho loharano angona ho an'ny grafika Grafana mampiasa LogQL. Ireto manaraka ireto dia tohanana:
tahan'ny - isan'ny firaketana isan-tsegondra;
manisa amin'ny fotoana - ny isan'ny firaketana ao amin'ny faritra voafaritra.
Misy ihany koa ny asa fanangonana Sum, Avg ary ny hafa. Azonao atao ny manangana grafika saro-takarina, ohatra ny sarin'ny isan'ny lesoka HTTP:
Ny loharanom-baovao mahazatra Loki dia somary mihena ny fampiasa raha oharina amin'ny loharanom-baovao Prometheus (ohatra, tsy afaka manova ny angano ianao), fa Loki dia azo ampifandraisina amin'ny maha-loharano amin'ny karazana Prometheus. Tsy azoko antoka raha fihetsika voarakitra an-tsoratra izany, fa raha tsaraina amin'ny valintenin'ny mpamorona "Ahoana ny fametrahana an'i Loki ho Prometheus datasource? Β· Laharana #1222 Β· grafana/lokiβ, ohatra, dia ara-dalΓ na tanteraka, ary i Loki dia mifanaraka tanteraka amin'ny PromQL.
Ary afaka manao grafika isika, toy ny hoe miara-miasa amin'ny metrika avy amin'ny Prometheus:
Heveriko fa vonjimaika ny tsy fitovizan'ny fampiasa ary hanitsy izany amin'ny ho avy ny mpamorona.
mari-pandrefesana
Loki dia manome fahafahana hanesorana ny metrika nomerika avy amin'ny logs ary handefa azy ireo any amin'ny Prometheus. Ohatra, ny log nginx dia misy ny isan'ny bytes isaky ny valiny, ary koa, miaraka amin'ny fanovana sasany amin'ny format log standard, ny fotoana ao anatin'ny segondra nalaina mba hamaliana. Ity angona ity dia azo alaina ary alefa any amin'ny Prometheus.
Ny safidy dia ahafahanao mamaritra sy manavao ny metrika mifototra amin'ny angona avy amin'ny sarintany nalaina. Tsy alefa any amin'ny Loki ireo metrika ireo - miseho ao amin'ny teboka faran'ny Promtail/metrics. Ny Prometheus dia tsy maintsy amboarina mba handraisana ny angona voaray amin'ity dingana ity. Amin'ity ohatra etsy ambony ity, ho an'ny request_type="api" dia manangona metrika histograma izahay. Miaraka amin'ity karazana metrika ity dia mety ny mahazo isan-jato. Ho an'ny static sy ny sary dia manangona ny fitambaran'ny bytes sy ny isan'ny andalana nahazoanay ny bytes izahay mba hanombanana ny salan'isa.
Amin'izany fomba izany no ahitanao, ohatra, ireo fanontaniana efatra miadana indrindra. Azonao atao koa ny manangana fanaraha-maso ho an'ireo metrika ireo.
Scaling
Ny Loki dia mety amin'ny fomba binary tokana na amin'ny mode sharded (mode horizontally-scalable). Amin'ny tranga faharoa, dia afaka mitahiry angon-drakitra amin'ny rahona izy io, ary voatahiry misaraka ny sombiny sy ny index. Ny dikan-teny 1.5 dia mampiditra ny fahafahana mitahiry amin'ny toerana iray, saingy tsy mbola asaina ampiasaina amin'ny famokarana.
Azo tehirizina ao amin'ny fitahirizana mifanaraka amin'ny S3 ny tapa-kazo, ary azo ampiasaina ny angon-drakitra mitsivalana mitsivalana mba hitahirizana ireo tondro: Cassandra, BigTable na DynamoDB. Ny faritra hafa ao amin'ny Loki - Distributors (ho an'ny fanoratana) sy Querier (ho an'ny fanontaniana) - dia tsy misy fanjakana ary mizana mitsivalana ihany koa.
Tamin'ny fihaonambe DevOpsDays Vancouver 2019, iray amin'ireo mpandray anjara Callum Styan dia nanambara fa miaraka amin'i Loki ny tetikasany dia manana petabytes amin'ny logs miaraka amin'ny fanondroana latsaky ny 1% amin'ny habeny manontolo: "Ahoana no ampifandraisin'i Loki ny metrika sy ny logs β ary mitahiry vola anao".
Fampitahana an'i Loki sy ELK
Haben'ny fanondro
Mba hitsapana ny haben'ny index dia naka logs avy amin'ny container nginx izay nanamboarana ny Pipeline etsy ambony aho. Ny rakitra dia misy andalana 406 miaraka amin'ny totalin'ny 624 MB. Namboarina tao anatin'ny adiny iray ny logs, 109 eo ho eo isan-tsegondra.
Ohatra amin'ny andalana roa avy amin'ny log:
Rehefa notondroin'ny ELK dia nanome haben'ny fanondroana 30,3 MB izany:
Raha ny momba an'i Loki, dia niteraka index 128 KB eo ho eo ary angona 3,8 MB eo ho eo amin'ny sombiny. Tsara ny manamarika fa ny log dia noforonina tamin'ny fomba artifisialy ary tsy nanana angon-drakitra marobe. Ny gzip tsotra ao amin'ny log Docker JSON tany am-boalohany miaraka amin'ny angon-drakitra dia nanome famatrarana 95,4%, ary raha jerena ny zava-misy fa ny log nginx voadio ihany no nalefa tany Loki, ny famatrarana hatramin'ny 4 MB dia azo takarina. Ny totalin'ny sanda tokana ho an'ny marika Loki dia 35, izay manazava ny haben'ny index. Ho an'ny ELK dia nesorina ihany koa ny log. Noho izany, i Loki dia nanindry ny angon-drakitra tany am-boalohany tamin'ny 96%, ary ny ELK tamin'ny 70%.
Fanjifana fahatsiarovana
Raha ampitahaintsika ny stack Prometheus sy ELK manontolo, dia "mihinana" imbetsaka i Loki. Mazava fa ny serivisy Go dia mandany kely kokoa noho ny serivisy Java, ary ny fampitahana ny haben'ny JVM Heap Elasticsearch sy ny fahatsiarovana nomena an'i Loki dia tsy mety, saingy tsara ny manamarika fa mampiasa fahatsiarovana kely kokoa i Loki. Ny tombony amin'ny CPU dia tsy dia mazava loatra, fa misy ihany koa.
hafainganam-pandeha
Loki "mihinana" dia haingana kokoa. Ny hafainganam-pandeha dia miankina amin'ny lafin-javatra maro - inona no karazana logs, hatraiza hatraiza isika amin'ny famakafakana azy ireo, tambajotra, kapila, sns - fa tena avo kokoa noho ny ELK (amin'ny fitsapako - eo ho eo amin'ny avo roa heny). Izany dia hazavaina amin'ny hoe i Loki dia mametraka angon-drakitra kely kokoa ao amin'ny index ary, araka izany, dia mandany fotoana kely kokoa amin'ny fanondroana. Miaraka amin'ny hafainganan'ny fikarohana, ny zava-misy dia mifanohitra amin'izany: Loki dia mihamalemy amin'ny angon-drakitra lehibe kokoa noho ny gigabytes maromaro, raha tsy miankina amin'ny haben'ny angon-drakitra ny hafainganam-pikarohana ELK.
Fikarohana Log
Latsa-danja kokoa noho ny ELK i Loki raha jerena ny fahaiza-mitady log. Grep miaraka amin'ny fomba fiteny mahazatra dia mahery, saingy ambany noho ny angona matotra. Ny tsy fisian'ny fanontaniana isan-karazany, ny fanangonana amin'ny alΓ lan'ny etikety ihany, ny tsy fahafahana mikaroka tsy misy etikety - izany rehetra izany dia mametra antsika amin'ny fitadiavana fampahalalana mahaliana an'i Loki. Tsy midika akory izany fa tsy misy na inona na inona hita amin'ny fampiasana Loki, fa mamaritra ny fizotry ny fiasana amin'ny hazo rehefa mahita olana voalohany ianao ao amin'ny tabilao Prometheus, ary avy eo dia ampiasao ireo etikety ireo hitadiavana ny zava-nitranga tao amin'ny logs.
interface tsara
Tsara aloha ilay izy (miala tsiny fa tsy nahatohitra). Grafana dia manana interface tsara tarehy, fa i Kibana dia manankarena kokoa.
Ny tombony sy ny tsy fahampian'ny Loki
Ny iray amin'ireo tombony dia ny fampidirana an'i Loki amin'ny Prometheus, noho izany dia mahazo metrika sy fanairana avy ao anaty boaty izahay. Mety amin'ny fanangonana logs sy fitehirizana azy ireo ao amin'ny Kubernetes Pods, satria misy serivisy fikarohana nolovaina tamin'ny Prometheus ary mametaka marika ho azy.
Ny lafy ratsiny dia ny antontan-taratasy malemy. Ny zavatra sasany, ohatra, ny endri-javatra sy ny fahaiza-manaon'ny Promtail, dia tsy hitako afa-tsy tamin'ny dingan'ny fandalinana ny code, soa ihany fa open-source. Ny tsy fahampiana iray hafa dia ny fahaiza-manaon'ny parsing malemy. Ohatra, tsy afaka mamadika logs multiline i Loki. Ny tsy fahampiana iray hafa dia ny Loki dia teknolojia somary tanora (famoahana 1.0 tamin'ny Novambra 2019).
famaranana
Loki dia teknolojia mahaliana 100% izay mety amin'ny tetikasa madinika sy salantsalany, ahafahanao mamaha olana maro momba ny fanangonana log, fikarohana log, fanaraha-maso ary famakafakana log.
Tsy mampiasa Loki amin'ny Badoo izahay satria manana stack ELK izay mifanaraka aminay ary efa be loatra ny vahaolana mahazatra isan-karazany nandritra ny taona maro. Aminay dia mikaroka amin'ny alalan'ny hazo ny vato mahatafintohina. Miaraka amin'ny lozisialy efa ho 100 GB isan'andro, zava-dehibe ho antsika ny mahita ny zava-drehetra sy ny zavatra hafa ary manao izany haingana. Ho an'ny fanaovana sariitatra sy fanaraha-maso dia mampiasa vahaolana hafa mifanaraka amin'ny filanay sy mifamatotra izahay. Manana tombony azo tsapain-tanana ny stack Loki, saingy tsy hanome antsika mihoatra noho izay efa ananantsika izany, ary azo antoka fa tsy hihoatra ny vidin'ny fifindra-monina ny tombony azony.
Ary na dia taorian'ny fikarohana aza dia hita fa tsy afaka mampiasa Loki izahay, manantena izahay fa hanampy anao amin'ny safidinao ity lahatsoratra ity.
Ny tahiry misy ny code ampiasaina amin'ny lahatsoratra dia hita eto.