نسخه ی نمایشی من از OpenTelemetry Tracing دارای دو جزء Spring Boot است. یکی از عامل جاوا استفاده میکند، و وقتی اخیراً آن را از v1.x به v2.x ارتقا دادم، متوجه رفتار متفاوتی شدم. در مورد دیگر، من از Micrometer Tracing استفاده می کنم زیرا به GraalVM native کامپایل می کنم و نمی تواند عوامل جاوا را پردازش کند.
در این پست می خواهم این سه رویکرد را با هم مقایسه کنم: Java agent v1، Java agent v2 و Micrometer Tracing.
اپلیکیشن پایه و زیرساخت آن
من از همان برنامه پایه استفاده خواهم کرد: یک برنامه ساده Spring Boot، کدگذاری شده در Kotlin. این یک نقطه پایانی واحد ارائه می دهد.
- تابع فراتر از نقطه پایان نامگذاری شده است
entry()
- تابع دیگری را به نام فراخوانی می کند
intermediate()
- دومی از a استفاده می کند
WebClient
به عنوان مثال، جایگزینیRestTemplate
، برای برقراری تماس با نقطه پایانی بالا - برای جلوگیری از حلقه نامتناهی، من یک هدر درخواست سفارشی ارسال می کنم: if the
entry()
تابع آن را پیدا می کند، ادامه نمی دهد
به کد زیر ترجمه می شود:
@SpringBootApplication
class Agent1xApplication
@RestController
class MicrometerController {
private val logger = LoggerFactory.getLogger(MicrometerController::class.java)
@GetMapping("/{message}")
fun entry(@PathVariable message: String, @RequestHeader("X-done") done: String?) {
logger.info("entry: $message")
if (done == null)...