개요
예기치 못한 에러 때문에 개발자가 모르는 사이 서비스가 갑자기 다운될 수도 있다. 이러한 이슈를 방지하기 위해 로그를 모니터링하는 것은 매우 중요한 일이며, 메일, slack, chat 등으로 실시간 알림을 통해 로그를 모니터링할 수 있다.
Cloud Logging
Cloud Logging을 보면 정말 많은 로그들이 실시간으로 쌓이고 있다.
이번 포스팅에서는 Error 관련 로그가 발생했을 때 회사의 DEV 계정으로 메일 알림을 전송하는 것을 세팅해보도록 한다.
Cloud Logging의 가장 우측에 알림 만들기라는 버튼을 클릭하자.
원래 이 서비스는 없었고 StackDriver라는 서비스로 지원됐었는데, 새로 생겼다고 한다. 그래서 Cloud Logging 관련 리서치를 하면 여전히 Stackdriver에 관련한 자료가 훨씬 많다. 😭 GCP 최대단점 자료가 비교적 없다.....!
여튼 알림 만들기 버튼을 클릭하면 어떤 로그를 트리거할지 설정하는 창이 나온다.
이름을 적절하게 만들어주고 Policy 레벨도 긴급도를 판단하여 설정해주면 된다.
이제 ERROR 사항을 트리거하기 위해서 쿼리를 설정하는데, 크리티컬하지 않은 ssh key 관련 에러사항까지 모두 알림을 받게된다. 로깅 쿼리 작성을 통해 원하는 로그만 트리거할 수 있다.
Cloud Logging 쿼리문을 통해 원하는 로그 트리거하기
먼저 로그를 살펴보면 jsonPayload 로 작성되어 있는데, 이는 로그 항목을 구조화한 것으로 이 문서에서 자세히 확인할 수 있다. 로그의 가독성을 높이기 위해서 JSON 형식으로 로그 메시지를 구조화하여 기록한 것이다. 이러한 구조화된 로깅은 쿼리문을 구조에 맞춰서 작성해주어야 한다.
로깅 검색창에 원하는 키워드를 체크하면 아래와 같이 쿼리문을 자동으로 작성해주므로 문법을 다 외울 필요는 없다. 이 내용을 복사해서 알림을 생성할 때 작성해주면 된다. 다만 좀 더 세밀한 조작을 위해 Cloud Logging에서 제공하는 정규표현식 사용에 대해 알아보자.
정규 표현식을 사용한 Cloud Logging 쿼리
일반 텍스트 쿼리보다 더 빠르고, 더 세밀한 쿼리문 작성을 위해서 정규 표현식을 제공한다.
정규 표현식 쿼리의 특징은 다음과 같다.
- 문자열 유형의 필드만 정규 표현식과 일치할 수 있다.
- 문자열 정규화는 수행되지 않는다. 소문자/대문자 구별 O, kubernetes와 KUBERNETES는 다른 것으로 처리한다.
- =~ 및 !~는 쿼리를 정규 표현식 쿼리로 변경하며, 일치시키려는 패턴은 큰따옴표 안에 있어야 한다.
- 패턴 일치
jsonPayload.message =~ "이 표현을 포함해줘"
- 패턴과 일치하지 않음
jsonPayload.message !~ "이 표현은 걸러줘"
정규 표현식에 맞춰서 로깅을 트리거 해보면 내가 제거하고자하는 에러메시지들은 트리거가 되지 않는 것을 확인할 수 있다.
작성한 로깅 쿼리 예시
resource.type="gce_instance"
severity: "ERROR"
jsonPayload.message !~ "Invalid ssh key entry"
jsonPayload.message !~ "Failed to re-create tokens"
jsonPayload.message !~ "The refresh token has been expired"
NOT jsonPayload.message =~ "^can't find"
로그 알림 타이머 설정
알림시간 간격을 설정할 수 있다. 또한 내가 설정한 에러가 발생하지 않으면 해당 이슈를 자동으로 종료하도록 설정할 수 있다. 일단 로그 알림이 잘 전송되는지 확인하기 위한 것이므로 하루 단위로 알림을 하되, 일주일 이내에 자동 종료를 하도록 설정해두었다.
로그 알림 채널 설정
마지막으로 알림 채널 설정을 해주면 완료된다.
필자는 로그 알림 전용 이메일을 만들어 두었기에 Email을 선택하고, 간단하게 이메일 주소를 입력하여 등록을 완료하였다.
채널까지 세팅 완료!.. 하루 기다렸다가 결과에 대해서도 업로드 해보겠다.
앞으로 로깅 전략을 공부해서 어떤 방식으로 서버를 모니터링 할 것인지에 대해 전략을 세워야 할 것이다. 지금까지 우리 회사에 이러한 관리 체계가 없었는데 적극적으로 체계적인 로깅 모니터링을 구축해서 서버 관리 및 서비스 품질 향상에 기여해보고 싶다!
로그 결과 메일
상세 내역 등은 수정이 좀 필요해보이지만 메일 알림은 잘 전달되었다.
'DevOps > DevOps' 카테고리의 다른 글
[AWS] public & private subnet 분리로 서버 운영하기 (2) | 2024.04.07 |
---|---|
[AWS] AWS CLI 설정 및 활용하기 (0) | 2024.03.24 |
[GCP] Google Cloud Load Balancer, GCP 로드밸런서 구축 | Cloud NAT와 로드밸런서 | Cloudflare (0) | 2024.01.29 |
[GCP] Cloud Nat Gateway 구축 과정 및 작동 방식 (1) | 2024.01.29 |
[GCP] Instance Template과 Instance Group을 통한 VM 서버 생성과 블루-그린 배포 (0) | 2024.01.29 |