Trace의 샘플 SQL 쿼리

모니터링 가능성 분석에서 샘플 SQL 쿼리를 사용하여 Cloud Trace 데이터를 분석하고, 지연 시간 이상점을 식별하고, 서비스 전반에서 스팬 성능 백분위수를 계산할 수 있습니다.

이러한 예시에서는 _AllSpans 뷰에 저장된 스팬을 필터링, 그룹화, 집계하는 방법을 보여줍니다. 모니터링 가능성 분석에서 쿼리를 작성하지 않은 경우 먼저 trace 쿼리 및 분석을 참조하세요.

SQL 언어 지원

모니터링 가능성 분석 페이지에서 사용되는 쿼리는 몇 가지 예외를 제외하고 GoogleSQL 함수를 지원합니다.

다음 SQL 명령어는 모니터링 가능성 분석 페이지를 사용하여 실행된 SQL 쿼리에서 지원되지 않습니다.

  • DDL 및 DML 명령어
  • 자바스크립트 사용자 정의 함수
  • BigQuery ML 함수
  • SQL 변수

다음은 BigQuery StudioLooker Studio 페이지를 사용하거나 bq 명령줄 도구를 사용하여 연결된 BigQuery 데이터 세트를 쿼리할 때만 지원됩니다.

  • 자바스크립트 사용자 정의 함수
  • BigQuery ML 함수
  • SQL 변수

권장사항

쿼리의 시간 범위를 설정하려면 기간 선택기를 사용하는 것이 좋습니다. 예를 들어 이전 주의 데이터를 보려면 기간 선택기에서 지난 7일 을 선택합니다. 또한 기간 선택기를 사용하여 시작 및 종료 시간을 지정하고, 둘러볼 시간을 지정하고, 시간대를 변경할 수 있습니다.

WHERE 절에 start_time 필드를 포함하면 기간 선택기 설정은 사용되지 않습니다. 다음 예시에서는 타임스탬프로 필터링하는 방법을 보여줍니다.

-- Matches trace spans whose start_time is within the most recent 1 hour.
WHERE start_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

시간별로 필터링하는 방법에 대한 자세한 내용은 시간 함수타임스탬프 함수를 참조하세요.

시작하기 전에

  1. 계정에 로그인합니다. Google Cloud 를 처음 사용하는 경우 Google Cloud, 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Observability API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Observability API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  8. 모니터링 가능성 분석 페이지를 로드하고, trace 데이터에 대해 비공개 쿼리를 작성, 실행, 저장하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

    • 모니터링 가능성 뷰 접근자 (roles/observability.viewAccessor) 쿼리하려는 모니터링 가능성 뷰에 대한 이 역할은 권한 부여를 특정 뷰로 제한할 수 있는 IAM 조건을 지원합니다. 역할 부여에 조건을 연결하지 않으면 주 구성원이 모든 모니터링 가능성 뷰에 액세스할 수 있습니다.
    • 프로젝트에 대한 모니터링 가능성 분석 사용자 (roles/observability.analyticsUser). 이 역할에는 비공개 쿼리를 저장하고 실행하는 데 필요한 권한과 공유 쿼리를 실행하는 데 필요한 권한이 포함되어 있습니다.

    역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

    커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

이 페이지의 쿼리를 사용하는 방법

  1. 콘솔에서 Google Cloud 모니터링 가능성 분석 페이지로 이동합니다.

    모니터링 가능성 분석으로 이동

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 Logging 인 결과를 선택합니다.

  2. 쿼리 창에서  SQL을 클릭한 후 쿼리를 복사하여 SQL 쿼리 창에 붙여넣습니다.

    다음은 _AllSpans 뷰를 쿼리하기 위한 FROM 절의 형식을 보여줍니다.

    FROM `PROJECT_ID.LOCATION._Trace.Spans._AllSpans`

    FROM 절에는 다음 필드가 포함되어 있습니다.

    • PROJECT_ID: 프로젝트 식별자
    • LOCATION: 모니터링 가능성 버킷의 위치
    • _Trace는 모니터링 가능성 버킷의 이름입니다.
    • Spans는 데이터 세트의 이름입니다.
    • _AllSpans는 뷰의 이름입니다.

    로 래핑되는지 확인합니다.

BigQuery Studio 페이지에서 이 문서에 표시된 쿼리를 사용하거나 bq 명령줄 도구를 사용하려면 FROM 절을 수정하고 연결된 BigQuery 데이터 세트의 경로를 입력합니다. 예를 들어 프로젝트 myproject에 있는 연결된 BigQuery 데이터 세트 my_linked_dataset_AllSpans 뷰를 쿼리하려면 경로는 `myproject.my_linked_dataset._AllSpans`입니다.

일반적인 사용 사례

이 섹션에는 커스텀 쿼리를 만드는 데 도움이 될 수 있는 몇 가지 일반적인 사용 사례가 나와 있습니다.

모든 trace 데이터 표시

_AllSpans 뷰를 쿼리하려면 다음 쿼리를 실행합니다.

-- Display all data.
SELECT *
FROM `PROJECT_ID.LOCATION._Trace.Spans._AllSpans`
-- Limit to 10 entries.
LIMIT 10

일반적인 스팬 정보 표시

시작 시간 및 기간과 같은 일반적인 스팬 정보를 표시하려면 다음 쿼리를 실행합니다.

