Komkirina têketinên ji Loki

Komkirina têketinên ji Loki

Em li Badoo bi berdewamî teknolojiyên nû dişopînin û dinirxînin ka em wan di pergala xwe de bikar bînin an na. Em dixwazin yek ji van lêkolînan bi civakê re parve bikin. Ew ji Loki re, pergalek berhevkirina têketinê ve hatî veqetandin.

Loki ji bo hilanîn û dîtina têketin çareseriyek e, û ev stack jî ji bo analîzkirina wan û şandina daneyan ji Prometheus re pergalek maqûl peyda dike. Di Gulanê de, nûvekirinek din hate berdan, ku ji hêla afirîner ve bi rengek çalak tê pêşve xistin. Me eleqedar bû ku Loki dikare çi bike, çi taybetmendî peyda dike, û ta çi radeyê ew dikare wekî alternatîfek ELK-ê ku em nuha bikar tînin tevbigere.

Loki çi ye

Grafana Loki komek hêmanên ji bo pergalek têketinek bêkêmasî ye. Berevajî pergalên din ên bi vî rengî, Loki li ser bingeha ramana ku tenê metadata têketinê - etîketan îndeks dike (mîna di Prometheus de) ye, û têketinên xwe li kêleka hev li perçeyên cihêreng berhev dike.

Rûpelê Home, GitHub

Berî ku ez têkevim ka hûn dikarin bi Loki re çi bikin, ez dixwazim ronî bikim ku tê çi wateyê "fikra îndekskirina tenê metadata". Ka em di çareseriyên kevneşopî de, wekî Elasticsearch, nêzîkatiya Loki û nêzîkatiya nîşankirinê bidin ber hev, bi mînakek rêzek ji têketina nginx bikar bînin:

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"

Pergalên kevneşopî tevahiya rêzê, di nav wan de qadên bi gelek nirxên bikarhêner_id û item_id-ê yên bêhempa par dike, û her tiştî di navnîşên mezin de hilîne. Feydeya vê nêzîkbûnê ev e ku hûn dikarin zû pirsên tevlihev bimeşînin, ji ber ku hema hema hemî daneyan di navnîşan de ne. Lê divê hûn ji bo vê yekê bidin ku index mezin dibe, ku tê wergerandin daxwazên bîranînê. Wekî encamek, navnîşa tev-nivîsê ya têketinê bi mezinahiyê bi têketin bixwe re hevber e. Ji bo ku meriv zû di nav wê de bigere, pêdivî ye ku pêvek di bîranînê de were barkirin. Û her ku bêtir têketin, zûtirîn index zêde dibe û bîranîna wê bêtir dixwe.

Nêzîkatiya Loki hewce dike ku tenê daneyên pêwîst ji rêzê were derxistin, ku hejmara nirxên wan piçûk e. Bi vî rengî em navnîşek piçûk distînin û dikarin daneyan bi fîlterkirina wê li gorî zeman û qadên pêvekirî bigerin, û dûv re yên mayî bi biwêjên birêkûpêk an lêgerînên binerdê bigerin. Pêvajo zû zû xuya nake, lê Loki daxwazê ​​li çend beşan dabeş dike û wan bi paralelî dimeşîne, di demek kurt de hejmareke mezin a daneyan hildiweşîne. Hejmara şax û daxwazên paralel di wan de têne mîheng kirin; ji ber vê yekê, mîqdara daneya ku dikare di yekîneya demê de were hilberandin bi rengek xêzikî bi hêjmara çavkaniyên peydakirî ve girêdayî ye.

Ev danûstendina di navbera îndeksek bilez a mezin û nîşanek piçûk a brute-hêza paralel de dihêle Loki lêçûna pergalê kontrol bike. Ew dikare li gorî hewcedariyên we bi nermî were mîheng kirin û berfireh kirin.

Stack Loki ji sê beşan pêk tê: Promtail, Loki, Grafana. Promtail têketin berhev dike, wan pêvajo dike û ji Loki re dişîne. Loki wan diparêze. Û Grafana dikare daneyên ji Loki bixwaze û wê nîşan bide. Bi gelemperî, Loki dikare ne tenê ji bo hilanîna têketin û lêgerîna di nav wan de were bikar anîn. Tevahiya stack ji bo hilberandin û analîzkirina daneyên gihîştî bi karanîna riya Prometheus fersendên mezin peyda dike.
Danasînek pêvajoya sazkirinê dikare were dîtin vir.

