Collect Google Analytics data in real-time with Microsoft Azure – Part 3

ติดตามบทความก่อน:

Collect Google Analytics data in real-time with Microsoft Azure – Part 1

Collect Google Analytics data in real-time with Microsoft Azure  – Part 2

ใน บทความส่วนที่ 2 เราได้สรุปรายละเอียดการวิธีการกำนดค่าใน Google Tag Manager และ Azure Event Hub เพื่อรับข้อมูลเหตุการณ์ที่เกิดขึ้นจาก Website โดยแน่นอนที่จะสามารถใช้ Azure Functions สำหรับโซลูชั่นแบบ “Low code”

ในบทความนี้เราพาลงรายละเอียดทีละขั้นตอนในการ Process และ Transform ข้อมูลโดยใช้ Azure Stream Analytic และส่งออกข้อมูลนั้นไปยังปลายทางสำหรับการรายงานข้อมูล

โดยสรุปมี 4 ขั้นตอนหลัก::

  1. กำหนดค่า Azure Event Hub
  2. การสร้างและกำหนด Secure Access Policy
  3. การสร้างและกำหนด a Stream Analytics Job.
  4. การเรียกใช้ Stream Analytics Job

บทความนี้มีสมมุติฐานว่าคุณมีฐานข้อมูล Azure SQL อยู่แล้ว และมีสิทธิ์เพียงพอสำหรับการเข้าถึงการใช้งานต่างๆที่จำเป็น

1. กำหนดค่า Azure Event Hub

เพื่อให้ทรัพยากรอื่นใช้ข้อมูลจาก Entity ของ Azure Event Hub ที่คุณได้ตั้งค่าแล้วจากบทความส่วนที่ 2 เราจะต้องเพิ่ม Consumer Group และปรับนโยบายการเข้าถึง (Secure Access Policy) เพื่ออนุญาตให้ Stream Analytics สามารถเข้าถึงในรูปแบบ “Listen” ไปยัง Event Hub

ใน Azure Portal ไปยัง Event Hubs > Event Hub ที่ต้องการใช้งาน > Event Hubs (ใต้หัวข้อ “Entities”) และ เลือก event hub entity ที่ต้องการใช้งาน

ภายใต้ตัวเลือก “Entities” เลือก “Consumer Groups” คลิกที่ “+ Consumer group” และกำหนดชื่อที่เหมาะสม

1. Configure Azure Event Hub - Consumer Group.png

Then enter and appropriate name.

2. Configure Azure Event Hub - Consumer Group Name.png

หมายเหตุ​​​​​​: แม้ว่าจะเป็นไปได้ที่จะใช้ consumer group เป็น “$Default” แต่แนะนำให้สร้างกลุ่มแยกต่างหาก หากต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับ Consumer groups โปรดไปที่เอกสารประกอบของ Microsoft ใน หัวข้อนี้ Consumer groups.

เพื่อให้ทรัพยากรสามารถเข้าถึง Event Hub ได้อย่างปลอดภัย เราต้องตั้งค่า Shared access policy โดยคลิกที่ ” Shared access policies” ภายใต้ ” Settings ” คลิก “+ Add”

4. Configure Azure Event Hub - Shared access policies.png

จากนั้นกำหนดชื่อนโยบาย เช่น “Stream-analytics” และเลือกตัวเลือก “Listen”

3. Configure Azure Event Hub - Add SAS policy.png

เมื่อสร้างแล้ว คุณอาจต้องรีเฟรชหน้าจอก่อนจึงจะเห็นนโยบาย (policy) ใหม่ คลิกที่นโยบายที่สร้างขึ้นใหม่และคัดลอก Primary key value ซึ่งจำต่อการกำหนดค่า Stream Analytics Job เราอยากจะแนะนำให้คุณเก็บไว้ในที่ปลอดภัย เช่น Azure Key Vault.

5. Configure Azure Event Hub - Primary key.png

2. การสร้างและกำหนด Secure Access Policy

ไปที่โฮมเพจของ Azure portal และค้นหา Stream Analytics หรือ เลือก “Create a resource > Analytics > Stream Analytics job”  แล้วคลิก “Create”

เลือก Subscription, Resource Group ที่ต้องการใช้งาน ระบุชื่อที่เหมาะสมสำหรับ resource ใหม่ที่จะถูกสร้าง

