แชร์ผ่าน


ตรวจสอบแอปพลิเคชัน Apache Spark ด้วยการวิเคราะห์บันทึก Azure (ตัวอย่าง)

ส่วนขยาย emitter ของ Fabric Apache Spark คือไลบรารีที่ช่วยให้แอปพลิเคชัน Apache Spark สามารถปล่อยไฟล์บันทึก บันทึกเหตุการณ์ และเมตริกไปยังปลายทางหลายแห่ง รวมถึงการวิเคราะห์บันทึก Azure ที่เก็บข้อมูล Azure และฮับเหตุการณ์ Azure

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการกําหนดค่าและปล่อยบันทึกและเมตริกของ Spark ไปยัง Log analytics ใน Fabric เมื่อกําหนดค่าแล้ว คุณสามารถรวบรวมและวิเคราะห์เมตริกแอปพลิเคชัน Apache Spark และบันทึกในพื้นที่ทํางานการวิเคราะห์บันทึกของคุณ

กําหนดค่าข้อมูลพื้นที่ทํางาน

ทําตามขั้นตอนเหล่านี้เพื่อกําหนดค่าข้อมูลที่จําเป็นใน Fabric

ขั้นตอนที่ 1: สร้างพื้นที่ทํางานการวิเคราะห์รายการบันทึก

ดูหนึ่งในทรัพยากรต่อไปนี้เพื่อสร้างพื้นที่ทํางานนี้:

ขั้นตอนที่ 2: สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ด้วยการกําหนดค่า Apache Spark

ในการกําหนดค่า Spark ให้สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric และเลือกหนึ่งในตัวเลือกต่อไปนี้:

ตัวเลือกที่ 1: กําหนดค่าด้วย ID พื้นที่ทํางาน Log Analytics และคีย์

  1. สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ใน Fabric

  2. เพิ่มคุณสมบัติ Spark ต่อไปนี้ด้วยค่าที่เหมาะสมลงในสิ่งประดิษฐ์สภาพแวดล้อม หรือเลือก เพิ่มจาก.yml ในริบบอนเพื่อดาวน์โหลดไฟล์ yaml ตัวอย่าง ซึ่งมีคุณสมบัติที่จําเป็นอยู่แล้ว

    • <LOG_ANALYTICS_WORKSPACE_ID>: ID พื้นที่ทํางานการวิเคราะห์รายการบันทึก
    • <LOG_ANALYTICS_WORKSPACE_KEY>: คีย์การวิเคราะห์รายการบันทึก หากต้องการค้นหาสิ่งนี้ ในพอร์ทัล Azure ให้ไปที่ คีย์หลักของตัวแทน>พื้นที่ทํางาน>Azure Log Analytics
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    อีกวิธีหนึ่งคือเมื่อต้องใช้การกําหนดค่าเดียวกันกับ Azure Synapse ให้ใช้คุณสมบัติต่อไปนี้ หรือเลือก เพิ่มจาก.yml ในริบบอนเพื่อดาวน์โหลด ไฟล์ yaml ตัวอย่าง

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    
  3. บันทึกและเผยแพร่การเปลี่ยนแปลง

ตัวเลือกที่ 2: กําหนดค่าด้วย Azure Key Vault

หมายเหตุ

ปัญหาที่ทราบแล้ว: ไม่สามารถเริ่มเซสชันโดยใช้ตัวเลือกที่ 2 ในการเตรียมใช้งาน ในปัจจุบัน การจัดเก็บข้อมูลลับในชุดเก็บคีย์จะป้องกันไม่ให้เซสชัน Spark เริ่มทํางาน โปรดจัดลําดับความสําคัญของการกําหนดค่าโดยใช้วิธีการที่ระบุไว้ในตัวเลือกที่ 1

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

