GraphQL 로그 읽기

우리는 GraphQL 쿼리 로그를 필터링하기 위해 Kibana를 사용합니다. @gitlab.com 이메일 주소로 Kibana에 로그인하세요.

Kibana에서는 두 가지 유형의 GraphQL 로그를 검토할 수 있습니다:

  • 요청 내에서 실행된 각 GraphQL 쿼리의 로그.
  • 쿼리 멀티 플렉싱으로 인해 여러 쿼리가 실행될 수 있는 전체 요청의 로그.

각 GraphQL 쿼리의 로그

multiplex query에서는 각 개별 쿼리가 별도로 로그에 기록됩니다. 이러한 로그를 검토하기 위해 하위 구성 요소 필터링을 사용할 수 있습니다. 이 필터를 활성화하여 Kibana에 방문하거나 다음 단계를 따라 하위 구성 요소 필터를 설정하세요:

  1. 필터 추가:
    1. 필터: json.subcomponent
    2. 연산자: is
    3. 값: graphql_json
  2. 새로 고침(Refresh)을 선택하세요.

사이드바의 사용 가능한 필드 섹션에서 Kibana 필드를 선택하여 로그 테이블에 열을 추가하거나 이 보기를 방문하여 이미 선택된 Kibana 필드 세트를 확인할 수 있습니다. 일부 관련된 Kibana 필드는 다음과 같습니다:

Kibana 필드 설명
json.operation_name 클라이언트가 사용한 operation name.
json.operation_fingerprint 쿼리의 fingerprint, 시간이 지남에 따라 반복되는 쿼리를 인식하는 데 사용됨.
json.meta.caller_id GitLab 프론트엔드에서 생성된 쿼리의 경우 graphql:<operation_name>으로 나타남, 그렇지 않은 경우 graphql:unknown로 나타남. 내부 대 외부 쿼리를 식별하는 데 사용될 수 있음.
json.query_string 쿼리 문자열 자체.
json.is_mutation 변형(mutation)인 경우 true, 아닌 경우 false로 나타남.
json.query_analysis.used_fields 쿼리에서 선택된 GraphQL 필드의 목록.
json.query_analysis.used_deprecated_fields 쿼리에서 사용된 폐기된 GraphQL 필드의 목록.
json.query_analysis.duration_s 쿼리 실행의 기간(초)
json.query_analysis.complexity 쿼리의 복잡성 점수.

유용한 필터

GraphQL API 자원 문서에 나타나는 타입 이름 및 필드 이름인 Type.myField를 사용하여 특정 필드를 사용한 쿼리의 로그를 필터링합니다.

특정 필드를 사용한 쿼리

특정 필드를 사용한 쿼리의 로그를 필터링하려면 다음 단계를 따르세요:

  1. 필터 추가:
    1. 필터: json.query_analysis.used_fields
    2. 연산자: is
    3. 값: Type.myField, 여기서 Type.myField우리의 GraphQL API 자원 문서에 표시된 타입 이름과 필드 이름입니다.
  2. 새로 고침(Refresh)을 선택하세요.

폐기된 필드를 사용한 쿼리

폐기된 특정 필드를 사용한 쿼리의 로그를 평가하기 위해 위의 단계를 따르되, 대신 json.graphql.used_fields 필터를 사용하세요.

전체 요청의 로그

전체 요청 로그에는 요청 내의 모든 멀티 플렉싱된 쿼리에 대한 로그 데이터와 GraphQLController#execute 외부에서 소요된 시간 데이터가 포함됩니다.

전체 요청 로그를 확인하려면 쿼리 로그에서와는 달리 json.subcomponent 필터를 적용하지 마시고 다음을 대신 수행하세요:

  1. 필터 추가:
    1. 필터: json.meta.caller_id
    2. 연산자: is
    3. 값: GraphqlController#execute
  2. 새로 고침(Refresh)을 선택하세요.

위의 각 GraphQL 쿼리의 로그에서 설명한 내용과의 차이점은 다음과 같습니다:

  • 위에서 언급한 Kibana 필드 중 일부는 전체 요청 로그에서 사용할 수 없습니다.
  • 필터 이름이 다릅니다. 예를 들어, json.query_analysis.used_fields 대신 json.graphql.used_fields를 선택합니다.