Tracing
GraphQL::Tracing
은 GraphQL 런타임 이벤트 관찰을 위한 .trace
후크를 제공한다.
이를 위해 tracer 은 반드시 구현되어야 한다.
class MyCustomTracer
def self.trace(key, data)
# key & data 를 이용하여 여기에 구현
yield
end
end
.trace
은 다음과 같은 것들과 함께 호출할 수 있다.
key
: 런타임 동안 발생하는 이벤트data
: 이벤트에 관한 메타데이터의 해쉬&block
: 이벤트 자신, 이것은 반드시yield
되어야 하며, 값은 리턴되어야 한다.
모든 쿼리에 대해 tracer를 실행하려면, 스키마에 tracer
:추가
# 모든 쿼리에 대해 `MyCustomTracer` 실행
class MySchema < GraphQL::Schema
tracer(MyCustomTracer)
end
또는, 오직 하나의 쿼리에만 tracer를 실행할 수 있다. 이를 위해서는 context에 tracer을 추가하면 된다.
# 오직 이 쿼리에 대해서만 `MyCustomTracer` 실행
MySchema.execute(..., context: { tracers: [MyCustomTracer]})
모든 이벤트는 GraphQL::Tracing
여기서 확인할 수 있다,
ActiveSupport::Notifications
ActiveSupportNotificationsTracing 를 이용하여 ActiveSupport::Notifications 에 이벤트를 발생할 수 있다.
이를 사용하기 위해서는 다음과 같이 하면 된다.
# ActiveSupport::Notifications 에 실행이벤트 보냄
class MySchema < GraphQL::Schema
tracer(GraphQL::Tracing::ActiveSupportNotificationsTracing)
end
Monitoring
아래와 같이 다양한 GraphQL-Ruby 외부의 모니터링 플랫폼이 존재한다. Leaf 필드는 모니터링 되지 않는데, 이는 high cardinality 를 피하기 위해서이다. 구현은 Tracing::PlatformTracing
를 기초로 한다.
Appsignal
AppSignal instrumentation 추가하기:
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::AppsignalTracing)
end
New Relic
New Relic instrumentation 추가하기:
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::NewRelicTracing)
# 선택사항: 새로운 new relic transaction 이름을 설정하기 위해서 operation name을 사용
# use(GraphQL::Tracing::NewRelicTracing, set_transaction_name: true)
end
Scout
Scout APM instrumentation 추가하기:
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::ScoutTracing)
end
Skylight
Skylight instrumentation 추가하기:
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::SkylightTracing)
end
Datadog
Datadog instrumentation 추가하기:
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::DataDogTracing)
end
Prometheus
Prometheus instrumentation 추가하기:
require 'prometheus_exporter/client'
class MySchema < GraphQL::Schema
use(GraphQL::Tracing::PrometheusTracing)
end
PrometheusExporter 서버는 반드시 GraphQL::Tracing::PrometheusTracing::GraphQLCollector를 extend한 커스텀 타입 컨트롤러와 함께 반드시 실행되어야 한다.
# lib/graphql_collector.rb
require 'graphql/tracing'
class GraphQLCollector < GraphQL::Tracing::PrometheusTracing::GraphQLCollector
end
bundle exec prometheus_exporter -a lib/graphql_collector.rb
* 해당 글은 번역기 돌리다가 크롬 번역기 말도 안되는 해석에 지친 본인이 나중에 참고할 의도로 대충대충 발로 해석한 것이니 참고용으로만 사용하시길 바랍니다.
* 출처: http://graphql-ruby.org/queries/tracing.html
'배움의 즐거움 > 프로그래밍' 카테고리의 다른 글
(20) Graphql-ruby - 객체 (0) | 2019.01.01 |
---|---|
(19) Graphql-ruby - 쿼리에 before/after hook 호출하기 (0) | 2019.01.01 |
(17) Graphql-ruby - 멀티플렉스 (0) | 2019.01.01 |
(16) Graphql-ruby - 타임아웃 (0) | 2019.01.01 |
(15) Graphql-ruby - 복잡성 & 깊이 (0) | 2019.01.01 |