ตรวจสอบแอปพลิเคชัน Apache Spark ด้วยการวิเคราะห์บันทึก Azure (ตัวอย่าง)
ส่วนขยาย emitter ของ Fabric Apache Spark คือไลบรารีที่ช่วยให้แอปพลิเคชัน Apache Spark สามารถปล่อยไฟล์บันทึก บันทึกเหตุการณ์ และเมตริกไปยังปลายทางหลายแห่ง รวมถึงการวิเคราะห์บันทึก Azure ที่เก็บข้อมูล Azure และฮับเหตุการณ์ Azure
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีการกําหนดค่าและปล่อยบันทึกและเมตริกของ Spark ไปยัง Log analytics ใน Fabric เมื่อกําหนดค่าแล้ว คุณสามารถรวบรวมและวิเคราะห์เมตริกแอปพลิเคชัน Apache Spark และบันทึกในพื้นที่ทํางานการวิเคราะห์บันทึกของคุณ
กําหนดค่าข้อมูลพื้นที่ทํางาน
ทําตามขั้นตอนเหล่านี้เพื่อกําหนดค่าข้อมูลที่จําเป็นใน Fabric
ขั้นตอนที่ 1: สร้างพื้นที่ทํางานการวิเคราะห์รายการบันทึก
ดูหนึ่งในทรัพยากรต่อไปนี้เพื่อสร้างพื้นที่ทํางานนี้:
- สร้างพื้นที่ทํางานในพอร์ทัล Azure
- สร้างพื้นที่ทํางานด้วย Azure CLI
- สร้างและกําหนดค่าพื้นที่ทํางานใน Azure Monitor โดยใช้ PowerShell
ขั้นตอนที่ 2: สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ด้วยการกําหนดค่า Apache Spark
ในการกําหนดค่า Spark ให้สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric และเลือกหนึ่งในตัวเลือกต่อไปนี้:
ตัวเลือกที่ 1: กําหนดค่าด้วย ID พื้นที่ทํางาน Log Analytics และคีย์
สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ใน Fabric
เพิ่มคุณสมบัติ 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.
บันทึกและเผยแพร่การเปลี่ยนแปลง
ตัวเลือกที่ 2: กําหนดค่าด้วย Azure Key Vault
หมายเหตุ
ปัญหาที่ทราบแล้ว: ไม่สามารถเริ่มเซสชันโดยใช้ตัวเลือกที่ 2 ในการเตรียมใช้งาน ในปัจจุบัน การจัดเก็บข้อมูลลับในชุดเก็บคีย์จะป้องกันไม่ให้เซสชัน Spark เริ่มทํางาน โปรดจัดลําดับความสําคัญของการกําหนดค่าโดยใช้วิธีการที่ระบุไว้ในตัวเลือกที่ 1
คุณจําเป็นต้องให้สิทธิ์ในการอ่านข้อมูลลับแก่ผู้ใช้ที่จะส่งแอปพลิเคชัน Apache Spark สําหรับข้อมูลเพิ่มเติม ดู ให้การเข้าถึงคีย์ชุดเก็บคีย์ ใบรับรอง และข้อมูลลับด้วยการควบคุมการเข้าถึงตามบทบาทของ Azure
ในการกําหนดค่า Azure Key Vault เพื่อจัดเก็บคีย์พื้นที่ทํางาน ให้ทําตามขั้นตอนเหล่านี้:
ไปที่ Key Vault ของคุณในพอร์ทัล Azure
บนหน้าการตั้งค่าสําหรับชุดเก็บคีย์ เลือกข้อมูลลับ จากนั้นสร้าง/นําเข้า
บนหน้าจอ สร้างข้อมูลลับ ให้ใส่ค่าต่อไปนี้:
- ชื่อ: ป้อนชื่อสําหรับข้อมูลลับ สําหรับค่าเริ่มต้น ให้ป้อน
SparkLogAnalyticsSecret
- ค่า: ป้อน
<LOG_ANALYTICS_WORKSPACE_KEY>
สําหรับข้อมูลลับ - ปล่อยค่าอื่นๆ ไว้เป็นค่าเริ่มต้น จากนั้น เลือก สร้าง
- ชื่อ: ป้อนชื่อสําหรับข้อมูลลับ สําหรับค่าเริ่มต้น ให้ป้อน
สร้างสิ่งประดิษฐ์สภาพแวดล้อม Fabric ใน Fabric
เพิ่มคุณสมบัติ 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 ที่พร้อมใช้งาน
บันทึกและเผยแพร่การเปลี่ยนแปลง
ขั้นตอนที่ 3: แนบสิ่งประดิษฐ์สภาพแวดล้อมกับสมุดบันทึกหรือข้อกําหนดงานของ Spark หรือตั้งค่าเป็นค่าเริ่มต้นของพื้นที่ทํางาน
เมื่อต้องการแนบสภาพแวดล้อมลงในสมุดบันทึกหรือข้อกําหนดงาน Spark:
- นําทางไปยังสมุดบันทึกหรือข้อกําหนดงาน Spark ของคุณใน Fabric
- เลือก เมนู สภาพแวดล้อม บนแท็บ หน้าแรก และเลือกสภาพแวดล้อมที่กําหนดค่าไว้
- การกําหนดค่าจะถูกนําไปใช้หลังจากเริ่มต้น เซสชัน Spark
วิธีตั้งค่าสภาพแวดล้อมเป็นค่าเริ่มต้นของพื้นที่ทํางาน:
- นําทางไปยังการตั้งค่าพื้นที่ทํางานใน Fabric
- ค้นหาการตั้งค่า Spark ในการตั้งค่าพื้นที่ทํางานของคุณ (การตั้งค่าพื้นที่ทํางาน -> วิศวกรข้อมูล/วิทยาศาสตร์ -> การตั้งค่า Spark)
- เลือกแท็บ สภาพแวดล้อม และเลือกสภาพแวดล้อมที่มีการกําหนดค่าคุณสมบัติ Spark การวินิจฉัย แล้วคลิก บันทึก
หมายเหตุ
เฉพาะผู้ดูแลระบบพื้นที่ทํางานเท่านั้นที่สามารถจัดการการกําหนดค่าได้ ค่าเหล่านี้จะนําไปใช้กับสมุดบันทึกและข้อกําหนดงาน Spark ที่แนบมากับการตั้งค่าพื้นที่ทํางาน สําหรับรายละเอียดเพิ่มเติม ดู การตั้งค่าพื้นที่ทํางานของ Fabric
ส่งแอปพลิเคชัน Apache Spark และดูบันทึกและเมตริก
หากต้องการส่งแอปพลิเคชัน Apache Spark:
ส่งแอปพลิเคชัน Apache Spark พร้อมสภาพแวดล้อมที่เกี่ยวข้องซึ่งได้รับการกําหนดค่าในขั้นตอนก่อนหน้า คุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อทําเช่นนั้น:
- เรียกใช้สมุดบันทึกใน Fabric
- ส่งงานชุด Apache Spark ผ่านข้อกําหนดงาน Apache Spark
- เรียกใช้กิจกรรม Spark ของคุณในไปป์ไลน์ของคุณ
ไปยังพื้นที่ทํางาน 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 เป็นแหล่งข้อมูล