ကျွန်တော်ဒီနေ့မှာတော့ Loki ကို AKS ပေါ်မှာ azure blob storage ကို backend အဖြစ် သုံးပြီး deployလုပ်ပုံကိုရှင်းပြပေးပါမယ်။ Loki ဆိုတာ lightweight logging solution တစ်ခုဖြစ်ပြီး ပုံမှန်ဆိုရင် server ရဲ့ disk storage ကိုသုံးတာမလို့ storage ပြည့်သွားရင် ပြသနာတွေဖြစ်လာနိုင်ပါတယ်။ အဲ့ဒါမလို့ Azure Blob တို့ AWS S3တို့လို storage backend တစ်ခုကိုသုံးပေးသင့်ပါတယ်။ ဒါကြောင့် ကျွန်တော်က azure blob ကိုသုံးပြီး ဒီနေ့ရှင်းပြပေးသွားပါမယ်။
Loki ကို azure နဲ့ authenticate လုပ်ဖို့ နည်းလမ်း(၃)ခုရှိပါတယ်။
- Hard coding a connection string
- Manged identity
- Federated token
ကျွန်တော်ဒီနေ့မှာတော့ Federated Tokenကိုသုံးပြီး Loki ကို AKS ပေါ်မှာ deploy လုပ်တာကိုတစ်ဆင့်ချင်းရှင်းပြပေးသွားမှာဖြစ်ပါတယ်။ connection string ကိုသုံးတာက production environment အတွက်အဆင်မပြေပါဘူး။
Create Storage Account
အရင်ဆုံး storage accounts တစ်ခုကို create လုပ်ပေးရပါမည်။
1az storage account create \
2--name <NAME> \
3--location <REGION> \
4--sku Standard_ZRS \
5--encryption-services blob \
6--resource-group <MY_RESOURCE_GROUP_NAME>ပြီးနောက် chunks နဲ့ ruler အတွက် containers တွေကို create ပေးရပါမယ်။
1az storage container create --account-name <STORAGE-ACCOUNT-NAME> --name <CHUNK-BUCKET-NAME> --auth-mode login
2
3az storage container create --account-name <STORAGE-ACCOUNT-NAME> --name <RULER-BUCKET-NAME> --auth-mode loginCreating the Azure AD role and federated credentials
အရင်ဆုံး ကျွန်တော်တို့ loki ကိုထည့်ချင်တဲ့ aks cluster ရဲ့ OIDC issuer url ကိုသိဖို့လိုပါတယ်။
1az aks show \
2--resource-group <MY_RESOURCE_GROUP_NAME> \
3--name <MY_AKS_CLUSTER_NAME> \
4--query "oidcIssuerProfile.issuerUrl" \
5-o tsvနောက်တစ်ဆင့်အနေနဲ့အောက်ပါအတိုင်း credentials.jsonကို create လုပ်ပေးဖို့လိုပါတယ်။ issuer နေရာမှာ အပေါ်ကရလာတဲ့ OIDC issuer url ကိုထည့်ပေးပါ။
1{
2 "name": "LokiFederatedIdentity",
3 "issuer": "<OIDC-ISSUER-URL>",
4 "subject": "system:serviceaccount:loki:loki",
5 "description": "Federated identity for Loki accessing Azure resources",
6 "audiences": [
7 "api://AzureADTokenExchange"
8 ]
9}နောက်တစ်ဆင့်အနေနဲ့ Storage Blob Contributor Role ပေးဖို့အတွက် azure ad app တစ်ခုကို အောက်ကလို create ပေးလိုက်ပါ။ ပြီးရင် app ကို federated credentials တွေ assign ချပေးရပါမယ်။
1az ad app create --display-name loki --query appId -o tsv
2az ad sp create --id <APP-ID>
3az ad app federated-credential create --id <APP-ID> --parameters credentials.jsonနောက်ဆုံးအနေနဲ့ app ကို storage contributor role သတ်မှတ်ပေးရပါမယ်။
1az role assignment create \
2 --role "Storage Blob Data Contributor" \
3 --assignee <APP-ID> \
4 --scope /subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>ဒါဆိုရင်တော့ ကျွန်တော်တို့တွေ loki helm chart ကို deploy လုပ်ဖို့အဆင်သင့်ဖြစ်ပါပြီ။
Deploying the Helm chart
helm chart ကို deploy မလုပ်ခင်မှာ grafana helm repo ကို addပေးထားရပါမယ်။
1helm repo add grafana https://grafana.github.io/helm-charts
2helm repo updateLoki basic authentication
Lokiမှာ default အတိုင်းဆို ဘာ authenticationမှ မပါလာပါဘူး။ gateway ကို public access ပေးမှာဖြစ်တာမလို့ authentication တစ်ခုတော့အနည်းဆုံးသုံးပေးသင့်ပါတယ်။ ကျွန်တော်က basic auth ဖြစ်တဲ့ username - password ကိုပဲသုံးပါမယ်။
အရင်ဆုံး username နဲ့ password ပါတဲ့ .htpasswd file တစ်ခုကိုဆောက်ပေးရပါမယ်။ username ကတော့ loki ဖြစ်ပီး password ကိုအဆင်ပြေရာထည့်ပေးလိုက်ပါ။
1htpasswd -c .htpasswd <username>ပြီးရင်တော့ loki gateway မှာ authenticationအတွက်သုံးဖို့ loki-basic-auth ဆိုတဲ့ k8s secret ကို create ပေးလို့ရပါပြီ။
1kubectl create secret generic loki-basic-auth --from-file=.htpasswd -n loki
2kubectl create secret generic canary-basic-auth --from-literal=username=loki --from-literal=password=lokiadmin -n lokiLoki Helm chart configuration
ဒါကတော့ helm chart valueတွေပါ။ မိမိရဲ့ configuration အရလိုအပ်တာတွေပြောင်းပေးဖို့လိုအပ်ပါတယ်။
https://gist.github.com/thaunghtike-share/0d61e42942c4294964e296f785f5bd9a
Deploy Loki
အောက်ပါအတိုင်း loki helm chart ကို deploy လုပ်နိုင်ပါပြီ။
1helm install --values values.yaml loki grafana/loki -n loki --create-namespaceAdd loki data source in the grafana
Loki ရလာပြီဆိုတော့ grafana မှာ loki ကို data source အနေနဲ့ ထည့်ဖို့ အဆင့် အနည်းငယ်ကိုလုပ်ပေးရပါဦးမယ်။
loki gateway ကို loki မှာ port-forward ပေးထားပါ။
1kubectl port-forward --namespace loki svc/loki-gateway 3100:80 &Sample Logs တစ်ခုကို အောက်ကလို post method နဲ့ post လုပ်ပေးလိုက်ပါ။
1curl -u loki:lokiadmin \
2 -H "Content-Type: application/json" \
3 -XPOST -s "http://127.0.0.1:3100/loki/api/v1/push" \
4 --data-raw "{\"streams\": [{\"stream\": {\"job\": \"test\"}, \"values\": [[\"$(date +%s)000000000\", \"fizzbuzz\"]]}]}" \
5 -H "X-Scope-OrgID: foo"ပြီးရင်တော့ Loki မှာ data တွေလက်ခံနိုင်ကြောင်းကိုအောက်ပါအတိုင်း ပြန်စစ်လို့ရပါတယ်
1curl -u loki:lokiadmin \
2 "http://127.0.0.1:3100/loki/api/v1/query_range" \
3 --data-urlencode 'query={job="test"}' \
4 -H "X-Scope-OrgId: foo"Add loki data source
အကုန်ပြီးသွားပြီဆိုရင်တော့ loki data source ကို add ဖို့အတွက် url ထည့်ပေးရပါမယ်။ basic authentication ကိုသုံးထားတာမလို့ .htpasswd ထဲက username နဲ့ password ကိုထည့်ပေးရပါမယ်။

