分散トレーシングの技術選定・OSS 貢献, Stackdriver Trace での性能可視化・改善 / Distributed Tracing case study

分散トレーシングの技術選定・OSS 貢献, Stackdriver Trace での性能可視化・改善 / Distributed Tracing case study

パフォーマンスに苦労している並列処理システムを改善するために Stackdriver Traceを導入して動作の可視化を行った結果、 ボトルネックの存在が判明してパフォーマンスを改善できた事例について紹介します。

この事例でStackdriver Traceを選定した過程や OpenTelemetry へコントリビュートした経緯についても共有します。

また、新規開発のGraphQLサーバへ導入して REST APIサーバと通信をまたいだ可視化を行った事例についても紹介します。

1a18bf1e50d7d2bdfe52a6c9fceec244?s=128

saiya_moebius

November 23, 2019
Tweet

Transcript

  1. None
  2. None
  3. None
  4. None
  5. None
  6. None
  7. None
  8. or " "

  9. None
  10. logger.info("hogehoge")

  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. None
  19. None
  20. None
  21. OpenCensus OpenTelemetry

  22. None
  23. None
  24. None
  25. None
  26. None
  27. None
  28. None
  29. None
  30. None
  31. None
  32. None
  33. None
  34. None
  35. None
  36. None
  37. None
  38. None
  39. None
  40. None
  41. None
  42. None
  43. None
  44. None
  45. None
  46. None
  47. None
  48. None
  49. compile 'io.opencensus:opencensus-api:0.16.0' compile 'io.opencensus:opencensus-exporter-trace-Stackdriver:0.16.0' runtime 'io.opencensus:opencensus-impl:0.16.0'

  50. class Foo { private static final Tracer tracer = Tracing.getTracer();

    public static void main(String ...args) { try { setupOpenCensusAndStackdriverExporter(); } catch (IOException e) { return; } yourMethod() } void yourMethod() { try (Scope ss = tracer.spanBuilder("yourMethod").startScopedSpan()) { // Span span = tracer.getCurrentSpan(); span.addAnnotation("name_of_tag", "foobarbaz"); } } }
  51. public static void main(String ...args) { try { // setupOpenCensusAndStackdriverExporter();

    } catch (IOException e) { return; } }
  52. void yourMethod() { // span // try-with-resources close try (Scope

    ss = tracer.spanBuilder("do_something").startScopedSpan()) { // // // // Span Span span = tracer.getCurrentSpan(); // span.addAnnotation("name_of_tag", "foobarbaz"); } }
  53. @Configuration

  54. None
  55. @Configuration

  56. compile 'com.m3.tracing:spring-boot:1.0.1' M3_TRACER_FQCN com.m3.tracing.tracer.opencensus.M3OpenCensusTracer

  57. public static void main(String ...args) { try { // initTracingSdk();

    } catch (IOException e) { return; } }
  58. @Service class Foo { private final M3Tracer tracer; // Constructor

    Injection (DI) public Foo(M3Tracer tracer) { this.tracer = tracer; } void yourMethod() { try (TraceSpan span = tracer.startSpan("do_something")) { // span.set("name_of_tag", "foobarbaz"); } } }
  59. void yourMethod() { // span // try-with-resources close try (TraceSpan

    span = tracer.startSpan("do_something")) { // // // // span.set("name_of_tag", "foobarbaz"); } }
  60. void yourMethod() { // span // try-with-resources close try (TraceSpan

    span = tracer.startSpan("do_something")) { // // // // span.set("name_of_tag", "foobarbaz"); } }
  61. None
  62. None