เลือกภูมิภาคที่ต้องการ (Region) (ควรเป็นภูมิภาคเดียวกับ Event Hub ของคุณ) เลือก “Cloud” สำหรับ Hosting environment และกำหนด 1 หน่วยการสตรีม (Streaming) สำหรับปริมาณที่มากขึ้นและการแปลง/การค้นหาที่ซับซ้อนมากขึ้น คุณอาจต้องเลือกหน่วยการสตรีมจำนวนมากขึ้น อย่างไรก็ตาม ในตัวอย่างนี้ เราต้องการเพียง 1 เท่านั้น ซึ่งจะทำให้มีต้นทุนทรัพยากรต่ำที่สุด

6. Create a Stream Analytics Job.png

หมายเหตุ: ขอแนะนำให้คุณปฏิบัติตามมาตรฐานรูปแบบการตั้งชื่อของ Microsoft มีคำแนะนำสำหรับเรื่องนี้ หากคุณสนใจรายละเอียดสามารถดูได้ที่นี่ Define your naming convention

เมื่อเสร็จแล้ว คลิก Review + Create ทรัพยากรของคุณจะได้รับการตรวจสอบซึ่งจะใช้เวลาเพียงไม่กี่วินาที จากนั้นคลิก ” Create” หลังจากนั้นสักครู่ คุณจะได้รับแจ้งการปรับการใช้ทรัพยากรของคุณเสร็จสมบูรณ์แล้ว คลิก ” Go to resource ” เพื่อดำเนินการตั้งค่าต่อในขั้นตอนถัดไป

3. การสร้างและกำหนด a Stream Analytics Job​​​

แนวคิดหลักสามประการของงาน Stream Analytics คือ Input แหล่งข้อมูลใดที่จะถูกนำมาใช้, a query, สถานที่หรือวิธีการที่ข้อมูลจะถูกเปลี่ยนแปลง (ถ้าจำเป็น) และ Output สถานที่ข้อมูลจะถูกส่งไป

Input

ภายใต้ “Job topology”, เลือก “Inputs” and คลิกที่ “+ Add stream input” หลังจากนั้น เลือก “Event Hub”

7. Add stream input.png

บนหน้าต่างใหม่ให้กำหนดชื่อที่เหมาะสม จากนั้นเลือกชื่อ Event Hub ที่มีอยู่และ consumer group ที่เราได้สร้างไว้ก่อนหน้านี้

8. Event hub input - 1.png

สำหรับการตรวจสอบสิทธิ์ (Authentication mode) ในกรณีนี้ เราจะใช้ string ในการระบุการเชื่อมต่อ (การใช้งานการจัดการ identity อยู่นอกขอบเขตของบทความนี้). เลือก “use existing” และ Event hub policy ที่ได้สร้างไว้จากขั้นตอนที่ 1 หลังจากนั้นวาง Primary key ของที่ได้คัดลอกไว้ก่อนหน้านี้ลงไป

8. Event hub input - 2.png

สำหรับ Partition key เราจะปล่อยไว้สำหรับตอนนี้ เนื่องจากยังไม่จำเป็นต่อการใช้งานในบทความนี้ แต่สิ่งนี้จะมีประโยชน์ด้านประสิทธิภาพ

ปล่อยให้ตัวเลือกที่เหลือเป็นค่าเริ่มต้น จากนั้นคลิก “Save”

Query

ส่วนนี้จะเป็นส่วนที่เวทมนตร์เริ่มทำงาน หากคุณได้สำรวจข้อมูลที่ส่งไปยัง Even Hub จาก Google Tag Manager แล้ว คุณจะรู้ว่าข้อมูลที่ได้รับเป็น long string ของ key-value pairs

หากคุณยังไม่ได้สำรวจข้อมูล Stream Analytics ช่วยให้คุณดูตัวอย่างข้อมูลได้ โดยคลิกที่ตัวเลือก “Query” ใต้ ” Job topology” จากนั้นคลิกที่ปุ่ม “Test query”

9. Query - Test Query.png

หาก Input ได้รับการกำหนดค่าอย่างถูกต้อง สิ่งนี้ควรส่งไปบันทึกที่ Event Hub ของคุณ ตามตัวอย่างด้านล่าง:

10. Query - Test output.png

โดยปกติ ด้วย JSON มาตรฐาน เราสามารถใช้ฟังก์ชัน SQL ของ Stream analytics เพื่อแยกวิเคราะห์สิ่งนี้ได้ ขออภัยในกรณีนี้ เราจำเป็นต้องเพิ่มฟังก์ชันที่กำหนดเองเพื่อแยกวิเคราะ String เพื่อให้ง่ายต่อการสืบค้นและใช้งาน Downstream นี่เป็นอีกหนึ่งคุณสมบัติที่ยอดเยี่ยมของ Stream Analytics