View Logs in grafan
အခုဆိုရင်တော့ Grafana ရဲ့ explore ထဲကနေ Loki ကို source အနေနဲ့ရွေးပြီး logs တွေကိုအောက်ပါအတိုင်းကြည့်နိုင်ပါပြီ။

Kubernetes ရဲ့ pod, container စသည်တို့ကို ကြည့်ဖို့ဆိုရင်တော့ promtail ကို aks ထဲမှာ deploy လုပ်ပေးရပါမယ်။ ကျွန်တော်ကတော့ မရှင်းပြတော့ပါဘူး။ အားလုံးအဆင်ပြေကြမယ်လို့ထင်ပါတယ်။ ကျေးဇူးတင်ပါတယ်။
Discussion
Join the conversation
How do you feel about this article?
Comments
Sign in to join the conversation
Sign in to be the first to comment!
Share Your Article
Share with your professional network
Recent Articles

AWS - Application Load Balancer
Elastic Load Balancing (ELB) ELB ဆိုတာကတော့ request တွေကို တစ်နေရာတည်းမှ လက်ခံကာ Amazon EC2 instances၊ containers, etc.....

Terraform Day 3: Benefits of Terraform State
Terraform ကိုလေ့လာ တဲ့အခါ ကျွန််တော်တို့ရဲ့ Project Folder ထဲမှာ terraform.tfstate ဆိုတဲ့ ဖိုင်လေးကို တွေ့ဖူးကြပါလိမ့်မယ...

Terraform Day 2: Essential IaC Principles You Must Know
မနေ့ကတော့ Terraform အကြောင်း အကြမ်းဖျင်း Concept ကို ပြောပြခဲ့ပြီးပြီဆိုတော့ ဒီနေ့မှာတော့ Terraform ကို Professional ကျက...

TCP/IP Protocol
အားလုံးပဲမင်္ဂလာပါ။ ဒီနေ့ ကျွန်တော်တို့ TCP/IP Protocol အကြောင်း ဆွေးနွေးသွားပါမယ်။ ပထမဆုံးအနေနဲ့ TCP/IP ရဲ့ History လေး...

Terraform Day 1: Introduction to IAC and Terraform
ကျွန်တော်တို့ cloud အကြောင်း စပြောကြပြီဆိုရင် အရင်ဆုံး ခေါင်းထဲရောက်လာတာ Console ထဲဝင်၊ UI ကနေ ခလုတ်လေးတွေ လိုက်နှိပ်ပြီ...

