서비스
home

[빅쿼리]로그라우터로 빅쿼리의 쿼리 오류 모니터링하기 (feat. 구글 시트)

1. 쿼리 예약 결과 모니터링의 필요성

지난 포스팅에는 빅쿼리의 ‘쿼리 예약’ 기능을 살펴보았습니다.
‘쿼리 예약’ 기능은 사용자가 지정한 시1. 간마다 자동으로 쿼리를 실행하도록 설정하는 기능입니다. 루커 스튜디오를 사용하면서 주기적으로 최신 데이터로 갱신이 필요한 경우에 유용한 기능입니다.
하지만, 쿼리를 실행하기 위한 데이터가 누락되거나, 시스템 오버로드 등 여러 가지 예기치 못한 에러로 인해서 쿼리가 실패한다면 어떨까요? 이는 잘못된 리포팅이나 잘못된 비즈니스 결정으로 이어지게 될 수도 있지요. 에러를 수정하지 않은 상태에서 계속 쿼리를 실행하면 불필요한 자원이 소모되고, 시스템의 신뢰성이 저하됩니다. 따라서 ‘쿼리 예약’ 기능을 사용하는 사용자에게는 쿼리 실행결과에서 에러를 모니터링하는 일이 중요합니다.
오늘은 빅쿼리에서 에러 메시지나 예외 상황을 기록하는 로그를 스프레드시트에 자동으로 저장하기 위해 필요한 도구와 , 그 도구를 실제로 사용하는 방법을 소개하겠습니다.

2.로그 라우터란?

오늘 사용할 핵심이 되는 도구는 구글 클라우드의 ‘로그 라우터’ 입니다. 로그 라우터는 구글의 다양한 클라우드 서비스에서 생성되는 로그를 수집하고 관리하는 서비스로, 로그 라우터를 사용하면 다음 이미지와 같이 각 서비스에서 생성된 로그를 수집하여 보관하거나 외부 서비스로 전송할 수 있습니다.
빅쿼리의 에러 내역을 스프레드시트에서 보여주는 화면
이제 로그 라우터를 직접 만들고 사용해보겠습니다.

3. 로그 라우터 만들기

3.1 에러 로그를 저장할 데이터세트 생성하기

빅쿼리에 예약된 쿼리가 실패한 경우, 로그 라우터를 통해 빅쿼리의 지정된 데이터세트에 로그를 저장하고, 스프레드시트로 로그를 불러오겠습니다.
먼저 빅쿼리에 로그를 저장하기 위한 데이터세트를 생성해야 합니다.
데이터 세트를 생성합니다.
데이터 세트를 생성해두면 하위 테이블은 로그 라우터에서 자동 생성합니다.

3.2 로그 라우터 생성하기

