LGTM အကြောင်းတစေ့တစောင်း

LGTM က Cloud Engineer တွေ၊ Infrastructure Engineer တွေ၊ DevOps တွေလေ့လာမယ်ဆို အကျိုးရှိမယ့် stack တခုလို့ ကျွန်တော် ယူဆတယ်။ ကုမ္ပဏီတွေရဲ့ infrastructure ကုန်ကျစရိတ်ကို ကြည့်ရင် Datadog တို့လို platform တွေကို လုပ်ကျွေးနေရတဲ့ ပမာဏက တကယ်မသေးဘူး။ အဲဒါကြောင့် ကျွန်တော်တို့လည်း open source ဖြစ်တဲ့ LGTM ဖက်ကို လှည့်ဖြစ်ခဲ့တယ်။

LGTM ဆိုတာ GitHub pull request ရဲ့ code review တွေမှာဆိုရင် looks good to me လို့အတိုရေးတာ။ "ငါကြည့်ပြီးပြီ ထူးထူးခြားခြား ပြောစရာမရှိပါ" ပေါ့လေ။ ဒါပေမယ့် ခုပြောတဲ့ LGTM ဆိုတာ Loki, Grafana, Tempo, Mimir ၄ ခုပေါင်း LGTM stack ကိုဆိုလိုတယ်။ အဲထဲမှာ Grafana က Prometheus နဲ့တွဲပြီး လူသိအများဆုံး ဖြစ်မယ်ထင်တယ်။ သိဆို LGTM stack ကိုရေးတဲ့ ကုမ္ပဏီရဲ့နာမည်ကိုက Garfana Labs လို့ခေါ်တာ။ LGTM tool တွေကို Monitoring နဲ့ Observability အတွက်သုံးကြတယ်။

Monitoring လုပ်တဲ့အခါ performance profile, log, metric နဲ့ trace ဒီ ၄ ခုကိုယူကြတယ်။ Log အတွက် LGTM မှာ Loki ရှိတယ်။ Log ဆိုတာ event တွေကို မှတ်တဲ့ content တွေကိုခေါ်တယ်။ ဥပမာ user က cart ထဲကပစ္စည်းဘယ်နှခုကို ငွေရှင်းသွားပါပြီဆိုတာမျိုး ဒါမှမဟုတ် ပိုက်ဆံဖြတ်လိုက်ပေမယ့် order creation လုပ်ဖို့ fail ခဲ့တယ်ဆိုတာမျိုးစသဖြင့်ပေါ့လေ။

အရိုးရှင်းဆုံး Log Architecture တခုဆိုရင် Application က stdout ကိုဖြစ်ဖြစ် file (local file ဒါမှမဟုတ် network ပေါ်က file တခုခု) ကိုဖြစ်ဖြစ် log entry တွေ လှမ်းရေးနေမယ်။ logging agent လို့ခေါ်တဲ့ နောက် program တခုက အဲဒီ file ကို 15 စက္ကန့်တခါဖြစ်ဖြစ် သွားဖတ်မယ်။ log entry အသစ်တွေတွေ့ရင် log backend server တခုဆီပို့မယ်။ backend ကအဲဒီ log တွေကို index လုပ်မယ်။ storage ထဲလှမ်းသိမ်းမယ်ပေါ့။

Loki အတွက်က promtail လို့ခေါ်တဲ့ logging agent ကိုသုံးတယ်။ အရင်က Fluentd, FluentBit agent တွေသုံးနေတာ ဆိုရင်လည်း အဲဒါတွေ ဆက်သုံးပြီး Loki backend ဆီ log တွေ ပို့လို့ရပါတယ်။ performance ဖက်ကြည့်ရင် Fluentd က Ruby နဲ့ရေးထားတဲ့ logging agent ဖြစ်လို့ throughput တက်ရင် performance ကျမယ်။ FluentBit က C သုံးထားတာမို့ IoT လိုမျိုး resource ခပ်နည်းနည်းနဲ့ အလုပ်လုပ်ရမယ့် ပတ်ဝန်းကျင်မှာတောင် ကောင်းကောင်း လုပ်နိုင်မယ်။ promtail ကတော့ Go logging agent မို့လို့ performance က အဲဒီ ၂ ခုကြားလောက်ကျတယ်။ လက်ရှိတော့ factory equipment တွေအတွက် FluentBit သုံးပြီး backend တွေအတွက် promtail သုံးနေတယ်။

