GraphQL 로그 읽기
우리는 GraphQL 쿼리 로그를 필터링하기 위해 Kibana를 사용합니다. @gitlab.com
이메일 주소로 Kibana에 로그인하세요.
Kibana에서는 두 가지 유형의 GraphQL 로그를 검토할 수 있습니다:
- 요청 내에서 실행된 각 GraphQL 쿼리의 로그.
- 쿼리 멀티 플렉싱으로 인해 여러 쿼리가 실행될 수 있는 전체 요청의 로그.
각 GraphQL 쿼리의 로그
multiplex query에서는 각 개별 쿼리가 별도로 로그에 기록됩니다. 이러한 로그를 검토하기 위해 하위 구성 요소 필터링을 사용할 수 있습니다. 이 필터를 활성화하여 Kibana에 방문하거나 다음 단계를 따라 하위 구성 요소 필터를 설정하세요:
- 필터 추가:
- 필터:
json.subcomponent
- 연산자:
is
- 값:
graphql_json
- 필터:
- 새로 고침(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
를 사용하여 특정 필드를 사용한 쿼리의 로그를 필터링합니다.
특정 필드를 사용한 쿼리
특정 필드를 사용한 쿼리의 로그를 필터링하려면 다음 단계를 따르세요:
- 필터 추가:
- 필터:
json.query_analysis.used_fields
- 연산자:
is
- 값:
Type.myField
, 여기서Type.myField
는 우리의 GraphQL API 자원 문서에 표시된 타입 이름과 필드 이름입니다.
- 필터:
- 새로 고침(Refresh)을 선택하세요.
폐기된 필드를 사용한 쿼리
폐기된 특정 필드를 사용한 쿼리의 로그를 평가하기 위해 위의 단계를 따르되, 대신 json.graphql.used_fields
필터를 사용하세요.
전체 요청의 로그
전체 요청 로그에는 요청 내의 모든 멀티 플렉싱된 쿼리에 대한 로그 데이터와 GraphQLController#execute
외부에서 소요된 시간 데이터가 포함됩니다.
전체 요청 로그를 확인하려면 쿼리 로그에서와는 달리 json.subcomponent
필터를 적용하지 마시고 다음을 대신 수행하세요:
- 필터 추가:
- 필터:
json.meta.caller_id
- 연산자:
is
- 값:
GraphqlController#execute
- 필터:
- 새로 고침(Refresh)을 선택하세요.
위의 각 GraphQL 쿼리의 로그에서 설명한 내용과의 차이점은 다음과 같습니다:
- 위에서 언급한 Kibana 필드 중 일부는 전체 요청 로그에서 사용할 수 없습니다.
- 필터 이름이 다릅니다. 예를 들어,
json.query_analysis.used_fields
대신json.graphql.used_fields
를 선택합니다.