(1) 로그 라우터 메뉴로 이동해보겠습니다. 먼저, 구글 클라우드 메인 페이지에서 좌측 상단의 메뉴를 클릭합니다.
좌측 상단 ‘메뉴’ 클릭
(2) 하단의 ‘제품 더보기’를 클릭합니다.
‘제품 더보기’ 클릭
(3) ‘로깅’ 메뉴에서 ‘로그 라우터’를 찾아 클릭합니다.
‘작업’ 탭 하위에 ‘로깅’, ‘구성’ 탭 하위에 ‘로그 라우터’를 클릭합니다.
(4) 로그 라우터 기능 페이지로 들어왔습니다. 상단의 ‘싱크 만들기’ 를 클릭합니다. 로그 라우터의 싱크를 설정하는 것은 로그 라우터가 수집한 로그를 어디에 저장할지를 결정하는 과정입니다.
상단 ‘싱크 만들기’ 클릭
(5) ‘로그 라우팅 싱크 만들기’ 메뉴에서 싱크 세부정보를 입력하고 다음 버튼을 클릭합니다.
‘싱크 이름’과 ‘싱크 설명’은 추후 사용자가 알아볼 수 있도록 입력합니다.
(6) 싱크 대상을 ‘BigQuery 데이터 세트’로 선택하고, 로그를 저장하기 위해 미리 만들어둔 데이터 세트를 선택합니다. ‘파티션을 나눈 테이블 사용’ 옵션을 사용 설정하면 날짜별로 내부 파티션을 나눈 테이블에 로그가 저장되어 쿼리 성능을 높일 수 있습니다. 설정 후 ‘다음’ 버튼을 클릭합니다.
데이터 세트 선택 후 ‘다음’ 버튼 클릭
(7) ‘싱크에 포함할 로그 선택’ 창은 빅쿼리와 같은 클라우드 스토리지에 로그를 전송할 때, 어떤 종류의 로그를 저장할 것인지 결정할 수 있습니다. 이 기능을 통해 로그 데이터의 유효성을 높이고 불필요한 부하를 줄일 수 있습니다. 아래 사진과 같이 ‘severity=ERROR’를 입력하면 로그의 심각도(severity)가 ERROR인 로그만을 선택하게 됩니다. 아래와 같이 입력 후 ‘다음’ 버튼을 눌러주세요
‘severity = ERROR’ 입력 후 ‘다음’ 클릭
(8) 세부 항목들을 모두 입력했는지 확인 후 ‘싱크 만들기’ 버튼을 클릭합니다.
하단 ‘싱크 만들기’ 버튼 클릭
(9) ‘싱크 만들기’ 버튼을 클릭하면 선택했던 데이터 세트 하위에 자동으로 테이블들이 세팅됩니다. 빅쿼리에 접속하여 데이터 세트에 테이블이 정상적으로 생성되었는지 확인합니다.
3개의 테이블이 생성되었습니다.
예약된 쿼리에서 에러가 발생하면 ‘bigquerydatatransfer_googleapis_com_transfer_config’ 테이블에 자동으로 저장이 됩니다. 잘 작동되는지 확인해볼까요?

3.3 로그 라우터가 정상적으로 실행되는지 확인하기

(1) 에러를 테이블에 저장하기 위해서 쿼리를 예약하고, 의도적으로 에러를 발생시켜보겠습니다. ‘예약된 쿼리’ 메뉴에서 에러가 발생한 쿼리를 클릭해보겠습니다.
예약 쿼리를 클릭하면 상세 에러 내역을 볼 수 있습니다.
(2) 에러가 발생한 예약된 쿼리 이름을 클릭하면 아래와 같이 상세 내역을 볼 수 있습니다.
예약 쿼리가 실행되는 리전과, 데이터가 있는 리전을 다르게 설정하여 발생하는 에러입니다.
(3) 에러를 확인하였습니다. 로그 라우터가 정상적으로 실행되고 있다면 해당 에러는 빅쿼리 테이블에도 저장되어있어야 합니다. 데이터 세트 안에 자동으로 생성되었던 테이블(bigquerydatatransfer_googleapis_com_transfer_config)의 데이터를 불러오기 위해 빅쿼리의 쿼리 창에 다음과 같은 쿼리를 입력 후 실행해보겠습니다.
SELECT logName, resource.type, resource.labels.config_id, resource.labels.project_id, jsonPayLoad.message FROM `autooffice.reservationError.bigquerydatatransfer_googleapis_com_transfer_config` WHERE TIMESTAMP_TRUNC(timestamp, DAY) = TIMESTAMP("2024-02-15") LIMIT 1000
SQL
복사
쿼리 결과가 다음과 같이 출력되었습니다.
‘예약된 쿼리’와 동일한 에러가 저장되어 있어야 합니다.
‘예약된 쿼리’ 메뉴에서 확인했던 에러 메시지가 빅쿼리 테이블에도 동일하게 저장되어 있네요. 로그 라우터가 정상적으로 작동되고 있는 것입니다. 그런데 에러를 ‘예약된 쿼리’ 페이지나 빅쿼리 테이블에서 매번 확인하는 것은 번거로운 일입니다. 가장 쉽게 확인할 수 있는 방법이 있을까요? 우리가 늘 작업하는 스프레드시트에서 확인하는 것이 한 가지 방법이 될 수 있습니다.

4. 에러 테이블을 스프레드시트로 내보내기

