Spring Boot Actuator ให้การจัดการการพึ่งพาและการกำหนดค่าอัตโนมัติสำหรับไมโครมิเตอร์ซึ่งให้บริการด้านหน้าที่สะดวกกว่าระบบการตรวจสอบที่แตกต่างกันมากมาย หนึ่งในนั้นคือ opentelemetry
นักพัฒนา Spring Boot สามารถเปิดใช้งานแอพพลิเคชั่นของพวกเขาในการส่งออกตัวชี้วัดผ่านโปรโตคอล OTLP ไปยังแบ็กเอนด์ OpentElemetry โดยการเพิ่มสปริงแอคชูเอเตอร์และการพึ่งพา opentelemetry เฉพาะจากไมโครมิเตอร์ไปยังโครงการของพวกเขา
dependencies {
implementation ' org.springframework.boot:spring-boot-starter-actuator '
runtimeOnly ' io.micrometer:micrometer-registry-otlp '
.. .
}
ผู้ส่งออกที่จัดทำโดยไมโครมิเตอร์รีจิสทรี OTLP เป็นผู้ส่งออก HTTP และสามารถกำหนดค่าผ่านคุณสมบัติได้ด้วยการกำหนดค่าอัตโนมัติสำหรับ opentelemetry
management :
otlp :
metrics :
export :
url : http://localhost:4318/v1/metrics
step : 5s
OpentElemetry รองรับคู่คีย์/ค่าเพิ่มเติม (เรียกว่า resource attributes
) ที่จะรวมอยู่ในข้อมูล telemetry Spring Boot Actuator ให้การกำหนดค่าอัตโนมัติสำหรับผู้ที่และทำให้สามารถเพิ่มแอตทริบิวต์ทรัพยากรใหม่ผ่านคุณสมบัติ
management :
opentelemetry :
resource-attributes :
cluster : local
" service.name " : ${spring.application.name}
ฉันสร้างแอปพลิเคชั่นตัวอย่างเพื่อแสดงการตั้งค่านี้
โมดูล Micrometer Registry OTLP ใช้ไคลเอนต์ HTTP ที่เข้ากันได้กับ OTLP เพื่อส่งออกตัวชี้วัดไปยังแบ็กเอนด์ OpentElemetry ภายใน OtlpMeterRegistry
ใช้วัตถุ HttpSender
ส่วนตัวเพื่อกำหนดค่าไคลเอนต์ HTTP ประโยชน์ของวิธีการนี้คือโมดูลมีน้ำหนักเบาและไม่ต้องการการพึ่งพาใด ๆ ใน Opentelemetry SDK มันใช้เฉพาะไลบรารี io.opentelemetry.proto
ซึ่งให้การกำหนดค่า protobuf สำหรับ opentelemetry
ในทางกลับกันวิธีการดังกล่าวหมายความว่า:
OpenTelemetryAutoConfiguration
ใหม่ทั่วไปใน Spring Boot 3.2 Autoconfigures ถั่ว OpenTelemetry
และทำให้สามารถกำหนดค่าถั่ว SdkMeterProvider
ได้ จะเป็นอย่างไรถ้าไมโครมิเตอร์สามารถใช้สิ่งนั้นสำหรับการตั้งค่าผู้ส่งออก OpentElemetry
วิธีแก้ปัญหาที่เป็นไปได้:
MeterRegistry
ที่ยอมรับวัตถุ OpenTelemetry
สำหรับการกำหนดค่า (คล้ายกับ OpenTelemetryMeterRegistry
ที่ใช้โดยไลบรารีเครื่องมือ OpentElemetry Java) หากจำเป็นต้องใช้ความเข้ากันได้ย้อนหลังการใช้งานใหม่จะต้องอยู่ร่วมกับสิ่งที่มีอยู่เดิม (อาจเป็นธงฟีเจอร์ที่สามารถสลับระหว่างทั้งสองได้?); ฉันได้ส่งปัญหาไปยังโครงการไมโครมิเตอร์และแบ่งปันคำแนะนำเหล่านี้ การสร้าง (หรืออัปเดต) โมดูลดังกล่าวจะทำให้สามารถใช้ OpenTelemetryAutoConfiguration
ได้อีกครั้งใน Spring Boot 3.2 สำหรับทั้งตัวชี้วัดและร่องรอย (และในอนาคตสำหรับบันทึกเช่นกัน)
SdkMeterProvider
และโดยทั่วไปสำหรับการใช้ตัวชี้วัดกับ opentelemetry แต่เราขาดการรองรับไมโครมิเตอร์ก่อนที่จะทำได้OtlpHttpMetricExporter
หรือ OtlpGrpcMetricExporter
)สำหรับบริบทเพิ่มเติมเกี่ยวกับความท้าทายในปัจจุบันโปรดดูที่ปัญหานี้ในโครงการ Spring Boot
Spring Boot Actuator ให้การจัดการการพึ่งพาและการกำหนดค่าอัตโนมัติสำหรับการติดตามไมโครมิเตอร์ซึ่งให้บริการด้านหน้าที่สะดวกกว่าแบ็กเอนด์การติดตามแบบกระจายที่แตกต่างกัน หนึ่งในนั้นคือ opentelemetry
นักพัฒนา Spring Boot สามารถเปิดใช้งานแอปพลิเคชันของพวกเขาเพื่อส่งออกร่องรอยผ่านโปรโตคอล OTLP ไปยังแบ็กเอนด์ OpentElemetry โดยการเพิ่มสปริงแอคชูเอเตอร์การติดตามไมโครมิเตอร์และการพึ่งพา opentelemetry เฉพาะจากไมโครมิเตอร์ในโครงการ
dependencies {
implementation ' org.springframework.boot:spring-boot-starter-actuator '
implementation ' io.micrometer:micrometer-tracing-bridge-otel '
implementation ' io.opentelemetry:opentelemetry-exporter-otlp '
.. .
}
ผู้ส่งออกที่จัดทำโดย Spring Boot Actuator Autoconfiguration เป็นผู้ส่งออก HTTP (ถั่ว OtlpHttpSpanExporter
) และสามารถกำหนดค่าผ่านคุณสมบัติได้ด้วยการกำหนดค่าการติดตามใน OtlpAutoConfiguration
management :
otlp :
tracing :
endpoint : http://localhost:4318/v1/traces
OpentElemetry รองรับคู่คีย์/ค่าเพิ่มเติม (เรียกว่า resource attributes
) ที่จะรวมอยู่ในข้อมูล telemetry Spring Boot Actuator ให้การกำหนดค่าอัตโนมัติสำหรับผู้ที่และทำให้สามารถเพิ่มแอตทริบิวต์ทรัพยากรใหม่ผ่านคุณสมบัติ แอตทริบิวต์ service.name
OpentElemetry มาตรฐานมาตรฐานจะถูกกำหนดค่าโดยอัตโนมัติตามค่าของ spring.application.name
(ถ้ากำหนด) หรืออื่น ๆ เป็นค่า application
ชันเริ่มต้น
management :
opentelemetry :
resource-attributes :
cluster : local
ฉันสร้างแอปพลิเคชั่นตัวอย่างเพื่อแสดงการตั้งค่านี้
ในปัญหานี้ในโครงการ Spring Boot มีการเพิ่มการกำหนดค่าอัตโนมัติสำหรับถั่ว OtlpHttpSpanExporter
เพื่อส่งออกร่องรอยการส่งออกผ่าน HTTP
ข้อกำหนดทั่วไปคือการส่งออกร่องรอยผ่าน GRPC (วิธีการที่ใช้มากที่สุดใน opentelemetry) ปัจจุบันนักพัฒนาสามารถกำหนดค่า OtlpGrpcSpanExporter
Bean ได้ด้วยตัวเอง มันคงจะดีถ้าสปริงบูตแอคทูเอเตอร์จะให้การกำหนดค่าอัตโนมัติสำหรับสิ่งนั้นเพื่อเพิ่มการ OtlpAutoConfiguration
ที่มีอยู่
มีปัญหาเกี่ยวกับโครงการสปริงบูตเพื่อเพิ่มการกำหนดค่าอัตโนมัติดังกล่าว
โดยรวมแล้วสิ่งเหล่านี้เป็นปัญหาและข้อเสนอแนะที่ฉันอธิบายมาจนถึงตอนนี้
ไมโครมิเตอร์
MeterRegistry
ที่สร้างขึ้นบน opentelemetry และกำหนดค่าได้ผ่านวิธีการมาตรฐานเพื่อให้เป็นไปได้ที่จะแบ่งปันการกำหนดค่าระหว่างตัวชี้วัดและร่องรอยสปริงบูตแอคทูเอเตอร์
OpenTelemetry
และถั่ว Resource
สามารถนำกลับมาใช้ใหม่ได้จากการกำหนดค่า opentelemetry ที่มีอยู่ นอกจากนั้นการกำหนดค่าอัตโนมัติควรกำหนดค่าเริ่มต้นสำหรับ SdkMeterProvider
, OtlpHttpMetricExporter
และ OtlpGrpcMetricExporter
OtlpGrpcSpanExporter
BeanSpring Initializr
สปริงบูตแอคทูเอเตอร์
OpenTelemetry
และถั่ว Resource
สามารถนำกลับมาใช้ใหม่ได้จากการกำหนดค่า opentelemetry ที่มีอยู่ นอกจากนั้นการกำหนดค่าอัตโนมัติควรกำหนดค่าเริ่มต้นสำหรับ SdkLoggerProvider
, OtlpHttpLogRecordExporter
และ OtlpGrpcLogRecordExporter
OpenTelemetryAutoConfiguration
(ปัญหานี้อาจได้รับการพิจารณาสำหรับ OpenTelemetryAutoConfiguration
ทั่วโลกเมื่อการติดตามเฉพาะถูกลบ)