server ဖက်ကိုကြည့်ရင်လည်း loki ကတခြား log backend တွေ ဥပမာ Elasticsearch, Splunk တို့နဲ့ indexing strategy မတူပါဘူး။ Elasticsearch က log ရဲ့ content ကို index ပြီးသိမ်းတာဖြစ်လို့ full text search မှာသိပ်မြန်ပါတယ်။ ဒါပေမယ့် အဲအတွက် storage နဲ့ computing cost ကလည်း ပေးရတာ များပါတယ်။ Loki ကတော့ metadata indexing ​သုံးတာဖြစ်လို့ resource consumption အများကြီး ပိုသက်သာပါတယ်။ query လုပ်တဲ့အခါ log တွေကို metadata နဲ့အရင် filter လုပ်ပြီးမှ content search ဆက်လုပ်သွားတယ်။ ဒါရဲ့ tradeoff က full text search တွေမကောင်းတာပါပဲ။

နောက် monitoring အမျိုးအစားတခုက metric ဖြစ်တယ်။ metric ဆိုတာက time series data point တွေကို ဆိုလိုကြတာများတယ်။ timestamp မပါတဲ့၊ nth dimension မရှိတဲ့ metric တွေလည်း ရှိလို့ရပါတယ်။ ဥပမာ http status 500 ဘယ်နှခု ထွက်ထားလဲ။ ဘယ် endpoint က အများဆုံး ထိထားလဲ။ image generation လုပ်ရမယ့် task တွေဘယ်နှခုလောက် ပြီးထားလဲစသဖြင့်ပေါ့။ metric ကိုက push/pull model အပေါ်မူတည်ပြီး agent based လား server based လား ဖြစ်မှာပေါ့နော်။ ဒါပေမယ့် အခုခေတ်မှာ push ကပဲ စံတခုဖြစ်နေပြီ။ LGTM မှာတော့ metric accumulation လုပ်ဖို့ software မပါဘူး။ အဲဒီအစား သူ့ထဲက mimir ဆိုတာက prometheus (metric backend) နဲ့တွဲဖက်သုံးဖို့ database ဖြစ်တယ်။

Prometheus ကိုတော့ အများကြီးပြောဖို့လိုမယ်မထင်ဘူး။ တော်တော်လေး နာမည်ကြီးတဲ့ metrics server လည်း ဖြစ်သလို metric scraping, storing, analysis အကုန်လုံး လုပ်လို့ရတယ်။ PromQL လို့ခေါ်တဲ့ query language interface ကတဆင့် analysis လုပ်ရတာဖြစ်တဲ့အတွက် automation အတွက်လည်း အိုကေပြီးသား။ ပြီးတော့ alerting, service discovery အတွက်လည်း integration ပါတယ်။ တခုရှိတာက metrics တွေကို ကိုယ်က ရေရှည်သိမ်းချင်တယ်။ သိမ်းမယ့် storage မှာလည်း PromQL နဲ့ metrics analysis လုပ်ချင်တယ်ဆိုရင် Prometheus compatible storage ဖြစ်ဖို့လိုတယ်။ LGTM ထဲက mimir က အဲသလို storage မျိုးပဲ။

Trace အတွက်က သပ်သပ်ထပ်ပြောမယ်။ LGTM မှာတော့ Tempo ပေါ့။ ဒါပေမယ့် ကျွန်တော်က tracing အတွက်ကို Tempo မသုံးဖြစ်ဘူး။

ဒါဆို LGTM ထဲက Grafana ကျန်တယ်။ Grafana ကတော့ data visualization dashboard software တခု။ ဒါပေမယ့် သူက data ထည့် bar chart, pie chart, table, histogram, heap map တွေ generate လုပ်လို့ရတဲ့ သာမန် library တွေထက် အများကြီး ပိုသာတယ်။ realtime query (ingestion မလုပ်ရပဲ လိုတဲ့အချိန်မှ data source ကို query ပြီး chart ထုတ်ပေးနိုင်တာ), integration ကောင်းတာ (prometheus, mongo, postgres နဲ့မရေတွက်နိုင်တဲ့ 3rd party software တွေနဲ့ ချိတ်သုံးလို့ရ), interface စုံတာ (chart အမျိုးအစား ပေါင်းစုံ၊ query builder နဲ့ chart customization တွေလုပ်လို့ရ), access control ရတာ (authn, authz နှစ်ခုလုံးရ) နဲ့ community dashboard (သူများ လုပ်ထားတဲ့ chart တွေ အသင့်ယူသုံးလို့ရတာ) ဒီအချက်တွေက open source မှာ Grafana ကိုပြိုင်ဖက်ကင်းစေတာပဲ။

LGTM ရဲ့အားသာချက်တခုက ကိုယ့် platform ပေါ်မှာတင် အကုန် setup လုပ်လို့ရတယ်။ infra ဖိုးစိုက်ရုံပဲ။ ကိုယ်နည်းနည်းပဲသုံးရင် နည်းနည်းပဲ ပေးရမယ်။