ในตัวอย่างนี้ เราจะแสดงเฉพาะข้อมูลพื้นฐานที่สุดสำหรับการรายงานดาวน์สตรีมเท่านั้น เช่น:

  • Hit Type – ประเภทของการเข้าชม
  • Document Location – หน้าที่เปิดดู
  • Document Referrer – URI ของหน้าที่ผู้ใช้คลิกผ่าน
  • Document Title – ชื่อ Title ของหน้าที่ดู
  • ClientId – รหัสลูกค้า
  • SessionId – หรัสเซสชั่น

 Although this involves some additional more complex functions and is not in the scope of this article. In addition, depending on what additional parameters you have set up in GTM, you can also gather eCommerce purchase transactions.

เป็นไปได้ที่จะแยกวิเคราะห์ข้อมูลที่น่าสนใจอื่นๆ เช่น User Agent เพื่อทำความเข้าใจว่าผู้ใช้ของคุณใช้อุปกรณ์ใดในการเรียกดูเว็บไซต์ของคุณ และพารามิเตอร์ UTM ซึ่งคุณสามารถใช้เพื่อทำความเข้าใจว่าการเข้าชมของคุณมาจากแหล่งใด เช่น Google Ads แบบชำระเงิน การเข้าชมแบบออร์แกนิกของ Google หรือ Direct ฯลฯ แต่สิ่งนี้จะเกี่ยวข้องกับฟังก์ชันที่ซับซ้อนกว่าและไม่อยู่ในขอบเขตของบทความนี้

นอกจากนี้ คุณยังรวบรวมธุรกรรมการซื้อจาก eCommerce ได้ ทั้งนี้ขึ้นอยู่กับพารามิเตอร์เพิ่มเติมที่คุณตั้งค่าไว้ใน GTM

ในการสร้างฟังก์ชัน ให้ไปที่ตัวเลือก “Functions” ใต้ “Job topology” จากนั้นเพิ่ม Javascript UDF ใหม่

11. Query - Javascript UDF.png

ตั้งชื่อฟังก์ชัน “splitstring” และเลือก “record” เป็น Output type

12. Query - Javascript UDF - splitstring.png

จากนั้นคัดลอกและวางโค้ดด้านล่างแล้วคลิก “Save”

?