(1) 에러 테이블(bigquerydatatransfer_googleapis_com_transfer_config) 을 클릭하여 아래의 화면으로 전환합니다. 상단의 ‘내보내기’ 클릭 후 ‘스프레드시트로 탐색’을 클릭합니다.
‘내보내기’ → ‘스프레드시트로 탐색’ 클릭
(2) ‘시작하기’를 클릭합니다.
‘시작하기’ 클릭
(3) 새로 생성된 스프레드시트 상단 메뉴에서 ‘새로고침 예약하기’ 버튼을 클릭합니다.
‘새로고침 예약하기’ 클릭
(4) 새로고침 옵션에서는 빅쿼리의 에러 테이블을 내보내는 주기를 설정할 수 있습니다. ‘예약된 새로고침’ 토글을 ON 하고, 원하는 반복 주기를 설정 후 ‘저장’을 클릭합니다.
반복 주기를 설정하고 ‘저장’ 클릭
예약된 새고로침을 확인할 수 있는 화면
예약된 새로고침을 설정하였지만 지금 즉시 테이블을 불러오고 싶다면 옵션 하단의 ‘전체 새로고침’ 버튼을 클릭하면 됩니다. 이제 스프레드시트에서 간편하게 에러 정보를 확인할 수 있습니다.

5. 추출 편집기로 원하는 데이터만 추출하기

하지만, 예약된 쿼리가 다양하고 관리하는 데이터 세트가 여러 개인 경우 에러를 수집하는 단일 테이블에는 여러 테이블의 에러가 뒤섞이게 됩니다. 쿼리를 실행하면 간편하게 원하는 테이블의 에러만 확인할 수 있지요. 이와 비슷하게 스프레드시트에서도 추출 편집기를 통해 원하는 에러만 추출하여 가독성을 높일 수 있습니다.
(1) 시트 상단의 ‘추출’ 버튼을 클릭합니다.
필요에 따라 ‘새 시트’와 ‘기존 시트’ 선택 후 ‘만들기’ 클릭
(2) 새로운 탭과 추출 편집기가 실행됩니다. 추출 편집기는 데이터에 대한 필터 기능을 제공합니다. 필터를 클릭하면 아래와 같이 다양한 조건으로 필터링 할 수 있습니다.
필요한 종류의 필터를 선택 후 설정합니다.
(3) 원하는 조건으로 필터링을 설정합니다. 아래 사진에서는 로그에 ‘salesData’ 텍스트가 포함된 에러만 가져오도록 필터링 하였습니다. 보통 에러가 발생한 위치 정보도 로그에 저장되기 때문에 테이블별로 에러 로그를 불러오고자 한다면 아래와 같이 테이블 이름을 입력하면 됩니다.
추출 편집기에서 필터링 조건 입력 후 ‘확인’ 버튼 클릭
(4) ‘적용버튼을 클릭합니다.
(5) 여러 에러 중에서 ‘salesData’ 테이블에 담긴 에러들만 불러온 것을 확인할 수 있습니다.
(6) 불필요한 셀들을 숨기거나 제거하고, 새로운 열을 추가 후 ‘ArrayFormula’ 함수와 정규표현식을 활용하면 아래와 같이 에러가 발생한 탭이나, 행 정보를 보기 좋게 정리할 수 있습니다.
오늘은 빅쿼리의 에러 모니터링을 스프레드시트로 자동화하는 방법을 알아보았습니다. 쿼리 예약 기능을 통해 자동화된 데이터 처리를 수행하더라도 에러가 감지되지 않고 무시된다면, 잘못된 데이터 분석으로 이어질 수 있습니다. 따라서 에러 발생 시 빠른 대응을 위해 실시간으로 에러를 감지하고 적절히 대응할 수 있는 모니터링 시스템이 반드시 필요합니다.
오늘 배운 내용들은 실무에서 유용하게 사용할 수 있습니다. 빅쿼리의 ‘쿼리 예약’ 기능을 사용 중이신가요? 그렇다면 구글 클라우드에서 제공하는 ‘로그 라우터’를 통해 업무의 효율성을 더 높이시길 바랍니다!