Manangona hazo avy amin'i Loki

Manangona hazo avy amin'i Loki

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.

Pejy fandraisana, GitHub

Alohan'ny hidirantsika amin'izay azonao atao amin'i Loki, te-hanazava ny tiana holazaina amin'ny hoe "ny hevitra momba ny fanondroana metadata fotsiny aho." Andao hampitaha ny fomba fiasa Loki sy ny fomba fanondroana amin'ny vahaolana nentim-paharazana toy ny Elasticsearch, amin'ny fampiasana ny ohatry ny tsipika avy amin'ny log nginx:

172.19.0.4 - - [01/Jun/2020:12:05:03 +0000] "GET /purchase?user_id=75146478&item_id=34234 HTTP/1.1" 500 8102 "-" "Stub_Bot/3.0" "0.001"

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:

Manangona hazo avy amin'i Loki

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:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Найдёт Π»ΠΎΠ³ΠΈ с Π»Π΅ΠΉΠ±Π»ΠΎΠΌ instance, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ kafka-2, kafka-3, ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ dev 

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:

Manangona hazo avy amin'i Loki

Ny famaritana feno momba ny fahaiza-manao dia hita ao amin'ny antontan-taratasy LogQL.

Log parsing

Misy fomba maromaro hanangonana logs:

  • Mampiasa Promtail, singa manara-penitra amin'ny stack amin'ny fanangonana logs.
  • Mivantana avy amin'ny docker container mampiasa Loki Docker Logging Driver.
  • 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.

  1. 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.
  2. 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.
  3. Dingana hetsika. Amin'izao fotoana izao dia afaka manao zavatra miaraka amin'ny atiny nalaina ianao:
    • Mamorona marika avy amin'ny angon-drakitra nalaina, izay ho indexed amin'ny Loki.
    • Ovay na apetraho amin'ny log ny fotoanan'ny hetsika.
    • Ovay ny angona (soratra amin'ny log) izay ho any Loki.
    • Mamorona metrika.
  4. Dingana sivana. Ny dingan'ny lalao, izay ahafahantsika mandefa lahatsoratra izay tsy ilaintsika / dev/null na mandefa azy ireo ho an'ny fanodinana bebe kokoa.

Amin'ny fampiasana ohatra iray amin'ny fanodinana logs nginx mahazatra, dia hasehoko ny fomba ahafahanao manara-maso ny logs amin'ny fampiasana Promtail.

Ho an'ny fitsapana, andao haka ny nginx-proxy sary nginx novaina jwilder/nginx-proxy:alpine ary daemon kely afaka manontany tena amin'ny alΓ lan'ny HTTP. Ny daemon dia manana teboka maromaro, izay ahafahany manome valiny amin'ny habe samihafa, miaraka amin'ny sata HTTP samihafa ary misy fahatarana samihafa.

Hanangona logs avy amin'ny container docker izahay, izay hita eo amin'ny lalana /var/lib/docker/containers/ / -json.log

Ao amin'ny docker-compose.yml dia manamboatra Promtail izahay ary mamaritra ny lalana mankany amin'ny config:

promtail:
  image: grafana/promtail:1.4.1
 // ...
 volumes:
   - /var/lib/docker/containers:/var/lib/docker/containers:ro
   - promtail-data:/var/lib/promtail/positions
   - ${PWD}/promtail/docker.yml:/etc/promtail/promtail.yml
 command:
   - '-config.file=/etc/promtail/promtail.yml'
 // ...

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:

proxy:
 image: nginx.test.v3
//…
 logging:
   driver: "json-file"
   options:
     tag: "{{.ImageName}}|{{.Name}}"

Fanovana ny promtail.yml sy ny fametrahana Pipeline. Ny fidirana dia misy logs amin'ny karazana manaraka:

{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /api/index HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.096"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.66740443Z"}
{"log":"u001b[0;33;1mnginx.1    | u001b[0mnginx.test 172.28.0.3 - - [13/Jun/2020:23:25:50 +0000] "GET /200 HTTP/1.1" 200 0 "-" "Stub_Bot/0.1" "0.000"n","stream":"stdout","attrs":{"tag":"nginx.promtail.test|proxy.prober"},"time":"2020-06-13T23:25:50.702925272Z"}

Dingana fantsona:

 - json:
     expressions:
       stream: stream
       attrs: attrs
       tag: attrs.tag

Esory ny streams, attrs, attrs.tag (raha misy izy ireo) avy amin'ny JSON miditra ary mametraka azy ireo ao amin'ny sarintany nalaina.

 - regex:
     expression: ^(?P<image_name>([^|]+))|(?P<container_name>([^|]+))$
     source: "tag"

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.

  - match:
     selector: '{image_name="nginx.promtail.test"}'
     stages:
       - json:
           expressions:
             row: log

Ho an'ny logs rehetra manana image_name nginx.promtail.test, esory ny saha log avy amin'ny loharano loharano ary apetraho ao amin'ny sarintany nalaina miaraka amin'ny fanalahidin'ny laharana.

  - regex:
         # suppress forego colors
         expression: .+nginx.+|.+[0m(?P<virtual_host>[a-z_.-]+) +(?P<nginxlog>.+)
         source: logrow

Manadio ny tsipika fampidirana miaraka amin'ny fanehoan-kevitra mahazatra izahay ary manala ny mpampiantrano virtoaly nginx sy ny tsipika log nginx.

     - regex:
         source: nginxlog
         expression: ^(?P<ip>[w.]+) - (?P<user>[^ ]*) [(?P<timestamp>[^ ]+).*] "(?P<method>[^ ]*) (?P<request_url>[^ ]*) (?P<request_http_protocol>[^ ]*)" (?P<status>[d]+) (?P<bytes_out>[d]+) "(?P<http_referer>[^"]*)" "(?P<user_agent>[^"]*)"( "(?P<response_time>[d.]+)")?

Ampidiro ny log nginx mampiasa fomba fiteny mahazatra.

    - regex:
           source: request_url
           expression: ^.+.(?P<static_type>jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$
     - regex:
           source: request_url
           expression: ^/photo/(?P<photo>[^/?.]+).*$
       - regex:
           source: request_url
           expression: ^/api/(?P<api_request>[^/?.]+).*$

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.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

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.

Manangona hazo avy amin'i 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

Manangona hazo avy amin'i Loki

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:

Manangona hazo avy amin'i Loki

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.

Ampio Loki ho loharano angona misy karazana Prometheus ary ampio URL /loki:

Manangona hazo avy amin'i Loki

Ary afaka manao grafika isika, toy ny hoe miara-miasa amin'ny metrika avy amin'ny Prometheus:

Manangona hazo avy amin'i Loki

Heveriko fa vonjimaika ny tsy fitovizan'ny fampiasa ary hanitsy izany amin'ny ho avy ny mpamorona.

Manangona hazo avy amin'i Loki

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.

Manampia fizarana hafa amin'ny promtail.yml:

- match:
   selector: '{request_type="api"}'
   stages:
     - metrics:
         http_nginx_response_time:
           type: Histogram
           description: "response time ms"
           source: response_time
           config:
             buckets: [0.010,0.050,0.100,0.200,0.500,1.0]
- match:
   selector: '{request_type=~"static|photo"}'
   stages:
     - metrics:
         http_nginx_response_bytes_sum:
           type: Counter
           description: "response bytes sum"
           source: bytes_out
           config:
             action: add
         http_nginx_response_bytes_count:
           type: Counter
           description: "response bytes count"
           source: bytes_out
           config:
             action: inc

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.

Vakio bebe kokoa momba ny metrika eto.

Sokafy ny seranan-tsambo amin'ny Promtail:

promtail:
     image: grafana/promtail:1.4.1
     container_name: monitoring.promtail
     expose:
       - 9080
     ports:
       - "9080:9080"

Ataovy azo antoka fa miseho ny metrika misy ny prefix promtail_custom:

Manangona hazo avy amin'i Loki

Fametrahana Prometheus. Ampio asa promtail:

- job_name: 'promtail'
 scrape_interval: 10s
 static_configs:
   - targets: ['promtail:9080']

Ary manao sary izahay:

Manangona hazo avy amin'i Loki

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.

Manangona hazo avy amin'i Loki

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:

Manangona hazo avy amin'i Loki

Rehefa notondroin'ny ELK dia nanome haben'ny fanondroana 30,3 MB izany:

Manangona hazo avy amin'i Loki

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

Manangona hazo avy amin'i Loki

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.

Source: www.habr.com

Add a comment