Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

FrequencyTribe 3 - K8S monitoring



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

Kubernetes Dashboard UI
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 Logo

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



Đăng nhận xét

0 Nhận xét