Tiếp tục bài trước, FrequeneTribe hiện tại đã được có hệ thống CICD tương đối đầy đủ bao gồm Jenkins CICD pipeline để build và deploy app lên K8S, server RDS cho database …
Bài này sẽ đi sâu hơn về việc monitor hệ thống này thế nào
FrequenceTribe có tổng cộng 3 app frontend là amin, join, tribe viết bằng Angular 1 phần backend viết bằng python Django và 1 bot telegram PHP. Các app này đều có implement phần logging tuy nhiên khi developer check log để thực hiện troubleshooting vẫn phải thực hiện một cách thủ công là access vào từng pod server để view log
export KUBECONFIG=<path to k8s config file>
kubectl exec -it tribers-api-847fffd859-7tmq9 -n tribers bash
root@tribers-api-847fffd859-7tmq9:/app# ls -la ./logs/
total 1848
drwxr-xr-x 2 root root 4096 Mar 23 17:55 .
drwxr-xr-x 1 root root 4096 Mar 23 17:55 ..
-rw-r--r-- 1 root root 792186 Mar 24 01:18 healy.log
-rw-r--r-- 1 root root 0 Mar 23 17:55 healy_debug.log
-rw-r--r-- 1 root root 1077724 Mar 24 01:24 healy_request.log
Cách làm này khá thủ công, cho nên một giải pháp khác được sử dụng đó là deploys K8S dashboard
K8S dashboard

K8S dashboard là Web UI để triển khai các ứng dụng trên K8S cluster, khắc phục sự cố và quản lý các tài nguyên của K8S cluster. Bạn có thể sử dụng Dashboard để xem tổng quan về các ứng dụng đang chạy trên cụm của mình, cũng như để tạo hoặc sửa đổi các tài nguyên Kubernetes riêng lẻ, cung cấp thông tin về trạng thái của tài nguyên K8S cluster Deploy K8S dashboard tương đối đơn giản
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
Việc tiếp theo là cần expose K8S dashboard này ra internet, cách làm vẫn giống như cách deploy các app là sử dụng ingress controller, loadbalacing. Xem bài trước để biết chi tiết
Bạn có thể dễ tràng truy cập vào pod như cách dưới
https://grafana.com/Sau một thời gian sử dụng, nhận thấy khả năng visualize data, log của K8S dashboard còn nhiều hạn chế, team DevOps đã nghiên cứu giải pháp thay thế đó là sử dụng ELK stack để leverage thế mạnh của tool Grafana
Tuy nhiên, việc sử dụng ELK gặp issue về performance khi việc cài đặt Logstash làm hệ thống chạy khá chậm. Một công cụ thay thế ELK stack được áp dụng là Loki Stack, chức năng tương tự như ELK như nhẹ hơn

Loki được deploy lên K8S sử dụng helm
Loki stack bao gồm Loki, Promtail, Grafana, Prometheus
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install loki grafana/loki-stack --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false
Promtail là agent ship log content tới Loki instance hoặc Grafana cloud. Trong trường hợp này, promtail được deploy trên từng pod K8s để collect log
Deploy grafana lên k8s
helm install loki-grafana grafana/grafana
Get password để accesss
kubectl get secret --namespace <YOUR-NAMESPACE> loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Để expose Loki ra internet vẫn sử dụng cách cũ sử dụng ingress controller, load balacing
Config datasource là Loki trên grafan
Vậy là log của các app đã được collect trên grafana
0 Nhận xét