[GCP]Stackdriver logging 과 BigQuery

in google •  7 years ago 

안녕하세요 이정운 입니다.

지난번까지 진행된 두번의 stackdriver 관련 이야기를 통해서 기본적인 부분을 살펴봤다면 이번에는 좀 더 확장하여 Stackdriver logging 데이터를 Bigquery 에 자동으로 동기화 시키고 이 데이터를 이용해서 분석 및 시각화 하는 작업까지 한 턴을 돌아보려고 합니다. 잘 아시는 것처럼 실제 운영환경에서는 다양한 로그들이 엄청나게 많이 나오며 이러한 로그를 적절하게 분석하기 위한 환경을 마련한 후 실제 통찰력을 얻기 위한 리포트까지 어떻게하면 뽑을 수 있는가는 어디서나 고민해볼수 있는 질문입니다. 실제로 GCP에서 그런 구성을 한번 수행한 후에 어떻게 해당 작업을 수행할 수 있는지 하나씩 살펴보도록 하겠습니다.

지난번에 한번 이야기 드렸던 클라우드 전용 데이터 웨어하우스인 BigQuery 를 사용할 예정이구요. 이를 통해서 저렴하게 대량의 데이터를 보관하는 것에 그치지 않고 그 안에서 데이터에 대한 통찰력을 얻기 위하여 분석 및 시각화하는 부분까지 살펴볼 수 있는 Google Data Studio 까지 한번에 연결해서 살펴보고자 합니다. Google Data Studio 는 마치 워드처럼 읽기 쉽고 공유가 쉬우며 완벽하게 맞춤 설정이 가능한 대시보드와 보고서를 생성할 수 있도록 지원하는 도구 입니다. (https://cloud.google.com/data-studio/) 쉽게 설명 드리면 BigQuery 로 데이터소스를 연결하여 BigQuery 에 있는 데이터로 필요한 대쉬보드나 보고서를 만들수 있게 지원할 수 있습니다.

이번 이야기는 하단의 링크를 참고해서 진행합니다.

Real-time logs analysis using Fluentd and BigQuery
https://cloud.google.com/solutions/real-time/fluentd-bigquery

Using Exported Logs
https://cloud.google.com/logging/docs/export/using_exported_logs

The Beginner’s Guide to Google Data Studio
https://www.searchenginejournal.com/beginners-guide-google-data-studio/187465/


#1) Stackdriver Logging 의 모니터링 데이터 전송 방식 변경

먼저 기존에 Stackdriver Logging 에 쌓인 데이터를 참고해보면 GCE 에서 보낸 정보라 필요한 정보가 안타깝게도 textPayload 에 하나의 String 형태로 들어와 있어서 해당 정보를 제대로 분석하거나 파악하려면 String 을 읽어 드린 후에 다시한번 별도로 해당 로그를 파싱하는 작업을 수행해야만 필요한 정보를 뽑아 낼 수 있습니다.
img

이렇게 되면 실제적으로 로그를 분석하기 위한 작업을 위해서 파싱 작업을 한번 더 거쳐야 하기 때문에 복잡하기도 하고 비효율적이기도 합니다. 이를 위해서 Google cloud 의 Stackdriver Logging 은 이전에 한번 언급드렸지만 실제 고객이 많이 사용하는 오픈 소스인 fluentd 기반이라 이를 활용하여 다양하게 파싱 설정을 변경하는 작업이 가능합니다. (GAE 는 파싱이 이미 적용되어 있지만 GCE 의 경우에는 필요에 따라서 변경 가능합니다.)

https://github.com/GoogleCloudPlatform/fluentd-catch-all-config/tree/master/configs/config.d
img

다만 이 부분을 고민할 필요가 없는게 이미 필요한 부분은 Google Cloud Platform 팀이 작업해서 github 로 공유해놨으며 여기서 본인이 적용하고자 하는 솔루션에 맞추어서 다운로드 받아서 사용만 하면 됩니다. (참, 쉽죠!) 예를 들어 제가 이번에 적용한 샘플은 이전 강좌에서 사용한 Nginx 라고 가정한다면 google-fluentd 폴더에 들어가서 다양한 설정 파일 중에 Nginx 와 연관된 nginx.conf 파일을 github 에 있는 내용으로 수정하시면 됩니다.

cd /etc/google-fluentd
img

sudo vi /etc/google-fluentd/nginx.conf

<source>
@type tail
 format nginx
 path /var/log/nginx/access.log
 pos_file /var/lib/google-fluentd/pos/nginx-access.pos
 read_from_head true
 tag nginx-access
</source>
<source>
 @type tail
 format none
 path /var/log/nginx/error.log
 pos_file /var/lib/google-fluentd/pos/nginx-error.pos
 read_from_head true
 tag nginx-error
</source>

이렇게 수정한후 설정 내용의 반영을 위하여 하단과 같이 googlde-fluentd 에이전트를 재시작 합니다.

sudo service google-fluentd restart

위와 같은 단순 작업을 거치게 되면 이제 Stackdriver logging 화면에서 실제 Nginx 에 대한 로그를 확인해 보면 이전과 다르게 textPayload 로 하나로 들어오는 것이 아니라(이제 해당 필드는 null 이 됨) 하단과 같이 jsonPayload 에서 각 필드로 분리해서 들어온 것을 확인 가능합니다.
img


#2) Stackdriver Logging 의 export sync 설정 — BigQuery

이렇게 Nginx 의 로그가 각 필드별로 분리되어 들어온 것이 확인 되었다면 그 뒤로 상단에 있는 ‘내보내기 만들기’를 클릭하여 export sync 설정을 하단과 같이 수행합니다. 이때, 싱크 서비스는 BigQuery 로 설정하고 싱크 대상 위치로는 미리 BigQuery 에서 만들어둔 비어있는 데이터셋 이름을 지정하면 됩니다. 이 때 당연한 이야기 이겠지만 지금 로그 뷰어에서 보여지는 로그가 바로 내보내기로 보낼 대상이 됩니다. 다시 말하면 로그 뷰어에서 다양한 필터를 사전에 적용하는 형태를 통해서 BigQuery 로 sync 할 Stackdriver Logging 의 내용을 원하는대로 설정할 수 있습니다.
img

이렇게 하면 하단과 같이 Stackdriver logging 에 내보내기 메뉴가 생성된 것을 확인 가능합니다.
img

바로 설정한 이후 부터 external sync 가 생성되지는 않으며 테스트를 몇 번 수행하여 log 파일이 생성된 것을 확인해 보면 시간이 조금 지난 후에(near real time ?) 설정 한데로 BigQuery 에 미리 지정된 데이터셋 밑으로 하단과 같은 테이블이 생성된 것을 확인할 수 있습니다.
img

실제로 preview 버튼을 통해 들어간 데이터를 확인해보거나 Select 를 통해서 확인해 보면 이전과 다르게 textPayload 에 내용이 있는 것이 아니라 jsonPayload 라는 이름으로 각 필드별로 분리되어 저장된 것을 확인 가능합니다.
img

이렇게 되면 BigQuery 라는 데이터 웨어하우스 입장에서는 표준 SQL 구문을 통해서 원하는 형태로 다양하게 분석 가능하고 활용할 수 있는 길이 열립니다.
img

당연히 이렇게 external sync 가 설정된 경우에는 추가적으로 수정이나 삭제하지 않는다면 하나의 파이프가 연결된 것처럼 계속적으로 Stackdriver Logging 데이터를 BigQuery 로 동기화하므로 최신 로깅데이터를 확인 가능합니다.


#3) BigQuery 데이터를 Data Studio 를 통해서 시각화

지난 파트까지 Stackdriver Logging 데이터를 external sync 기능을 통해서 자동으로 BigQuery 로 다 모아서 간단한 SQL 로 분석해봤습니다. 이제 이 데이터를 좀 더 보기 편하고 통찰력을 얻기 위하여 Data Studio 를 통해서 차트나 그래프로 시각화 해보도록 하겠습니다. 다시 말씀드리지만 Data Studio 는 BI Dashboard 와 동일하게 BigQuery 나 MySQL, PostgreSQL 등의 데이터를 좀 더 쉽게 시각화 하는것을 지원하는 도구 입니다.(현재까지는 베타이지만 별도의 비용이 없다는 장점이 있습니다.)

하단의 링크로 접속하면 Data Studio 콘솔에 접근 가능합니다.

https://datastudio.google.com/
img

그리고 새로운 보고서를 작성하기 위해서 템플릿을 사용하지 않고 ‘+’ 버튼을 클릭하면 하단과 같은 화면을 확인 가능하며 오른쪽 맨 하단에 있는 ‘새로운 데이터 소스 만들기’ 를 클릭합니다.
img

그러면 다양한 데이터소스를 확인 가능한데 이번 이야기의 목적에 맞게 BigQuery 를 선택하고 이전에 Stackdriver Logging 이 쌓이는 데이터 셋과 테이블을 선택합니다.
img

그러면 하단과 같이 데이터소스 연결이 새롭게 생성되면서 사전에 필드들에 대한 변경 및 검증을 할 수 있습니다. 이때 이슈가 없도록 필드 유형을 확인하고 필요한 경우에 수정을 합니다.
img

이렇게 작업을 하면 마치 Google Docs 와 굉장히 유사한 빈 페이지 화면이 나옵니다. 이제 상단에 있는 다양한 차트를 클릭 후 드래그&드랍을 통해서 해당 그래프를 바로 화면에 그릴 수 있습니다.
img

필드 자체가 숫자인 경우에는 알아서 합계나 카운트가 나오는 편이지만 텍스트인 경우에는 자동으로 이런 작업이 아직은 수행되지 않습니다. 즉, 텍스트 필드의 경우에는 바로 그래프로 그리기 어려운 경우가 많은데 이런 때는 계산 필드라는 것을 사용할 수 있습니다.
오른쪽 하단에 있는 ‘새 입력란 만들기’를 클릭하면 기존의 데이터 세트 이외에 새로운 계산 필드를 만들수 있습니다. 결과가 텍스트이긴 하지만 그 카운트에 대한 그래프를 쉽게 생성하기 위해서 하단과 같이 count() 와 같이 제공되는 수식을 사용하면 쉽게 계산필드를 만들수 있습니다. (생각보다 다양한 함수를 제공하오니 이는 추가로 확인해보시기 바라겠습니다.)
img

해당 필드가 200 정상일 경우와 4xx 일 경우의 필드도 하단과 같이 계산 필드의 수식을 통해서 한번 각각 만들어 봅니다.
img
img

이렇게 계산 필드를 추가한 후 해당 막대 그래프의 측정 기준과 측정 항목을 하단과 같이 변경합니다. 다시 말하여, 그래프를 그리고자 하는 ‘측정항목’에 텍스트인 필드를 직접 넣는 대신에 카운드를 계산하도록 만들어둔 계산 필드를 입력합니다.(기본 기간은 맞춤으로 해서 오늘을 포함해야 방금 테스트한 결과를 볼 수 있습니다)
img

이렇게 변경후에 그래프를 보면 하단과 같이 그래프가 잘 그려지는 것을 바로 확인할 수 있습니다.
img

이와 동일하게 이미 만들어진 계산 필드를 가지고 스코어 카드를 추가 생성하면 하단과 같은 보고서 화면을 만들 수 있습니다.
img

이렇게 보고서를 만들었다면 마치 구글 드라이브와 동일하게 ‘공유’ 기능을 통해서 필요시 다양한 사람과 아주 쉽게 공유 가능합니다.
여기까지 잘 수행했다면 이야기 처음에서 논의된 것처럼 GCE 에 설치된 Nginx 의 access log 를 활용하여 이를 external sync 인 BigQuery 로 모으고, 이렇게 모여진 데이터를 Data Studio 를 활용해서 보고서로 시각화하는 한 턴을 무사히 수행하신 것 입니다. 지금은 하나의 예제를 들었지만 이와 같은 방법으로 GCP 의 다양한 로그 데이터를 수집할 수 있고 이를 통해서 통찰력을 확보하기 위한 다양한 보고서나 그래프를 추가적으로 그려볼 수 있을 듯 합니다.

추신 : 이런 저런 테스트를 해보면서 느낀점은 Data Studio 는 보고서를 그리는 도구라 해당 도구에서 데이터에 대한 조작을 직접 많이 수행 하는 것들은 그렇게 하기보다는 미리 BigQuery 에서 view 나 통계 table 로 결과를 한번 만들어 내고 그것을 Data Studio 에서 보여주는 것이 좀 더 편리한 방법으로 보여집니다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @jwlee98! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Do not miss the last post from @steemitboard:

Carnival Challenge - Collect badge and win 5 STEEM
Vote for @Steemitboard as a witness and get one more award and increased upvotes!

Congratulations @jwlee98! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

Use your witness votes and get the Community Badge
Vote for @Steemitboard as a witness to get one more award and increased upvotes!