Log Search

Hûn dikarin têketin di navgînek taybetî ya Grafana - Explorer de bigerin. Pirs zimanê LogQL bikar tînin, ku pir dişibihe PromQL-ya ku Prometheus bikar tîne. Di prensîbê de, ew dikare wekî grepek belavkirî were fikirîn.

Navbera lêgerînê bi vî rengî xuya dike:

Komkirina têketinên ji Loki

Pirs bi xwe ji du beşan pêk tê: hilbijêr û parzûn. Hilbijêr lêgerînek ji hêla metadaneyên îndekskirî (etîket) ve ye ku ji têketinê re têne veqetandin, û Parzûnek rêzek lêgerînê an regexp e ku tomarên ku ji hêla hilbijêr ve hatine destnîşan kirin fîlter dike. Di mînaka hatî dayîn de: Di bendikên kelandî de - hilbijêr, her tişt piştî - Parzûn.

{image_name="nginx.promtail.test"} |= "index"

Ji ber awayê xebata Loki, hûn nikanin bêyî hilbijêrek daxwazan bikin, lê etîket dikarin bi kêfî gelemperî bêne çêkirin.

Vebijêrk-nirxa nirxê ya di brayên çîçek de ye. Hûn dikarin hilbijêran berhev bikin û bi karanîna operatorên =, != an biwêjên birêkûpêk şert û mercên lêgerînê yên cihê diyar bikin:

{instance=~"kafka-[23]",name!="kafka-dev"} 
// Найдёт логи с лейблом instance, имеющие значение kafka-2, kafka-3, и исключит dev 

Parzûnek nivîsek an regexp e ku dê hemî daneyên ku ji hêla hilbijêr ve hatî wergirtin fîlter bike.

Mimkun e ku meriv grafikên ad-hoc li ser bingeha daneyên wergirtî di moda metrîkê de bigire. Mînakî, hûn dikarin di têketinên nginx ên têketinek ku tê de rêzika pêvekê vedihewîne de frekansa rûdanê fêr bibin:

Komkirina têketinên ji Loki

Danasînek tevahî ya taybetmendiyan dikare di belgeyê de were dîtin LogQL.

Parskirina têketinê

Gelek awayên berhevkirina tomaran hene:

  • Bi alîkariya Promtail, hêmanek standard a stakê ji bo berhevkirina têketin.
  • Rasterast ji konteynera dokerê tê bikar anîn Loki Docker Logging Driver.
  • Fluentd an Fluent Bit bikar bînin ku dikare daneyan ji Loki re bişîne. Berevajî Promtail, wan hema hema ji bo her cûre têketinê parserên amade hene û dikarin têketinên pirzimanî jî bi rê ve bibin.

Bi gelemperî Promtail ji bo parskirinê tê bikar anîn. Ew sê tiştan dike:

  • Çavkaniyên daneyan dibîne.
  • Etîketan bi wan ve girêdin.
  • Daneyên ji Loki re dişîne.

Naha Promtail dikare têketinên ji pelên herêmî û ji kovara systemd bixwîne. Pêdivî ye ku ew li ser her makîneya ku têketin jê têne berhev kirin were saz kirin.

Bi Kubernetes re entegrasyon heye: Promtail bixweber bi navgîniya Kubernetes REST API-ya Kubernetes rewşa komê dibîne û têketinek ji nodek, karûbar an podek berhev dike, tavilê etîketan li ser bingeha metadata ji Kubernetes (navê pod, navê pelê, hwd.) dişîne.