ในการกําหนดค่า Azure Key Vault เพื่อจัดเก็บคีย์พื้นที่ทํางาน ให้ทําตามขั้นตอนเหล่านี้:

  1. ไปที่ Key Vault ของคุณในพอร์ทัล Azure

  2. บนหน้าการตั้งค่าสําหรับชุดเก็บคีย์ เลือกข้อมูลลับ จากนั้นสร้าง/นําเข้า

  3. บนหน้าจอ สร้างข้อมูลลับ ให้ใส่ค่าต่อไปนี้:

    • ชื่อ: ป้อนชื่อสําหรับข้อมูลลับ สําหรับค่าเริ่มต้น ให้ป้อนSparkLogAnalyticsSecret
    • ค่า: ป้อน <LOG_ANALYTICS_WORKSPACE_KEY> สําหรับข้อมูลลับ
    • ปล่อยค่าอื่นๆ ไว้เป็นค่าเริ่มต้น จากนั้น เลือก สร้าง
  4. สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ใน Fabric

  5. เพิ่มคุณสมบัติ Spark ต่อไปนี้ด้วยค่าที่สอดคล้องกันกับวัตถุสภาพแวดล้อม หรือเลือก เพิ่มจาก.yml บนริบบอน ในวัตถุ สภาพแวดล้อม เพื่อดาวน์โหลดไฟล์ yaml ตัวอย่างซึ่งรวมถึงคุณสมบัติ Spark ต่อไปนี้

    • <LOG_ANALYTICS_WORKSPACE_ID>: ID พื้นที่ทํางาน Log Analytics
    • <AZURE_KEY_VAULT_NAME>: ชื่อชุดเก็บคีย์ที่คุณกําหนดค่า
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (ไม่บังคับ): ชื่อลับใน Key Vault สําหรับคีย์พื้นที่ทํางาน ค่าเริ่มต้นคือSparkLogAnalyticsSecret
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    อีกวิธีหนึ่งคือเมื่อต้องใช้การกําหนดค่าเดียวกันกับ Azure Synapse ให้ใช้คุณสมบัติต่อไปนี้ หรือเลือกเพิ่มจาก.yml ใน ribbon เพื่อดาวน์โหลด ไฟล์ yaml ตัวอย่าง

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME>
    spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    หมายเหตุ

    คุณยังสามารถจัดเก็บ ID พื้นที่ทํางานใน Key Vault ได้ ตั้งชื่อข้อมูลลับเป็น SparkLogAnalyticsWorkspaceIdหรือใช้การกําหนดค่า spark.synapse.logAnalytics.keyVault.key.workspaceId เพื่อระบุชื่อลับของ ID พื้นที่ทํางาน

    สําหรับรายการของการกําหนดค่า Apache Spark ให้ดู การกําหนดค่า Apache Spark ที่พร้อมใช้งาน

  6. บันทึกและเผยแพร่การเปลี่ยนแปลง

ขั้นตอนที่ 3: แนบสิ่งประดิษฐ์สภาพแวดล้อมกับสมุดบันทึกหรือข้อกําหนดงานของ Spark หรือตั้งค่าเป็นค่าเริ่มต้นของพื้นที่ทํางาน

เมื่อต้องการแนบสภาพแวดล้อมลงในสมุดบันทึกหรือข้อกําหนดงาน Spark:

  1. นําทางไปยังสมุดบันทึกหรือข้อกําหนดงาน Spark ของคุณใน Fabric
  2. เลือก เมนู สภาพแวดล้อม บนแท็บ หน้าแรก และเลือกสภาพแวดล้อมที่กําหนดค่าไว้
  3. การกําหนดค่าจะถูกนําไปใช้หลังจากเริ่มต้น เซสชัน Spark

วิธีตั้งค่าสภาพแวดล้อมเป็นค่าเริ่มต้นของพื้นที่ทํางาน:

  1. นําทางไปยังการตั้งค่าพื้นที่ทํางานใน Fabric
  2. ค้นหาการตั้งค่า Spark ในการตั้งค่าพื้นที่ทํางานของคุณ (การตั้งค่าพื้นที่ทํางาน -> วิศวกรข้อมูล/วิทยาศาสตร์ -> การตั้งค่า Spark)
  3. เลือกแท็บ สภาพแวดล้อม และเลือกสภาพแวดล้อมที่มีการกําหนดค่าคุณสมบัติ Spark การวินิจฉัย แล้วคลิก บันทึก

หมายเหตุ

