Thuta Learning
ရှာဖွေရန်
Elasticsearch
ProjectsData & Databasesbeginner

Project — Analytics Dashboard

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Project — Analytics Dashboard concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ Elasticsearch query/code ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် မှန်ကန်စွာအသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Lesson 11 က aggregation basics (metric + bucket) ကို intro လုပ်ခဲ့ပေမယ့် ဒီ project မှာတော့ aggregation များစွာကို nested/combined အနေနဲ့ တစ်ခုတည်း request ထဲ ပေါင်းစပ်ပြီး real analytics dashboard တစ်ခုကို ဆောက်ကြည့်ပါမယ်—`date_histogram` bucket aggregation (time-based bucket, ဥပမာ "day တစ်ခုစီမှာ event ဘယ်နှစ်ခုဖြစ်ခဲ့လဲ") ကို `terms` aggregation ထဲမှာ nest ထည့်ရင် "topic တစ်ခုစီအတွက် day တစ်ခုစီမှာ view count ဘယ်လောက်ရှိလဲ" ဆိုတဲ့ two-dimensional analytics ကို query တစ်ခုတည်းနဲ့ ရနိုင်ပါတယ်—SQL ဆိုရင် `GROUP BY topic, date_trunc('day', occurred_at)` နှစ်ထပ် group by နဲ့ ရည်ရွယ်ချက်တူပါတယ်။ Kibana ကို Lesson 7 မှာ Dev Tools console အနေနဲ့ intro လုပ်ခဲ့ပေမယ့် Kibana ရဲ့ core purpose ကတော့ visualization ဖြစ်ပါတယ်—Elasticsearch aggregation query တွေကို JSON response အဖြစ် manually parse ပြီး chart ဆွဲမယ့်အစား Kibana ရဲ့ "Lens"/"Visualize" UI က index pattern တစ်ခုကို point ချရုံနဲ့ bar chart, line chart, data table စတာတွေကို drag-and-drop ဖြင့် interactively ဆောက်နိုင်ပါတယ်—underlying aggregation query ကို Kibana ကိုယ်တိုင်က auto-generate ပေးပါတယ်။ Analytics dashboard တစ်ခုကို production-grade ဆောက်ချင်ရင် raw event data (ဥပမာ user ရဲ့ lesson-view event တစ်ခုစီ) ကို separate time-series index (Lesson 16 ရဲ့ ILM concept ကို ဒီနေရာမှာ apply လို့ရ) ထဲ သိမ်းသင့်ပြီး `tutorials` catalog index နဲ့ ရောစပ်ဖို့ မသင့်ပါ—analytics data ရဲ့ growth pattern (daily events) နှင့် catalog data ရဲ့ growth pattern (occasional edits) က လွန်စွာကွာခြားလို့ index/lifecycle strategy သီးခြားစီ လိုအပ်ပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Tutorial Platform ရဲ့ `lesson-views` event index (`{ tutorialId, tags, occurredAt }` documents, Lesson 16 style ILM policy ပါ) ကနေ "topic (tags) တစ်ခုစီအတွက် week တစ်ခုစီမှာ view count ဘယ်လောက်ရှိလဲ" ဆိုတဲ့ nested aggregation query ရေးမယ်—`terms` aggregation (`tags` ပေါ်) ထဲမှာ `date_histogram` (weekly interval) ကို nest ထည့်မယ်။ ဒီ query ကို Kibana Dev Tools ထဲမှာ prototype လုပ်ပြီးမှ Kibana Lens ထဲကို ပြောင်းပြီး "most-viewed topics this month" bar chart နှင့် "weekly completion trend" line chart ကို drag-and-drop ဖြင့် ဆောက်မယ်—dashboard တစ်ခုအဖြစ် pin ထားပြီး admin team ကို share ပေးမယ်။

အတူတူ စမ်းရေးကြည့်မယ်

http
GET /lesson-views/_search
{
  "size": 0,
  "aggs": {
    "by_topic": {
      "terms": { "field": "tags", "size": 10 },
      "aggs": {
        "by_week": {
          "date_histogram": { "field": "occurredAt", "calendar_interval": "week" }
        }
      }
    }
  }
}
You should see
Tag တစ်ခုစီအောက်မှာ week တစ်ခုစီအတွက် view count nested buckets ရမည်—Kibana Lens ထဲမှာ chart အဖြစ် ဆွဲနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

"difficulty level တစ်ခုစီအတွက် average views" ဆိုတဲ့ query တစ်ခုကို `terms` (difficulty) aggregation ထဲမှာ `avg` metric aggregation nest ထည့်ပြီး ရေးပါ—ရလဒ်ကို Kibana bar chart တစ်ခုအဖြစ် ဘယ်လို configure လုပ်မလဲ ရေးချပါ။

သတိလေးတစ်ချက်

High-volume analytics event data (daily user activity logs) ကို `tutorials` catalog index ထဲပဲ တွဲသိမ်းခြင်း—catalog index ရဲ့ size/growth pattern ကို analytics data ကနေ ဖျက်ဆီးပြီး search performance ကိုပါ ထိခိုက်နိုင်ပါတယ်။

Nested aggregation ထဲက outer `terms` aggregation ရဲ့ `size` parameter ကို default (10) အတိုင်း ချန်ထားခြင်း—topic count 10 ထက်များနေရင် bucket အချို့ silently ချန်ထားခံရနိုင်ပြီး chart ထဲ data မပြည့်စုံတော့ပါ။

Kibana Guide — Create a VisualizationElastic

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • High-volume analytics event data (daily user activity logs) ကို `tutorials` catalog index ထဲပဲ တွဲသိမ်းခြင်း—catalog index ရဲ့ size/growth pattern ကို analytics data ကနေ ဖျက်ဆီးပြီး search performance ကိုပါ ထိခိုက်နိုင်ပါတယ်။
  • Nested aggregation ထဲက outer `terms` aggregation ရဲ့ `size` parameter ကို default (10) အတိုင်း ချန်ထားခြင်း—topic count 10 ထက်များနေရင် bucket အချို့ silently ချန်ထားခံရနိုင်ပြီး chart ထဲ data မပြည့်စုံတော့ပါ။
  • နမူနာ query/mutation ကို production cluster ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test instance နှင့် recoverable data ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

"difficulty level တစ်ခုစီအတွက် average views" ဆိုတဲ့ query တစ်ခုကို `terms` (difficulty) aggregation ထဲမှာ `avg` metric aggregation nest ထည့်ပြီး ရေးပါ—ရလဒ်ကို Kibana bar chart တစ်ခုအဖြစ် ဘယ်လို configure လုပ်မလဲ ရေးချပါ။

You'll know it worked when: Tag တစ်ခုစီအောက်မှာ week တစ်ခုစီအတွက် view count nested buckets ရမည်—Kibana Lens ထဲမှာ chart အဖြစ် ဆွဲနိုင်မည်။

Project — Analytics Dashboard | Thuta Learning