Her weha hûn dikarin etîketan li ser bingeha daneyên ji têketinê bi karanîna Pipeline ve daliqînin. Pipeline Promtail dikare ji çar celeb qonaxan pêk were. Agahiyên bêtir - in belgeyên fermî, Ez ê tavilê hin nuwazeyan bibînim.

  1. Qonaxên parsing. Ev qonaxa RegEx û JSON e. Di vê qonaxê de, em daneyan ji têketinê derdixin nav nexşeya ku jê re tê gotin. Hûn dikarin ji JSON derxînin bi tenê kopîkirina zeviyên ku ji me re hewce ne di nexşeya hatî derxistin de, an jî bi navgînên birêkûpêk (RegEx), ku komên binavkirî di nexşeya hatî derxistin de "nexşe" têne derxistin. Nexşeya hatî derxistin depoyek nirx-kilît e, ku mift navê zeviyê ye, û nirx nirxa wê ya ji têketinê ye.
  2. Qonaxên veguherîn. Vê qonaxê du vebijark hene: veguherîn, ku em li wir qaîdeyên veguheztinê destnîşan dikin, û çavkanî - çavkaniya daneyê ji bo veguherîna ji nexşeya hatî derxistin. Ger di nexşeya hatî derxistin de qadeke wisa tune be, wê hingê ew ê were çêkirin. Bi vî rengî, gengaz e ku meriv etîketên ku ne li ser nexşeya hatî derxistin têne afirandin. Di vê qonaxê de, em dikarin daneyên di nexşeya hatî derxistin de bi karanîna pir hêzdar manîpule bikin şablonê golan. Wekî din, divê em ji bîr mekin ku nexşeya hatî derxistin di dema parskirinê de bi tevahî tê barkirin, ku ev yek mimkun dike, bo nimûne, nirxa tê de were kontrol kirin: "{{eger .tag}nirxa tagê heye{end}}". Şablon şert, loop, û hin fonksiyonên rêzikê yên wekî Replace û Trim piştgirî dike.
  3. Qonaxên çalakiyê. Di vê qonaxê de, hûn dikarin tiştek bi derxistinê re bikin:
    • Ji daneyên ku hatine derxistin etîketek biafirînin, ku dê ji hêla Loki ve were destnîşankirin.
    • Dema bûyerê ji têketinê biguherînin an bicîh bikin.
    • Daneyên (nivîsa têketinê) ku dê biçin Loki biguhezînin.
    • Metrîkan çêbikin.
  4. Qonaxên Parzûnkirinê. Qonaxa maçê, ku em dikarin tomarên ku em ne hewce ne /dev/null bişînin, an jî wan ji bo pêvajoyek din bişînin.

Bi karanîna mînaka hilberandina têketinên nginx ên normal, ez ê destnîşan bikim ka hûn çawa dikarin têketinên bi karanîna Promtail veqetînin.

Ji bo ceribandinê, werin em wêneyek nginx jwilder/nginx-proxy:alpine û şeytanek piçûk a ku dikare xwe bi riya HTTP-ê wekî nginx-proxy bipirse bigire. Daemon xwedan çend xalên dawîn e, ku ew dikare bersivên bi pîvanên cihêreng, bi statûyên HTTP yên cihêreng û bi derengiyên cihêreng bide.

Em ê têketinên ji konteynirên dokerê berhev bikin, yên ku li ser riya /var/lib/docker/containers/ têne dîtin. / -json.log

Di docker-compose.yml de me Promtail saz kir û riya vesazkirinê diyar dike:

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'
 // ...

Rêya têketinê li promtail.yml zêde bikin (di vebijarkê de vebijarkek "docker" heye ku heman tiştî di yek rêzê de dike, lê ew ê ne ewqas eşkere be):

