Na Badoo, anyị na-enyocha teknụzụ ọhụrụ mgbe niile ma nyochaa ma ha bara uru iji na sistemụ anyị. Ọ ga-amasị anyị ịkọrọ ndị obodo otu n'ime ọmụmụ ihe ndị a. A raara ya nye Loki, usoro nchịkọta log.
Loki bụ ihe ngwọta maka ịchekwa na ịlele ndekọ, na nchịkọta a na-enyekwa usoro mgbanwe maka nyochaa ha na iziga data na Prometheus. Na Mee, ewepụtara mmelite ọzọ, nke ndị okike na-akwalite nke ọma. Anyị nwere mmasị na ihe Loki nwere ike ime, ike ndị ọ na-enye, yana ruo n'ókè ọ nwere ike ime dị ka ihe ọzọ na ELK, nchịkọta anyị na-eji ugbu a.
Gịnị bụ Loki
Grafana Loki bụ ihe mejupụtara maka sistemụ zuru oke maka ịrụ ọrụ na ndekọ. N'adịghị ka usoro ndị ọzọ yiri ya, Loki dabere n'echiche nke ịkọwapụta naanị log metadata - akara (otu dị na Prometheus), na ịpịkọta ndekọ onwe ha n'ime iberibe dị iche iche.
Tupu anyị abanye n'ihe ị nwere ike iji Loki mee, achọrọ m ịkọwa ihe "echiche nke ịkọwapụta naanị metadata" pụtara. Ka anyị tulee usoro Loki na ụzọ ị ga-esi indexing na ngwọta ọdịnala dịka Elasticsearch, na-eji ihe atụ nke ahịrị sitere na log nginx:
Usoro ọdịnala na-atụgharị ahịrị ahụ dum, gụnyere mpaghara nwere ọnụ ọgụgụ buru ibu nke njirimara user_id na item_id pụrụ iche, ma chekwaa ihe niile na nnukwu ndeksi. Uru nke usoro a bụ na ị nwere ike ịgba ọsọ ajụjụ mgbagwoju anya ngwa ngwa, ebe ọ bụ na ihe fọrọ nke nta ka ọ bụrụ data niile dị na ndeksi. Ma nke a na-abịa na ọnụ ahịa na index na-aghọ nnukwu, nke sụgharịrị n'ime ihe nchekwa chọrọ. N'ihi ya, ndepụta ndekọ ederede zuru oke na nha na ndekọ ndekọ onwe ha. Ka ịchọọ ngwa ngwa site na ya, a ga-ebunye ndeksi n'ime ebe nchekwa. Na ọtụtụ ndekọ, ka index na-eto ngwa ngwa na ihe ncheta ọ na-eri.
Usoro Loki chọrọ ka ewepụtara naanị data dị mkpa na eriri, ọnụ ọgụgụ nke ụkpụrụ ya pere mpe. N'ụzọ dị otú a, anyị na-enweta obere index ma nwee ike ịchọ data ahụ site na nzacha ya site na oge na site na mpaghara indexed, wee nyochaa nke ọzọ site na iji okwu mgbe niile ma ọ bụ nchọ substring. Usoro ahụ adịghị ka nke kachasị ọsọ, mana Loki kewara arịrịọ ahụ n'ọtụtụ akụkụ wee mee ya n'otu oge, na-edozi nnukwu data na obere oge. Ọnụ ọgụgụ nke shards na arịrịọ ndị yiri ya na ha nwere ike ịhazi; ya mere, ọnụọgụ data enwere ike ịhazi kwa nkeji oge na-adabere n'ahịrị na ọnụọgụ ego enyere.
Azụmahịa a n'etiti nnukwu, ngwa ngwa ngwa ngwa na obere ihe nrịbama ike na-eme ka Loki na-achịkwa ego nke usoro ahụ. Enwere ike ịhazi ya n'ụzọ dị mfe ma gbasaa dịka mkpa siri dị.
Nchịkọta Loki nwere ihe atọ: Promtail, Loki, Grafana. Promtail na-anakọta ndekọ, hazie ha ma ziga ya na Loki. Loki na-echekwa ha. Na Grafana nwere ike ịrịọ data sitere na Loki wee gosipụta ya. Na mkpokọta, enwere ike iji Loki ọ bụghị naanị maka ịchekwa ndekọ na ịchọ site na ha. Nchịkọta dum na-enye ohere dị ukwuu maka nhazi na nyochaa data na-abata site na iji ụzọ Prometheus.
Enwere ike ịchọta nkọwa nke usoro ntinye ebe a.
Chọọ site na ndekọ
Ị nwere ike ịchọ ndekọ ahụ na interface Grafana pụrụ iche - Explorer. Ajuju a na-eji asụsụ LogQL, nke yikwara PromQL ejiri na Prometheus. Na ụkpụrụ, enwere ike iche ya dị ka grep ekesa.
Ihe nchọta ọchụchọ dị ka nke a:
Arịrịọ n'onwe ya nwere akụkụ abụọ: selector na filter. Selector bụ ọchụchọ na-eji metadata indexed (akara ngosi) nke e kenyere na ndekọ, na nzacha bụ eriri ọchụchọ ma ọ bụ regexp nke na-enyocha ndekọ nke onye ahọpụtara kọwara. N'ọmụmaatụ enyere: N'ime ihe nkwado na-agbagọ, enwere onye nhọpụta, ihe niile na-esote bụ nzacha.
{image_name="nginx.promtail.test"} |= "index"
N'ihi ụzọ Loki si arụ ọrụ, ịgaghị enwe ike ịme ajụjụ na-enweghị onye na-ahọpụta ya, mana enwere ike ịme akara n'ozuzu dịka ịchọrọ.
Onye nhọpụta bụ uru igodo-uru na ihe nkwado mgbako. Ị nwere ike ijikọta ndị na-ahọpụta ma kọwaa ọnọdụ ọchụchọ dị iche iche site na iji ndị ọrụ =, != ma ọ bụ okwu oge niile:
{instance=~"kafka-[23]",name!="kafka-dev"}
// Найдёт логи с лейблом instance, имеющие значение kafka-2, kafka-3, и исключит dev
Ihe nzacha bụ ederede ma ọ bụ regexp nke ga-enyocha data niile nke onye ahọpụtara natara.
Ọ ga-ekwe omume ịnweta eserese ad-hoc dabere na data enwetara na ụdị metrik. Dịka ọmụmaatụ, ị nwere ike ịchọpụta ugboro ole ntinye nwere eriri eriri na-apụta na ndekọ nginx:
Enwere ike ịchọta nkọwa zuru oke nke ikike na akwụkwọ LogQL.
Ntụle ndekọ
Enwere ụzọ dị iche iche isi nakọta ndekọ:
Iji Promtail, ọkọlọtọ akụrụngwa nke tojupụtara maka ịnakọta ndekọ.
Jiri Fluentd ma ọ bụ Fluent Bit, nke nwere ike izipu data na Loki. N'adịghị ka Promtail, ha nwere parsers emebere maka ihe fọrọ nke nta ka ọ bụrụ ụdị log ọ bụla ma nwee ike ijikwa ndekọ multiline.
A na-ejikarị Promtail eme nyocha. Ọ na-eme ihe atọ:
Na-achọta isi mmalite data.
Na-agbakwụnye akara na ha.
Na-eziga data na Loki.
Ugbu a Promtail nwere ike ịgụ ndekọ sitere na faịlụ mpaghara yana akwụkwọ akụkọ sistemụ. A ghaghị itinye ya na igwe ọ bụla nke a na-anakọta ndekọ.
Enwere njikọ na Kubernetes: Promtail na-akpaghị aka, site na Kubernetes REST API, na-amata steeti ụyọkọ ahụ ma na-anakọta ndekọ site na ọnụ, ọrụ ma ọ bụ pọd, na-ebipụta aha ozugbo dabere na metadata sitere na Kubernetes (aha pod, aha faịlụ, wdg.) .
Ị nwekwara ike kpọgidere akara dabere na data sitere na ndekọ site na iji Pipeline. Pipeline Promtail nwere ike ịnwe ụdị ọkwa anọ. Nkọwa ndị ọzọ na akwụkwọ ikike, Aga m achọpụta ozugbo ụfọdụ nuances.
Ntụle nkebi. Nke a bụ usoro RegEx na JSON. N'oge a, anyị na-ewepụ data na ndekọ n'ime ihe a na-akpọ maapụ amịpụtara. Anyị nwere ike wepụ na JSON site na iṅomi naanị ubi ndị anyị chọrọ na maapụ e wepụtapụtara, ma ọ bụ site n'okwu ọnụ (RegEx), ebe a na-edepụta otu ndị aha ya bụ "maapụ" na maapụ ahụ ewepụtara. Map ahụ ewepụtara bụ ụlọ ahịa igodo-uru, ebe igodo bụ aha ubi ahụ, uru bụ uru ya site na ndekọ.
Gbanwee usoro. Ogbo a nwere nhọrọ abụọ: mgbanwe, ebe anyị na-edobe iwu mgbanwe, na isi mmalite - isi iyi data maka mgbanwe site na map ewepụtara. Ọ bụrụ na enweghị mpaghara dị otú ahụ na maapụ ewepụtara, a ga-emepụta ya. N'ụzọ dị otú a, ọ ga-ekwe omume ịmepụta akara na-adabereghị na maapụ ewepụtara. N'oge a, anyị nwere ike iji ike dị ike na-emegharị data dị na maapụ ahụ ewepụtara Template Golang. Tụkwasị na nke ahụ, anyị ga-echeta na a na-ebufe maapụ ahụ amịpụtara kpamkpam n'oge nyocha, nke na-eme ka o kwe omume, dịka ọmụmaatụ, ịlele uru dị na ya: "{{if .tag}tag value exists{end}}". Template na-akwado ọnọdụ, loops, na ụfọdụ ọrụ eriri dị ka Dochie na Kpaa.
Usoro ihe omume. N'ebe a, ị nwere ike iji ọdịnaya ewepụtara mee ihe:
Mepụta akara sitere na data ewepụtara, nke Loki ga-edepụta aha ya.
Gbanwee ma ọ bụ tọọ oge mmemme site na ndekọ.
Gbanwee data (ederede ndekọ) nke ga-aga na Loki.
Mepụta metrik.
Nzacha nkebi. Oge egwuregwu, ebe anyị nwere ike izipu ndenye na anyị achọghị / dev / null ma ọ bụ zipu ha maka nhazi ọzọ.
N'iji ihe atụ nke nhazi ndekọ nginx oge niile, m ga-egosi otu ị nwere ike isi nyochaa ndekọ site na iji Promtail.
Maka ule ahụ, ka anyị were dị ka nginx-proxy ihe oyiyi nginx gbanwetụrụ jwilder/nginx-proxy:alpine na obere daemon nke nwere ike ịjụ onwe ya site na HTTP. Daemon nwere ọtụtụ njedebe njedebe, nke ọ nwere ike ịnye nzaghachi nke nha dị iche iche, yana ọkwa HTTP dị iche iche yana oge dị iche iche.
Anyị ga-anakọta ndekọ site na arịa docker, nke enwere ike ịchọta n'okporo ụzọ /var/lib/docker/containers/ / -json.log
Na docker-compose.yml anyị na-ahazi Promtail wee kọwaa ụzọ na nhazi:
Tinye ụzọ na ndekọ na promtail.yml (enwere nhọrọ "docker" na nhazi, nke na-eme otu ihe ahụ n'otu ahịrị, mana ọ gaghị adị mfe):
scrape_configs:
- job_name: containers
static_configs:
labels:
job: containerlogs
__path__: /var/lib/docker/containers/*/*log # for linux only
Mgbe agbanyere nhazi a, a ga-eziga ndekọ sitere na arịa niile na Loki. Iji zere nke a, anyị na-agbanwe ntọala nke ule nginx na docker-compose.yml - tinye oghere mkpado:
Ka anyị tugharia request_url. Iji regexp anyị na-ekpebi ebumnuche nke arịrịọ: ka data static, foto, API wee tọọ igodo kwekọrọ na maapụ ewepụtara.
- template:
source: request_type
template: "{{if .photo}}photo{{else if .static_type}}static{{else if .api_request}}api{{else}}other{{end}}"
N'iji ndị na-ahụ maka ọnọdụ ọnọdụ na Template, anyị na-elele mpaghara arụnyere na maapụ ewepụtara wee tọọ ụkpụrụ achọrọ maka ubi ụdị arịrịọ: foto, static, API. Kenye ndị ọzọ ma ọ bụrụ na ọ daa. request_type nwere ugbu a ụdị arịrịọ.
Anyị debere akara api_request, virtual_host, request_type na ọkwa (ọnọdụ HTTP) dabere na ihe anyị jisiri ike tinye na maapụ ewepụtara.
- output:
source: nginx_log_row
Gbanwee mmepụta. Ugbu a ndekọ nginx a kpochara na maapụ ewepụtara na-aga Loki.
Mgbe ịmechara nhazi ahụ dị n'elu, ị nwere ike ịhụ na ntinye aha ọ bụla na-ekenye akara dabere na data sitere na log.
Otu ihe ị ga-eburu n'uche bụ na iweghachite akara nwere ọnụ ọgụgụ dị ukwuu nke ụkpụrụ (kadinality) nwere ike belata Loki. Ya bụ, ị gaghị etinye, dịka ọmụmaatụ, user_id na ndeksi. Gụkwuo banyere nke a n'akwụkwọ akụkọ "Kedu ka akara na Loki nwere ike isi mee ka ajụjụ ndekọ ọsọ ọsọ na dị mfe" Mana nke a apụtaghị na ị nweghị ike ịchọ site user_id na-enweghị index. Ịkwesịrị iji ihe nzacha mgbe ị na-achọ ("jide" data), na ndeksi ebe a na-arụ ọrụ dị ka ihe nchọpụta iyi.
Ịhụ ihe ndekọ
Loki nwere ike rụọ ọrụ dị ka isi iyi data maka eserese Grafana site na iji LogQL. A na-akwado atụmatụ ndị a:
ọnụego - ọnụ ọgụgụ nke ndekọ kwa nkeji;
gụọ oge - ọnụ ọgụgụ nke ndekọ na nso nso a kapịrị ọnụ.
Enwekwara ọrụ nchịkọta Sum, Avg na ndị ọzọ. Ị nwere ike wuo eserese dị mgbagwoju anya, dịka ọmụmaatụ eserese nke ọnụọgụ HTTP:
A na-ebelata isi iyi data ọkọlọtọ Loki na arụmọrụ ma e jiri ya tụnyere isi iyi data Prometheus (dịka ọmụmaatụ, ị nweghị ike ịgbanwe akụkọ ahụ), mana enwere ike ijikọ Loki dị ka isi iyi nwere ụdị Prometheus. Ejighị m n'aka ma nke a bụ omume edepụtara, mana ikpe site na nzaghachi ndị nrụpụta "Otu esi ahazi Loki ka ọ bụrụ isi iyi data Prometheus? · Okwu #1222 · grafana/loki”, dịka ọmụmaatụ, bụ iwu zuru oke, yana Loki dakọtara na PromQL.
Tinye Loki dị ka isi iyi data nwere ụdị Prometheus wee tinye URL / loki:
Ma anyị nwere ike ịme eserese, dị ka a ga-asị na anyị na-arụ ọrụ na metrik sitere na Prometheus:
Echere m na ọdịiche dị na arụmọrụ bụ nwa oge na ndị mmepe ga-edozi nke a n'ọdịnihu.
Metrics
Loki na-enye ikike iwepụta metrik ọnụọgụ na ndekọ wee ziga ha na Prometheus. Dịka ọmụmaatụ, log nginx nwere ọnụọgụ bytes kwa nzaghachi, yana, yana mgbanwe ụfọdụ nke usoro ndekọ ọkọlọtọ, oge n'ime sekọnd ọ were ịzaghachi. Enwere ike wepụta data a ma ziga ya na Prometheus.
Nhọrọ ahụ na-enye gị ohere ịkọwapụta na melite metrik dabere na data sitere na maapụ ewepụtara. Anaghị ezipụ metrik ndị a na Loki - ha na-apụta na njedebe Promtail/metrics. Ekwesịrị ịhazi Prometheus ka ọ nweta data enwetara n'oge a. N'ihe atụ dị n'elu, maka request_type="api" anyị na-anakọta metrik histogram. Site na ụdị metrik a, ọ dị mfe ịnweta percentiles. Maka static na foto, anyị na-anakọta nchikota bytes na ọnụọgụ nke ahịrị ndị anyị nwetara sitetes iji gbakọọ nkezi.
N'ụzọ dị otú a, ị nwere ike chọpụta, dịka ọmụmaatụ, ajụjụ anọ dị nwayọọ. Ị nwekwara ike ịhazi nlekota maka metrik ndị a.
Ịtụle
Loki nwere ike ịbụ n'otu ọnọdụ ọnụọgụ abụọ ma ọ bụ n'ụdị sharded (ọnọdụ nwere ike ịka mma). N'okwu nke abụọ, ọ nwere ike ịchekwa data na igwe ojii, a na-echekwa chunks na index iche iche. Ụdị 1.5 na-ewebata ikike ịchekwa n'otu ebe, mana akwadobeghị iji ya na mmepụta.
Enwere ike ịchekwa chunks na nchekwa dakọtara na S3, yana nchekwa data nwere ike ịgbatị kwụ ọtọ, enwere ike iji chekwaa ndeksi: Cassandra, BigTable ma ọ bụ DynamoDB. Akụkụ ndị ọzọ nke Loki - Ndị na-ekesa (maka ide) na Querier (maka ajụjụ) - enweghị obodo yana nha nha n'usoro.
Iji nwalee nha index nke ga-esi na ya pụta, ewepụtara m ndekọ sitere na akpa nginx nke ahaziri Pipeline dị n'elu. Faịlụ ndekọ ahụ nwere ahịrị 406 nwere mkpokọta olu nke 624 MB. Emepụtara ndekọ n'ime otu elekere, ihe dị ka ntinye 109 kwa nkeji.
Ọmụmaatụ nke ahịrị abụọ sitere na log:
Mgbe ELK depụtara ya, nke a nyere nha index nke 30,3 MB:
N'ihe banyere Loki, nke a rụpụtara ihe dịka 128 KB nke ndeksi yana ihe dịka 3,8 MB nke data na chunks. Okwesiri iburu n'uche na a na-emepụta log ahụ n'onwe ya na enweghị nnukwu data dị iche iche. Gzip dị mfe na ndekọ mbụ Docker JSON nwere data nyere mkpakọ nke 95,4%, na-eburu n'uche na ọ bụ naanị nginx log ka ezigara Loki n'onwe ya, mkpakọ ruru 4 MB bụ ihe kwere nghọta. Ọnụ ọgụgụ nke ụkpụrụ pụrụ iche maka akara Loki bụ 35, nke na-akọwa obere nha nke ndeksi. Maka ELK ehichapụkwa ndekọ ahụ. Ya mere, Loki chịkọtara data mbụ site na 96%, yana ELK site na 70%.
Oriri ebe nchekwa
Ọ bụrụ na anyị atụnyere mkpokọta Prometheus na ELK, mgbe ahụ Loki "na-eri" ọtụtụ ugboro obere. O doro anya na ọrụ Go na-eri ihe na-erughị ọrụ Java, ma atụnyere nha JVM Heap Elasticsearch na ebe nchekwa ekenyere Loki ezighi ezi, mana n'agbanyeghị, ọ dị mma ịmara na Loki na-eji obere ebe nchekwa. Uru CPU ya abụghị ihe doro anya, mana ọ dịkwa ugbu a.
Ngwa ọsọ
Loki “na-eri” ndekọ ngwa ngwa. Ọsọ ọsọ na-adabere n'ọtụtụ ihe - ụdị ndekọ dị, otú ọkaibe anyị si dị na ịkọwapụta ha, netwọkụ, diski, wdg - ma ọ dị elu karịa ELK (na ule m - ihe dị ka okpukpu abụọ). A kọwara nke a site n'eziokwu ahụ bụ na Loki na-etinye data dị ntakịrị n'ime index na, ya mere, na-etinye obere oge na ntinye aha. Site na ọsọ ọchụchọ, ọnọdụ ahụ dị iche: Loki na-achọpụta na ọ na-agbada na data buru ibu karịa ọtụtụ gigabytes, ebe ọsọ ọchụchọ ELK adabereghị na nha data ahụ.
Chọọ site na ndekọ
Loki dị ala karịa ELK n'ihe gbasara ike ọchụchọ log. Grep na okwu oge niile dị ike, mana ọ dị ala na nchekwa data tozuru oke. Enweghị ajụjụ dị nso, nchịkọta naanị site na akara, enweghị ike ịchọ na-enweghị akara - ihe a niile na-egbochi anyị ịchọ ozi nke mmasị na Loki. Nke a apụtaghị na ọ dịghị ihe a ga-achọta site na iji Loki, ma ọ na-akọwa usoro nke na-arụ ọrụ na ndekọ mgbe mbụ ịchọta nsogbu na chaatị Prometheus, wee jiri akara ndị a chọọ ihe mere na ndekọ.
interface
Nke mbụ, ọ mara mma (ndo, enweghị ike iguzogide). Grafana nwere interface mara mma, mana Kibana bara ụba nke ukwuu.
Uru na ọghọm dị na Loki
Otu n'ime uru bụ na Loki jikọtara ya na Prometheus, yabụ anyị na-enweta metrics na ịdọ aka ná ntị na igbe ahụ. Ọ dị mma maka ịnakọta ndekọ na ịchekwa ya na Kubernetes Pods, ebe ọ nwere nchọpụta ọrụ ketara n'aka Prometheus ma na-etinye akara na-akpaghị aka.
Akụkụ dị ala bụ akwụkwọ na-adịghị ike. Ihe ụfọdụ, dịka ọmụmaatụ, njirimara na ike nke Promtail, achọpụtara m naanị na usoro ịmụ koodu ahụ, ọ dabara nke ọma na ọ bụ isi mmalite. Ọdịmma ọzọ bụ ike ntule adịghị ike. Dịka ọmụmaatụ, Loki enweghị ike ịtụgharị ndekọ ndekọ aha ọtụtụ. Ihe ọghọm ọzọ bụ na Loki bụ teknụzụ na-eto eto (mwepụta 1.0 bụ na Nọvemba 2019).
nkwubi
Loki bụ teknụzụ na-adọrọ mmasị 100% nke dabara maka obere ọrụ obere na ọkara, na-enye gị ohere idozi ọtụtụ nsogbu nke nchịkọta ndekọ, nyocha ndekọ, nyocha na nyocha ndekọ.
Anyị anaghị eji Loki na Badoo n'ihi na anyị nwere nchịkọta ELK dabara anyị na nke ejirila usoro omenala dị iche iche tojuru etoju kemgbe ọtụtụ afọ. Maka anyị, ihe ịsụ ngọngọ na-achọ site na ndekọ. N'ihe fọrọ nke nta ka ọ bụrụ 100 GB nke ndekọ kwa ụbọchị, ọ dị mkpa ka anyị nwee ike ịchọta ihe niile na ntakịrị ihe ma mee ya ngwa ngwa. Maka nhazi na nlekota oru, anyị na-eji ihe ngwọta ndị ọzọ emebere maka mkpa anyị ma jikọta ya na ibe anyị. Ihe ngwugwu Loki nwere uru a na-ahụ anya, mana ọ gaghị enye anyị karịa ka anyị nweburu, yana uru ya agaghị akarị ọnụ ahịa njem.
Na agbanyeghị na nyochachara ọ bịara doo anya na anyị enweghị ike iji Loki, anyị nwere olileanya na post a ga-enyere gị aka na nhọrọ gị.
Ebe nchekwa ahụ nwere koodu ejiri n'ime akụkọ dị ebe a.