본 포스팅은 GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(1)에서 이어지는 글입니다.
GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(1)
저번 포스팅에서 우리는 GKE Cluster의 관측 가능성을 확보하기 위해 Kubernetes 모니터링 툴인 Prometheus를 설치하고 사용해봤습니다.
이번 포스팅에서는 Prometheus에서 수집한 다양한 메트릭들을 보기 쉽도록 데이터 시각화(Data visualization) 툴인 Grafana를 이용해 대쉬보드를 구성해보겠습니다.
물론 저번 포스팅에서 봤듯이 Prometheus만으로도 메트릭을 기반으로 한 데이터 시각화는 가능했지만, Grafana의 대쉬보드 기능과 경고(Alerting), 그리고 여러 데이터 소스를 통합할 수 있다는 편리성을 이용하면 더 강력하게 관측 가능성(Observability)을 확보할 수 있습니다.
1. 관측 가능성 확보를 위한 두번째 단계 - Dashboard
Kubernetes 클러스터에 대한 관측 가능성을 확보하고자 데이터를 수집만 하고 이를 활용하지 못하면 의미가 없을 것입니다.
그렇다면 관측 가능성을 위해 데이터를 활용할 수 있는 방법에는 무엇이 있을까요?
데이터를 활용할 수 있는 대표적인 방법으로는 데이터를 기반으로 대쉬보드를 구성해 인간이 보기 편한 화면을 제공하는 것이 있습니다.
특히 현재 많은 대쉬보드 툴이 존재하지만 그 중에서도 시계열(Time-series) 데이터 기반 대쉬보드를 제공하는 Grafana가 Prometheus와 함께 가장 널리 쓰이는 옵션입니다.
그 이유는 Prometheus 또한 시계열(Time-series)를 기반으로 하는 메트릭을 수집 및 관리하기 때문인데요. 덕분에 Grafana는 Prometheus와 함께 Kubernetes를 위한 모니터링 Stack으로 널리 활용되고 있습니다.
더불어 Grafana는 강력한 경고(Alerting) 기능과 다양한 데이터 소스를 지원하며 다양한 플러그인을 사용할 수 있습니다. 이번 포스팅에서 자세히 다뤄보도록 하겠습니다.
2. Grafana 구성
이미 저번 포스팅에서 Helm을 이용해 Prometheus-grafana 스택 설치를 진행했기 때문에 이미 GKE 클러스터에는 Grafana pod가 생성되어 있습니다.
아래 명령어를 이용해 Grafana가 GKE Cluster에서 돌고 있는지 확인할 수 있습니다.
1
|
kubectl get pods -n monitor
|
cs |
아래와 같이 "monitor" namespace의 pod 중에서 "..-grafana-.." 이름을 가진 pod를 확인하는 것으로 Grafana가 실행되고 있는지 볼 수 있습니다.
이제 port-forwarding을 통해 Web UI로 Grafana에 접속해보겠습니다. 아래 명령어를 입력합니다.
1
2
|
export POD_NAME=$(kubectl get pods -n monitor -l "app.kubernetes.io/name=grafana" -o jsonpath='{.items[0].metadata.name}')
kubectl port-forward $POD_NAME -n monitor 3000
|
cs |
입력 후 localhost:3000 주소를 접속하면 Grafana 로그인 화면이 뜨는 것을 확인할 수 있습니다.
첫 접속 시에는 Grafana에 설정된 default username과 password를 입력해야 로그인할 수 있습니다.
username은 "admin"이지만 password는 종종 다르기 때문에 아래 명령어로 설정된 default password를 확인해야 합니다.
1
2
|
export SECRET_NAME=$(kubectl get secret -l "app.kubernetes.io/name=grafana" -o jsonpath='{.items[0].metadata.name}' -n monitor)
kubectl get secret --namespace monitor $SECRET_NAME -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
|
cs |
명령어를 입력하면 아래와 같이 default password가 출력됩니다. 첫 로그인 시에는 이 비밀번호로 로그인하도록 합니다.
로그인에 성공하면 Grafana의 홈페이지를 볼 수 있습니다. 이제 이 웹 UI에서 다양한 Grafana의 기능들을 구성할 수 있습니다.
포트포워딩을 통한 접속은 일시적이기 때문에 이제부턴 Loadbalancer 서비스를 생성하는 방법으로 외부 IP를 통해서 영구적으로 Grafana에 접속할 수 있도록 구성합니다.
아래의 yaml 명세를 적용해 Loadbalancer 서비스를 생성합니다. 이후 생성된 LB의 외부 IP로 접속하면 Grafana 웹에 접근할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
apiVersion: v1
kind: Service
metadata:
name: grafana-lb
namespace: monitor
spec:
ports:
- port: 8080
targePort : 3000
name: http
type: LoadBalancer
selector:
app.kubernetes.io/name : grafana
|
cs |
3. Grafana 대쉬보드
Grafana를 사용하는 이유인 대쉬보드를 구성해보겠습니다.
대쉬보드를 구성하기 위해서는 먼저 데이터를 가져올 장소인 데이터 소스를 먼저 추가해야 합니다.
Grafana의 데이터 소스는 좌측 Configuration -> Data sources 탭에서 관리할 수 있습니다.
해당 탭에 접근하면 이미 default로 Prometheus 데이터 소스가 추가되어 있는 것을 확인할 수 있습니다.
Prometheus-grafana 스택은 기본적으로 클러스터 내의 Prometheus pod 주소로 데이터 소스를 지정합니다.
등록된 Prometheus 데이터 소스를 클릭 후 상단의 Dashboard 탭으로 진입하면 해당 데이터 소스로 구성할 수 있는 대쉬보드의 목록을 볼 수 있습니다. 여기서 기본적으로 이용할 수 있는 대쉬보드를 import할 수 있습니다.
import한 대쉬보드들은 좌측의 Dashboards -> Manage 탭에서 확인할 수 있습니다.
방금 import한 대쉬보드 외에도 다양한 대쉬보드들을 기본적으로 제공하는 것을 볼 수 있습니다.
Grafana는 Kubernetes의 상태를 알 수 있는 다양한 대쉬보드들을 제공하고 있습니다.
이 대쉬보드들로도 충분히 운영하고 있는 Kubernetes 클러스터에 대한 관측 가능성을 확보할 수 있습니다.
기본적으로 제공되는 대쉬보드로 부족하다면 직접 대쉬보드를 구성하거나 다른 이들이 제작한 대쉬보드를 import할 수도 있습니다.
Grafana 공식 홈페이지에서 제작한 대쉬보드들을 볼 수 있으며 대쉬보드마다 붙여진 ID를 통해 쉽게 이를 import할 수 있습니다.
원하는 대쉬보드의 ID를 Grafana 웹 UI의 Dashboards -> Manage -> import 에 입력하면 해당 ID의 대쉬보드를 생성할 수 있습니다.
4. Grafana 알람(Alert)
Grafana의 대쉬보드 기능 외에도 조건을 충족할 시 원하는 채널로 Alert을 보내주는 기능도 사용할 수 있습니다.
Alerting 기능을 사용하기 위해 우선 알람을 받을 채널을 설정해야 합니다.
Grafana 웹 UI의 좌측 Alerting -> Notification channels 페이지로 진입합니다.
채널을 등록했다면 이제 알람을 울릴 조건인 Alert rule을 설정해야 합니다.
Alert rule은 대쉬보드 내 특정 panel의 edit 페이지에서 설정할 수 있습니다.
아래와 같이 그래프를 기준으로 설정하거나 특정한 값을 기준으로 조건을 설정한 뒤, 알람을 보낼 채널과 메세지를 지정하고 상단의 Apply 버튼을 클릭해 Alert rule을 생성합니다.
이후 대쉬보드를 저장해야 Alert이 유지되기 때문에 꼭 Save dashboard를 해야 합니다.
대쉬보드를 저장한 뒤 아래와 같이 Alert rule 페이지에서 rule이 추가된 것을 확인할 수 있습니다.
이제 설정한 alert rule의 조건을 충족했을 시 지정한 채널로 alert을 받을 수 있습니다.
Google chat 외에도 Slack, MS Teams 등의 다양한 채널을 지원하며 Webhook으로 Alert을 발신할 수 있기 때문에 유연한 Alerting을 구성할 수 있습니다.
이를 통해 원하는 채널에 GKE에서 수집한 메트릭을 기반으로 Alerting을 설정할 수 있습니다.
5. Grafana with Google Cloud Monitoring
위와 같이 Prometheus에서 수집한 메트릭을 기반으로 대쉬보드를 구성할 수도 있지만 GCP의 모니터링 서비스인 Cloud Monitoring(구 Stackdriver)도 데이터 소스로 추가할 수 있어 이를 기반으로 대쉬보드를 구성할 수 있습니다.
좌측 Data sources -> Add data source에서 Google Cloud Monitoring을 선택하는 것으로 Cloud monitoring에서 수집한 메트릭을 데이터 소스로 활용할 수 있습니다.
데이터 소스 추가 시 Grafana가 Cloud monitoring에 접근할때 사용할 인증 방법으로 Service account key file과 GCE default service account 중 하나를 선택할 수 있습니다.
Service account key file의 경우 미리 생성한 Servie account key 파일을 업로드해 이를 기반으로 인증을 수행하게 됩니다.
GCE default service account는 현재 GKE가 사용하고 있는 GCE service account를 기반으로 인증을 수행합니다.
두 인증 방법 다 사용하는 Service account가 최소 Cloud monitoring viewr Role 이상을 가져야 동작하게 됩니다.
Google Cloud monitoring 데이터 소스도 다양한 기본 대쉬보드 템플릿을 제공하고 있습니다.
이렇게 Prometheus와 Google Cloud monitoring 데이터 소스를 추가함으로써 두 소스에서 수집한 메트릭들을 통합적으로 사용하여 대쉬보드를 구성할 수도 있습니다.
여기까지 Prometheus 서버를 구성하고 이를 기반으로 Grafana 대쉬보드까지 구성하는 것으로 Kubernetes의 관측 가능성 확보를 위한 두 단계를 마쳤습니다.
다음 포스팅에서는 마지막 단계인 로깅 툴 Loki를 GKE 위에 구성해 메트릭이 아닌 로그를 기반으로 어떻게 관측 가능성 확보를 할 수 있는지 알아보겠습니다.
GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(1)
GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(3)
'Observability' 카테고리의 다른 글
Elasticsearch에 fluentd를 얹은 EFK stack 구축하기(with kubernetes) (9) | 2022.01.08 |
---|---|
클라우드 리소스 Observability 확보 도구 Steampipe 사용기 + GCP IAM report 제작기 (0) | 2021.12.27 |
Elasticsearch의 ELK Stack을 GKE Cluster에 구성해 GCP 관측 가능성 확보하기 (6) | 2021.12.12 |
GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(3) (0) | 2021.08.20 |
GKE Prometheus, Loki, Grafana로 Monitoring dashboard 구성하기(1) (2) | 2021.08.10 |