SELECT
  start_time,
  -- Set the value of service name based on the first non-null value in the list.
  COALESCE(
    JSON_VALUE(resource.attributes, '$."service.name"'),
    JSON_VALUE(attributes, '$."service.name"'),
    JSON_VALUE(attributes, '$."g.co/gae/app/module"')) AS service_name,
  name AS span_name,
  duration_nano,
  status.code AS status,
  trace_id,
  span_id
FROM
  `PROJECT_ID.LOCATION._Trace.Spans._AllSpans`
LIMIT 10

자세한 내용은 조건부 표현식을 참조하세요.

스팬 지연 시간의 50번째 및 99번째 백분위수 표시

각 RPC 서비스의 지연 시간의 50번째 및 99번째 백분위수를 표시하려면 다음 쿼리를 실행합니다.

SELECT
  -- Compute 50th and 99th percentiles for each service
  STRING(attributes['rpc.service']) || '/' || STRING(attributes['rpc.method']) AS rpc_service_method,
  APPROX_QUANTILES(duration_nano, 100)[OFFSET(50)] AS duration_nano_p50,
  APPROX_QUANTILES(duration_nano, 100)[OFFSET(99)] AS duration_nano_p99
FROM
  `PROJECT_ID.LOCATION._Trace.Spans._AllSpans`
WHERE
  -- Matches spans whose kind field has a value of 2 (SPAN_KIND_SERVER).
  kind = 2
GROUP BY rpc_service_method

열거에 대한 자세한 내용은 OpenTelemetry: SpanKind 문서를 참조하세요.

결과를 그래픽으로 보려면 측정기준이 rpc_service_method로 설정된 차트를 만들면 됩니다. duration_nano_p50 값의 평균에 대한 측정항목과 duration_nano_p99 필드의 평균에 대한 측정항목을 두 개 추가할 수 있습니다.

trace 항목 필터링

쿼리에 필터를 적용하려면 WHERE 절을 추가합니다. 이 절에서 사용하는 문법은 필드의 데이터 유형에 따라 다릅니다. 이 섹션에서는 다양한 데이터 유형의 여러 예시를 제공합니다.

문자열 데이터 유형별 필터링

name 필드는 String으로 저장됩니다.

  • name이 지정된 스팬만 분석하려면 다음 절을 사용합니다.

    -- Matches spans that have a name field.
    WHERE name IS NOT NULL
    
  • name의 값이 "POST"인 스팬만 분석하려면 다음 절을 사용합니다.

    -- Matches spans whose name is POST.
    WHERE STRPOS(name, "POST") > 0
    
  • name"POST" 값이 포함된 스팬만 분석하려면 와일드 카드와 함께 LIKE 연산자를 사용합니다.

    -- Matches spans whose name contains POST.
    WHERE name LIKE "%POST%"
    

정수 데이터 유형별 필터링

kind 필드는 0~5 사이의 값을 사용할 수 있는 정수입니다.

  • kind가 지정된 스팬만 분석하려면 다음 절을 사용합니다.

    -- Matches spans that have field named kind.
    WHERE kind IS NOT NULL
    
  • kind 값이 1 또는 2인 스팬을 분석하려면 다음 절을 사용합니다.

    -- Matches spans whose kind value is 1 or 2.
    WHERE kind IN (1, 2)
    

RECORD 데이터 유형별 필터링

trace 스키마의 일부 필드에는 RECORD 데이터 유형이 있습니다. 이러한 필드는 하나 이상의 데이터 구조를 저장하거나 동일한 데이터 구조의 반복 항목을 저장할 수 있습니다.

상태 또는 상태 코드로 필터링

status 필드는 데이터 유형이 RECORD인 필드의 예시입니다. 이 필드는 codemessage로 라벨이 지정된 멤버가 있는 데이터 구조 하나를 저장합니다.

  • status.code 필드의 값이 1인 경우에만 스팬을 분석하려면 다음 절을 추가합니다.

    -- Matches spans that have a status.code field that has a value of 1.
    WHERE status.code = 1
    

    status.code 필드는 정수로 저장됩니다.

  • status 필드가 EMPTY가 아닌 스팬을 분석하려면 다음 절을 추가합니다.

    -- Matches spans that have status field. When the status field exists, it
    -- must contain a subfield named code.
    -- Don't compare status to NULL, because this field has a data type of RECORD.
    WHERE status.code IS NOT NULL
    

eventslinks 필드는 RECORD 데이터 유형으로 저장되지만 반복 필드입니다.

  • 이벤트가 하나 이상 있는 스팬과 일치시키려면 다음 절을 사용합니다.

    -- Matches spans that have at least one event. Don't compare events to NULL.
    -- The events field has data type of RECORD and contains a repeated fields.
    WHERE ARRAY_LENGTH(events) > 0
    
  • name 필드의 값이 message인 이벤트가 있는 스팬과 일치시키려면 다음 절을 사용합니다.

    WHERE
      -- Exists is true when any event in the array has a name field with the
      -- value of message.
      EXISTS(
        SELECT 1
        FROM UNNEST(events) AS ev
        WHERE ev.name = 'message'
      )
    

JSON 데이터 유형별 필터링

attributes 필드는 JSON 유형입니다. 각 개별 속성은 키-값 쌍입니다.

  • attributes가 지정된 스팬만 분석하려면 다음 절을 사용합니다.

    -- Matches spans where at least one attribute is specified.
    WHERE attributes IS NOT NULL
    
  • component라는 속성 키의 값이 "proxy"인 스팬만 분석하려면 다음 절을 사용합니다.

    -- Matches spans that have an attribute named component with a value of proxy.
    WHERE attributes IS NOT NULL
          AND JSON_VALUE(attributes,