Published on

Monitoring Kubernetes cluster với Prometheus + Grafana

Bài viết này sẽ hướng dẫn cách giám sát Kubernetes cluster dùng Prometheus và Grafana. Về cơ bản, prometheus đóng vai trò thu thập các thông tin của cluster và Grafana chỉ đơn giản là công cụ giúp hiển thị các thông tin một cách trực quan thông qua các dashboard.

Deploy Kubernetes mainfest

Số lượng các resouce cần phải deploy khá là nhiều, nên mình đã gom lại và đẩy lên GitHub: https://github.com/nvtienanh/k8s-monitoring

Sau khi download xong, bạn cần phải chỉnh sửa 1 ít tùy theo hiện trạng cluster. Trong trường hợp của mình, sử dụng NFS PVC nên nếu bạn sử dụng cần:

  • Cập nhật IP của NFS server trong các file storage.yaml
  • Tạo các folder dùng để lưu trữu data trên NFS server
# Run command in NFS server
sudo mkdir -p /mnt/kubernetes/data/prometheus
sudo mkdir -p /mnt/kubernetes/data/grafana

Nếu bạn sử dụng các PVC khác thì bạn phải tự cập nhật lại các file storage.yaml Tiếp theo, chúng ta deploy tất cả các resource lên Kubernetes cluster

kubectl create namespace monitoring
kubectl apply -f prometheus/
kubectl apply -f kube-state-metrics/
kubectl apply -f node-exporter/
kubectl apply -f grafana/

Sau khi deploy xong, chúng ta có thể kiểm tra xem trạng thái của các resource đã được deploy:

kubectl get all -n monitoring
kubectl get all -n monitoring
NAME                                        READY   STATUS    RESTARTS   AGE
pod/grafana-6c5c86d879-z4485                1/1     Running   0          24h
pod/node-exporter-nlvzq                     1/1     Running   0          25h
pod/node-exporter-tlwlf                     1/1     Running   0          25h
pod/prometheus-deployment-9745f4dd4-nqqhh   1/1     Running   0          25h
NAME                         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/grafana              ClusterIP   10.99.183.180    <none>        3000/TCP   25h
service/node-exporter        ClusterIP   10.103.159.184   <none>        9100/TCP   25h
service/prometheus-service   ClusterIP   10.104.199.251   <none>        8080/TCP   25h
NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/node-exporter   2         2         2       2            2           <none>          25h
NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/grafana                 1/1     1            1           25h
deployment.apps/prometheus-deployment   1/1     1            1           25h
NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/grafana-575476c48f                0         0         0       25h
replicaset.apps/grafana-5b4dbfdf7c                0         0         0       25h
replicaset.apps/grafana-6c5c86d879                1         1         1       24h
replicaset.apps/grafana-7898b46bdc                0         0         0       25h
replicaset.apps/prometheus-deployment-9745f4dd4   1         1         1       25h

Sau khi deploy xong, các bạn có thể truy cập vào:

Tạo Grafana dashboard

Đầu tiên, bạn login vào grafana, user và mật khẩu mặc định là admin, bạn phải đổi mật khẩu trong lần đăng nhập đầu tiên.

Tiếp theo mình import Dashboard mẫu Node Exporter Full có ID là 1860, bằng cách vào phần Dashboard, import:

Chọn datasource là Prometheus, sau khi import xong thì chúng ta truy cập vào được Dashboard như hình dưới dây

Ngoài ra bạn có thể tham khảo và import các mẫu Dashboard khác theo nhu cầu.

Chúc thành công nvtienanh