Log Analytics

random-developer·2022년 11월 21일
0

Google Cloud

목록 보기
1/4

Log Analytics

Log Analytics 데모에서는 Google Cloud 의 Online Boutique 를 사용해보겠습니다.
Online Boutique 는 11티어 서비스로 구성된 데모용 EC 사이트입니다. 구글에서는 이 어플리케이션을 사용해서 K8s/GKE, Istio, Operations Suites 그리고 gRPC 데모를 실시합니다.
각 서비스는 서로 다른 언어로 만들어졌으며, 상호간에는 gRPC 로 통신합니다.

데모 서비스 준비

# Cloud Skills Boost 의 프로젝트 사용
gcloud auth list
gcloud config list project
gcloud config set compute/zone us-central1-a
gcloud container clusters list

# 클러스터 크레덴션 취득
gcloud container clusters get-credentials day2-ops --region us-central1
kubectl get nodes


# Online Boutique 를 배포
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo
kubectl apply -f release/kubernetes-manifests.yaml
kubectl get pods
export EXTERNAL_IP=$(kubectl get service frontend-external -o jsonpath="{.status.loadBalancer.ingress[0].ip}")
echo $EXTERNAL_IP
curl -o /dev/null -s -w "%{http_code}\n"  http://${EXTERNAL_IP}

Cloud Skills Boost 링크

Log Analytics용 로그 버킷 관리

Log Analytic를 사용하기 위해서는 Log Analytics용 버킷을 사용합니다. 이 버킷 설정에는 두가지 방법이 있습니다.

  1. 기존 버킷을 업그레이드
  2. 새로운 버킷을 생성

버킷을 생성했으면, Logs Router 의 inclusive filters & exclusive filters 을 설정해서 어떤 로그가 해당 버킷으로 흘러가게할지 설정합니다.

이제 Logs Explorer 에서는 REFINE SCOPE을 사용해서 해당 버킷에서만 읽어들일 수 있고, Log Analytics를 사용하기 위한 준비 또한 끝났습니다.

SQL로 로그 분석해보기

아래와 같은 SQL로 frontend 서비스의 min, max, and average latencies를 분석해보는것이 가능합니다.

SELECT
hour,
MIN(took_ms) AS min,
MAX(took_ms) AS max,
AVG(took_ms) AS avg
FROM (
SELECT
  FORMAT_TIMESTAMP("%H", timestamp) AS hour,
  CAST( JSON_VALUE(json_payload,
      '$."http.resp.took_ms"') AS INT64 ) AS took_ms
FROM
  `버킷의 주소`
WHERE
  timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR)
  AND json_payload IS NOT NULL
  AND SEARCH(labels,
    "frontend")
  AND JSON_VALUE(json_payload.message) = "request complete"
ORDER BY
  took_ms DESC,
  timestamp ASC )
GROUP BY
1
ORDER BY
1

RESTful API 를 활용하는 경우, 아래와 같이 특정 프로덕트 페이지가 몇 번 호출되었는지 확인 가능합니다.

SELECT
count(*)
FROM
`버킷 주소`
WHERE
text_payload like "GET %/product/L9ECAV7KIM %"
AND
timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

또는, checkout 까지 진행된 세션이 몇 개 있었는지 확인하는 것도 가능합니다.

SELECT
 JSON_VALUE(json_payload.session),
 COUNT(*)
FROM
 `버킷 주소`
WHERE
 JSON_VALUE(json_payload['http.req.method']) = "POST"
 AND JSON_VALUE(json_payload['http.req.path']) = "/cart/checkout"
 AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)
GROUP BY
 JSON_VALUE(json_payload.session)
profile
getRandomDeveloper()

0개의 댓글