เฉพาะผู้ดูแลระบบพื้นที่ทํางานเท่านั้นที่สามารถจัดการการกําหนดค่าได้ ค่าเหล่านี้จะนําไปใช้กับสมุดบันทึกและข้อกําหนดงาน Spark ที่แนบมากับการตั้งค่าพื้นที่ทํางาน สําหรับรายละเอียดเพิ่มเติม ดู การตั้งค่าพื้นที่ทํางานของ Fabric

ส่งแอปพลิเคชัน Apache Spark และดูบันทึกและเมตริก

หากต้องการส่งแอปพลิเคชัน Apache Spark:

  1. ส่งแอปพลิเคชัน Apache Spark พร้อมสภาพแวดล้อมที่เกี่ยวข้องซึ่งได้รับการกําหนดค่าในขั้นตอนก่อนหน้า คุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อทําเช่นนั้น:

    • เรียกใช้สมุดบันทึกใน Fabric
    • ส่งงานชุด Apache Spark ผ่านข้อกําหนดงาน Apache Spark
    • เรียกใช้กิจกรรม Spark ของคุณในไปป์ไลน์ของคุณ
  2. ไปยังพื้นที่ทํางาน Log Analytics ที่ระบุ จากนั้นดูเมตริกและบันทึกของแอปพลิเคชันเมื่อแอปพลิเคชัน Apache Spark เริ่มต้นทํางาน

เขียนบันทึกแอปพลิเคชันแบบกําหนดเอง

คุณสามารถใช้ไลบรารี Apache Log4j เพื่อเขียนบันทึกแบบกําหนดเองได้ นี่คือตัวอย่างสําหรับ Scala และ PySpark:

ตัวอย่างสเกลา:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

ตัวอย่าง PySpark:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

สอบถามข้อมูลด้วย Kusto

เมื่อต้องการคิวรีเหตุการณ์ Apache Spark:

SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

เมื่อต้องการคิวรีโปรแกรมควบคุมแอปพลิเคชัน Spark และบันทึกตัวดําเนินการ:

SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

เมื่อต้องการคิวรี Apache Spark metrics:

SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

ขีดจํากัดของข้อมูล

Fabric ส่งข้อมูลบันทึกไปยัง Azure Monitor โดยใช้ HTTP Data Collector API ข้อมูลที่โพสต์ไปยัง Azure Monitor Data collection API อยู่ภายใต้ข้อจํากัดบางประการ:

  • สูงสุด 30 MB ต่อโพสต์ไปยัง Azure Monitor Data Collector API นี่คือขีดจํากัดขนาดสําหรับโพสต์เดียว ถ้าข้อมูลจากโพสต์เดียวเกิน 30 MB คุณควรแยกข้อมูลออกเป็นกลุ่มขนาดเล็กลงและส่งพร้อมกัน
  • สูงสุด 32 KB สําหรับค่าของเขตข้อมูล หากค่าเขตข้อมูลมากกว่า 32 KB ข้อมูลจะถูกตัดทอน
  • แนะนําสูงสุด 50 เขตข้อมูลสําหรับชนิดที่กําหนด นี่คือขีดจํากัดที่ใช้ได้จริงจากมุมมองการใช้งานและประสบการณ์การค้นหา
  • ตารางในพื้นที่ทํางาน Log Analytics รองรับสูงสุด 500 คอลัมน์เท่านั้น
  • มีอักขระสูงสุด 45 ตัวสําหรับชื่อคอลัมน์

สร้างและจัดการการแจ้งเตือน

ผู้ใช้สามารถคิวรีเพื่อประเมินเมตริกและบันทึกที่ความถี่ที่กําหนดไว้ และดําเนินการการแจ้งเตือนตามผลลัพธ์ สําหรับข้อมูลเพิ่มเติม ดู สร้าง ดู และจัดการการแจ้งเตือนบันทึกโดยใช้ Azure Monitor

พื้นที่ทํางานผ้าที่มีเครือข่ายเสมือนที่มีการจัดการ

ขณะนี้ Azure Log Analytics ไม่สามารถเลือกเป็นปลายทางสําหรับบันทึกของ Spark และการปล่อยเมทริกซ์ในเครือข่ายเสมือนที่มีการจัดการได้ เนื่องจากจุดสิ้นสุดส่วนตัวที่มีการจัดการไม่สนับสนุน Log Analytics เป็นแหล่งข้อมูล

ขั้นตอนถัดไป