1234567891011121314151617181920212223242526272829303132333435function main(queryString) {    var dictionary = {};    // remove the '?' from the beginning of the    // if it exists    if(queryString.indexOf('?') === 0) {        queryString = queryString.substr(1);    }    // Step 1: separate out each key/value pair    var parts = queryString.split('&');    for(var i = 0; i < parts.length; i++) {        var p = parts[i];        // Step 2: Split Key/Value pair        var keyValuePair = p.split('=');        // Step 3: Add Key/Value pair to Dictionary object        var key = keyValuePair[0];        var value = keyValuePair[1];        try{            value = decodeURIComponent(value);        }        catch(ex) {            //do nothing        }        finally{            value = value.replace(/\+/g, ' ');            dictionary[key] = value;        }    }    // Step 4: Return Dictionary Object    return(dictionary);}

เมื่อคุณสร้างฟังก์ชันแล้ว คุณสามารถนำทางกลับไปที่หน้าต่าง Query และเริ่มสร้าง Query ของคุณเพื่อแปลงข้อมูล input payload หากคุณคุ้นเคยกับ SQL เราจะใช้ CTE แบบง่ายในการดำเนินการนี้ ก่อนอื่นเลือก EventEnqueuedUtcTime และเรียกใช้ UDF ที่สร้างขึ้นใหม่ จากนั้นเลือก individual attributes output จาก Split string function

?

123456789101112131415WITHsource AS(SELECTEventEnqueuedUtcTime asEventTime,      udf.splitstring(payload)  aspayload        FROM[YourInputAlias])SELECTEventTime ASTimestampUTC,        payload.t ASHitType,        payload.dl ASDocumentLocation,        payload.dr ASDocumentReferrer,        payload.dt ASDocumentTitle,        payload.cid ASclientId,        payload.cd3 ASsessionIdINTO[YourOutputAlias]FROMsource

Output

Stream Analytics มี Outputs ให้เลือกมากมาย สำหรับรายการทั้งหมด โปรดดูเอกสารประกอบของ Microsoft ได้ที่นี่ Outputs from Azure Stream Analytics

ในตัวอย่างนี้ เราจะเขียนไปยังฐานข้อมูล Azure SQL อย่างไรก็ตาม เป็นไปได้ที่จะส่งออกโดยตรงไปยังชุดข้อมูล Power BI สำหรับรายงาน/แดชบอร์ด เพื่อแสดงผลลัพธ์แบบเรียลไทม์ (แม้ว่าจะมีข้อจำกัดบางประการ) Stream Analytics ยังมีความสามารถในการมีการส่ง Outputs ที่หลากหลายจาก Job เดียวกัน ดังนั้นหากคุณต้องการเพิ่ม Outputs อื่นๆเพิ่มเติมในอนาคต ก็สามารถทำได้อย่างง่ายดาย ดังนี้

หากต้องการเพิ่ม Outputs ให้คลิกที่ตัวเลือก “Outputs” ใต้ ” Job tolopolgy ” แล้วคลิก “+Add” จากนั้นเลือก SQL Database.

13. Output - SQL Database.png

ระบุชื่อ Outputs ที่เหมาะสมแล้ว ระบุข้อมูลที่จำเป็นทั้งหมดสำหรับฐานข้อมูลที่ต้องการ คุณสามารถเลือกวิธีการยืนยันตัวตนเพื่อเชื่อมต่อกับ SQL ได้หลายวิธี โดยเลือกวิธีที่เหมาะสมกับนโยบายความปลอดภัยที่บริษัทได้กำหนดไว้

14. Output - SQL Database config 1.png

Then either select an existing table or provide a new name for a table which will be automatically created in your SQL Database. You can leave the “Max batch count” as the default for now:

จากนั้นเลือกตารางที่มีอยู่หรือกำหนดชื่อใหม่สำหรับตารางซึ่งจะถูกสร้างขึ้นโดยอัตโนมัติใน SQL Database ของคุณ โดยสามารถปล่อยให้ “”Max batch count” เป็นค่าเริ่มต้นสำหรับตอนนี้:

14. Output - SQL Database config 2.png

ขั้นตอนสุดท้ายคืออัพเดตการสืบค้น SQL โดยแทนที่ “[YourOutputAlias]” ด้วยชื่อ Outputs ใหม่ที่ได้สร้าง อย่าลืมทดสอบ Query ก่อนดำเนินการขั้นตอนต่อไป

4. การเรียกใช้ Stream Analytics job

หลังจากทดสอบ Stream analytics query สำเร็จแล้ว และตรวจสอบว่าการเชื่อมต่อกับฐานข้อมูล SQL สามารถใช้งานได้แล้ว คุณสามารถกลับไปที่ Overview ของ Job และคลิก “Start”

15. Run your stream analytics job.png

ถ้าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้อง คุณควรจะสามารถ Query ตารางใน SQL เพื่อตรวจสอบว่ามีข้อมูลไหลผ่านจริง

หากคุณไม่เห็นข้อมูลใดๆ หรือพบว่า Job ทำงานล้มเหลว ลองตรวจสอบ Activity log เพื่อระบุและแก้ไขปัญหา

บทสรุป

อย่างที่คุณเห็น แม้ว่าจะมีอุปสรรคบ้าง แต่คุณสามารถจับภาพการเข้าชมของคุณเว็บแบบเรียลไทม์ได้อย่างง่ายดายโดยไม่ต้องเสียค่าใช้จ่ายมหาศาลและหลีกเลียงการใช้เวลานานในการพัฒนา จากนั้นสามารถเริ่มใช้ข้อมูลที่จัดเก็บไว้ใน SQL database ของคุณผ่าน Power BI หรือ เครื่องมืออื่นๆ มา Visualization ข้อมูลที่คุณสนใจ

ตัวอย่างนี้มีไว้สำหรับ “การพิสูจน์แนวคิด” เท่านั้น อย่างไรก็ตาม สำหรับการใช้งานจริง คุณอาจต้องการพิจารณาใช้ Visual Studio และ Azure DevOps เพื่อควบคุมเวอร์ชันและจัดการการปรับใช้สำหรับแยกสภาพแวดล้อมที่แตกต่างกันในการใช้งาน (Dev, Test, Prod)

นอกจากนี้ คุณอาจต้องเพิ่มกระบวนการเพิ่มเติมเพื่อจัดการการโหลดข้อมูลที่เพิ่มขึ้นโดยใช้ SQL Stored Procedure และ/หรือ Power BI Incremental Refresh (หากใช้ PBI Premium หรือ PBI Premium Per User) ทั้งนี้ขึ้นอยู่กับปริมาณข้อมูลและเครื่องมือสร้างรายงานที่ใช้

หากคุณต้องการให้ BizOne ช่วยเหลือในการใช้งานโซลูชันประเภทนี้ โปรดติดต่อเรา!

Share this article on social media!