scrape_configs:
 - job_name: containers

   static_configs:
       labels:
         job: containerlogs
         __path__: /var/lib/docker/containers/*/*log  # for linux only

Dema ku ev veavakirin were çalak kirin, Loki dê ji hemî konteyneran têketin bistîne. Ji bo ku em ji vê yekê dûr nekevin, em mîhengên testa nginx di docker-compose.yml de diguhezînin - têketinê li qada nîşanê zêde bikin:

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

Promtail.yml biguherînin û Pipeline saz bikin. Têketin wiha ne:

{"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"}

qonaxên boriyê:

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

Em zeviyên stream, attrs, attrs.tag (heke hebe) ji JSON-a hatî derdixin û dixin nav nexşeya hatî derxistin.

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

Ger gengaz bû ku qada tagê di nexşeya hatî derxistin de were danîn, wê hingê em bi karanîna regexp-ê navên wêne û konteynerê derdixin.

 - labels:
     image_name:
     container_name:

Em etîketan destnîşan dikin. Ger bişkojkên image_name û konteynir_name di daneyên derxistinê de werin dîtin, wê hingê nirxên wan dê li ser etîketên guncan werin veqetandin.

 - match:
     selector: '{job="docker",container_name="",image_name=""}'
     action: drop

Em hemî têketinên ku etîketên image_name û konteyner_name nedanîne berdidin.

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

Ji bo hemû têketinên ku navê_imageyê wan bi nginx.promtail.test re wekhev e, em qada têketinê ji têketina çavkanî derdixin û bi bişkoka rêzê di nexşeya hatî derxistin de dixin.

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

Em rêzika têketinê bi vegotinên rêkûpêk paqij dikin û mêvandarê virtual nginx û xeta têketinê ya nginx derdixin.

     - 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.]+)")?

Têketina nginx bi vegotinên birêkûpêk parse bike.

    - 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>[^/?.]+).*$

request_url parse bike. Bi alîkariya regexp, em armanca daxwazê ​​destnîşan dikin: statîk, wêneyan, API-yê û di nexşeya hatî derxistin de mifteya têkildar destnîşan dikin.

       - template:
           source: request_type
           template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"

Bi karanîna operatorên şertî yên di Şablonê de, em zeviyên sazkirî yên di nexşeya hatî derxistin de kontrol dikin û ji bo qada daxwaz_type nirxên pêwîst destnîşan dikin: wêne, statîk, API. Ger bi ser neket, yên din destnîşan bikin. Niha request_type cureya daxwazê ​​dihewîne.

       - labels:
           api_request:
           virtual_host:
           request_type:
           status:

Me etîketên api_request, virtual_host, request_type û status (statûya HTTP) li ser bingeha tiştê ku me karî di nexşeya hatî derxistin de bi cih bikin.

       - output:
           source: nginx_log_row

Hilberê biguherînin. Naha têketina nginx a paqijkirî ji nexşeya hatî derxistin diçe Loki.

Komkirina têketinên ji Loki

Piştî xebitandina konfigurasyona jorîn, hûn dikarin bibînin ku her navnîşek li ser bingeha daneyên ji têketinê tête navnîş kirin.

Bînin bîra xwe ku derxistina etîketên bi hejmareke mezin nirxan (kardînalîte) dikare Loki bi girîngî hêdî bike. Ango, divê hûn di navnîşanê de nexin, mînakî, user_id. Di vê gotarê de bêtir bixwîninÇawa etîketên li Loki dikarin pirsên têketinê zûtir û hêsantir bikin". Lê ev nayê wê wateyê ku hûn nekarin bêyî navnîşan li gorî user_id bigerin. Pêdivî ye ku di dema lêgerînê de fîlteran bikar bînin (li gorî daneyan "bigirin"), û pêvek li vir wekî nasnameyek tîrêjê tevdigere.

Visualîzasyona têketinê

Komkirina têketinên ji Loki

Loki dikare wekî çavkaniya daneyê ji bo nexşeyên Grafana bi karanîna LogQL tevbigere. Taybetmendiyên jêrîn têne piştgirî kirin:

  • rêjeya - hejmara tomar per second;
  • jimartin bi demê re - hejmara tomarên di rêza diyarkirî de.

Di heman demê de fonksiyonên komkirina Sum, Avg û yên din jî hene. Hûn dikarin grafikên pir tevlihev ava bikin, mînakî, grafikek hejmara xeletiyên HTTP:

Komkirina têketinên ji Loki

Çavkaniya daneya xwerû ya Loki ji çavkaniya daneya Prometheus hinekî kêmtir fonksiyonel e (mînak, hûn nekarin efsaneyê biguhezînin), lê Loki dikare wekî çavkaniyek celebek Prometheus were girêdan. Ez ne bawer im gelo ev behreya belgekirî ye, lê li gorî bersiva pêşdebiran dadbar dikim "Meriv çawa Loki wekî çavkaniya daneya Prometheus mîheng dike? · Hejmar #1222 · grafana/lokî”, Mînakî, ew bi tevahî qanûnî ye û Loki bi PromQL re bi tevahî hevaheng e.

Loki wekî çavkaniya daneyê bi tîpa Prometheus zêde bikin û URL /loki lê zêde bikin:

Komkirina têketinên ji Loki

Û hûn dikarin grafikan çêbikin, mîna ku em bi metrîkên Prometheus re dixebitin:

Komkirina têketinên ji Loki

Ez difikirim ku nakokî di fonksiyonê de demkî ye û pêşdebir dê di pêşerojê de wê rast bikin.

Komkirina têketinên ji Loki

Metrics

Loki şiyana derxistina metrîkên hejmarî ji têketin û şandina wan ji Prometheus re peyda dike. Mînakî, têketina nginx di her bersivê de hejmara byteyan dihewîne, û di heman demê de, bi hin guheztinek forma têketinê ya standard, dema di çirkeyan de ku bersivê girtiye. Ev dane dikare were derxistin û ji Prometheus re were şandin.

Beşek din lê zêde bike 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

Vebijêrk dihêle hûn li ser bingeha daneyên ji nexşeya hatî derxistin metrîkan diyar bikin û nûve bikin. Van pîvanan ji Loki re nayên şandin - ew di xala dawiya Promtail /metrics de xuya dikin. Divê Prometheus ji bo wergirtina daneyan ji vê qonaxê were mîheng kirin. Di mînaka jorîn de, ji bo request_type="api" em metrîka histogramê berhev dikin. Bi vî rengî metrîkan re hêsan e ku meriv perdeyan bigire. Ji bo statîk û wêneyan, em berhevoka bytes û hejmara rêzên ku me bit tê de werdigirin berhev dikin da ku navînî hesab bikin.

Di derbarê metrîkan de bêtir bixwînin vir.

Li ser Promtail portek vekin:

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

Em piştrast dikin ku metrîkên bi pêşgira promtail_custom xuya bûne:

Komkirina têketinên ji Loki

Avakirina Prometheus. Promtaila kar zêde bikin:

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

Û grafikek bikişînin:

Komkirina têketinên ji Loki

Bi vî rengî hûn dikarin, mînakî, çar pirsên herî hêdî bibînin. Her weha hûn dikarin çavdêriya van pîvanan mîheng bikin.

Scaling

Loki dikare hem di moda yekane ya binary de û hem jî şilandî be (moda horizontî-scalable). Di doza duyemîn de, ew dikare daneyan li ewr hilîne, û perçe û index ji hev cuda têne hilanîn. Di guhertoya 1.5-ê de, şiyana hilanîna li yek cîhek tête bicîh kirin, lê hîn jî nayê pêşniyar kirin ku wê di hilberînê de bikar bînin.

Komkirina têketinên ji Loki

Parçe dikarin di hilanîna S3-lihevhatî de werin hilanîn, û databasên berbelavkirî yên horizontî dikarin werin bikar anîn da ku navnîşan hilînin: Cassandra, BigTable an DynamoDB. Parçeyên din ên Loki - Belavker (ji bo nivîsandinê) û Querier (ji bo pirsan) - bê dewlet in û her weha bi horizontî jî têne pîvandin.

Di konferansa DevOpsDays Vancouver 2019-an de, yek ji beşdaran Callum Styan ragihand ku bi Loki re projeya wî petabytes têketin hene ku bi nîşanek kêmtirî 1% ji mezinahiya giştî ye:Çawa Loki Metrîk û Têketinê Têkilî Dike - Û Pereyên We Diparêze".

Berawirdkirina Loki û ELK

Mezinahiya Indeksa

Ji bo ceribandina mezinahiya îndeksê ya encam, min ji konteynera nginx-ê ku Boriya jorîn ji bo wê hatî mîheng kirin têketin girt. Di pelê têketinê de 406 xetên bi qebareya giştî 624 MB hene. Têketin di nav saetekê de, bi qasî 109 tomar di çirkeyê de hatin çêkirin.

Nimûneyek ji du rêzan ji têketinê:

Komkirina têketinên ji Loki

Dema ku ji hêla ELK-ê ve hatî navnîş kirin, ev pîvanek 30,3 MB da:

Komkirina têketinên ji Loki

Di doza Loki de, vê yekê bi qasî 128 KB îndeks û bi qasî 3,8 MB daneya li perçeyan da. Hêjayî gotinê ye ku têketin bi awayekî sûnî hate çêkirin û cûrbecûr daneyan negirt. Gzipek hêsan a li ser têketina orîjînal Docker JSON ya bi daneyan re 95,4% berhev kir, û ji ber ku tenê têketina nginx a paqijkirî ji Loki re hatî şandin, berhevkirina 4 MB tê fêm kirin. Hejmara giştî ya nirxên bêhempa yên ji bo etîketên Loki 35 bû, ku mezinahiya piçûk a pêvekê rave dike. Ji bo ELK'ê jî qeyd hat paqijkirin. Bi vî rengî, Loki daneyên orîjînal ji sedî 96, û ELK ji sedî 70 kêm kir.

Vexwarina bîranînê

Komkirina têketinên ji Loki

Ger em tevahiya stoka Prometheus û ELK bidin ber hev, wê hingê Loki çend caran kêmtir "dixwe". Eşkere ye ku karûbarê Go ji karûbarê Java-yê kêmtir dixwe, û berhevdana mezinahiya Heap Elasticsearch JVM û bîranîna veqetandî ya ji bo Loki nerast e, lê di heman demê de, hêjayî gotinê ye ku Loki pir kêmtir bîra bikar tîne. Avantaja wê ya CPU ne ew qas eşkere ye, lê ew jî heye.

Lez

Loki têketin zûtir "dixwe". Lezbûn bi gelek faktoran ve girêdayî ye - çi celeb têketin, em çiqas sofîstîke wan pars dikin, torgilok, dîsk, hwd. - lê bê guman ew ji ya ELK-ê bilindtir e (di ceribandina min de - bi qasî du caran). Ev ji hêla rastiyê ve tê ravekirin ku Loki pir hindik daneyan dixe nav îndeksê û, li gorî vê yekê, kêmtir wext li ser îndekskirinê derbas dike. Di vê rewşê de, rewş bi leza lêgerînê berevajî ye: Loki bi baldarî li ser daneyên ji çend gigabaytan mezintir hêdî dibe, dema ku ji bo ELK, leza lêgerînê bi mezinahiya daneyê ve ne girêdayî ye.

Log Search

Loki di warê kapasîteyên lêgerîna têketinê de ji ELK-ê pir kêmtir e. Grep bi vegotinên birêkûpêk tiştek bihêz e, lê ew ji databasek mezinan kêmtir e. Kêmasiya pirsên rêzê, kombûna tenê ji hêla etîketan ve, nekarîna lêgerîna bê etîketan - ev hemî me di lêgerîna agahdariya balkêş a li Loki de sînordar dike. Ev nayê vê wateyê ku bi karanîna Loki tiştek nayê dîtin, lê ew herikîna xebata bi têketin diyar dike, gava ku hûn pêşî pirsgirêkek li ser nexşeyên Prometheus bibînin, û dûv re bi karanîna van etîketan li çi qewimî di têketinan de bigerin.

virtual

Pêşîn, ew xweşik e (bibore, nekaribû li ber xwe bide). Grafana xwedan navgînek xuyangek xweşik e, lê Kibana pir fonksiyoneltir e.

Pros û neyînîyên Loki

Ji pluss, meriv dikare were zanîn ku Loki bi Prometheus re yek dibe, bi rêzê ve, em metrîkan û hişyariyê ji qutiyê digirin. Ew ji bo berhevkirina têketin û hilanîna wan bi Kubernetes Pods re hêsan e, ji ber ku ew xwedan keşfek karûbarek e ku ji Prometheus hatî mîras kirin û bixweber etîketan girêdide.

Ji kêmasiyan - belgeyên belengaz. Hin tişt, wekî taybetmendî û kapasîteyên Promtail, min tenê di pêvajoya xwendina kodê de, feydeya çavkaniya vekirî kifş kir. Dezavantajeke din jî kapasîteyên parskirinê yên qels e. Mînakî, Loki nikare têketinên pirhêl parsek bike. Di heman demê de, kêmasiyan vê yekê jî vedihewîne ku Loki teknolojiyek bi rengek ciwan e (serbestberdana 1.0 di Mijdara 2019-an de bû).

encamê

Loki teknolojiyek 100% balkêş e ku ji bo projeyên piçûk û navîn maqûl e, ku dihêle hûn gelek pirsgirêkên berhevkirina têketinê, lêgerîna têketinê, şopandin û analîzkirina têketinê çareser bikin.

Em Loki li Badoo bikar naynin, ji ber ku me stûnek ELK heye ku li gorî me ye û ku bi salan bi çareseriyên xwerû yên cihêreng zêde bûye. Ji bo me, astengî lêgerîna di qeydan de ye. Bi hema hema 100 GB têketin rojane, ji bo me girîng e ku em karibin her tiştî û hinekî din bibînin û zû bikin. Ji bo xêzkirin û çavdêrîkirinê, em çareseriyên din ên ku li gorî hewcedariyên me hatine çêkirin û bi hevûdu re yekbûyî bikar tînin. Stack Loki xwedan feydeyên berbiçav e, lê ew ê ji ya me zêdetir nede me, û feydeyên wê dê tam ji lêçûnên koçberiyê zêdetir nebin.

Û her çend piştî lêkolînê diyar bû ku em nikarin Loki bikar bînin, em hêvî dikin ku ev post dê di hilbijartinê de ji we re bibe alîkar.

Depoya bi koda ku di gotarê de hatî bikar anîn heye vir.

Source: www.habr.com

Add a comment