DevOPS Kiến Thức Linux Monitoring

Sử dụng Loki Quản Lý Log Ứng Dụng Trong K8s

Tổng Quan Về Loki

Trong bài hướng dẫn này, chúng ta sẽ tìm hiểu về cách để thu thập logs trong Kubernetes sử dụng Loki và Grafana. Loki là một hệ thống tích hợp log được lấy cảm hứng từ Promethues.

Chúng tôi tin rằng nó dễ trong việc vận hành trong môi trường Kubernetes, bằng việc không đánh Index phần nội dung của log, thay vào đó nó chỉ đặt tên nhãn ( label) cho các log.

Giống như trong môi trường Cloud-native, Promethues là một trong những giải pháp phổ biến cho hoạt động giám sát hệ thống. Bạn có thể sử dụng lại các nhãn cùng tên mà bạn đã đặt trong Promethues. Ví dụ, trong Kubernetes các metadata ( tạm dịch: Siêu dữ liệu) đang được đánh nhãn theo đối tượng ( Object label) có thể sử dụng những nhãn này cho cả luôn Loki. Nếu như bạn đang sử dụng Grafana cho việc tạo Dashboard và giám sát, việc dùng Loki sẽ giúp bạn có thể tích hợp cả 2 tính năng là vừa Logging vừa Monitoring.

Yêu cầu:

  • Bạn phải có sẵn một Cluster Kubernetes Kapsule
  • Có sẵn công cụ kubectl
  • Và cuối cùng là phải có sẵn helm trên hệ thống k8s.

Cài đặt Loki

Ứng dụng loki không có sẵn mặc định trong Repositories của Helm. Chính vì vậy, chúng ta sẽ thêm nó vào và tiến hành cập nhật lại heml.

$ helm repo add loki https://grafana.github.io/loki/charts
"loki" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "loki" chart repository
[..]
$ helm search repo loki
NAME            CHART VERSION   APP VERSION     DESCRIPTION
loki/loki       0.31.1          v1.6.0          Loki: like Prometheus, but for logs.
loki/loki-stack 0.41.1          v1.6.0          Loki: like Prometheus, but for logs.
loki/fluent-bit 0.3.1           v1.6.0          Uses fluent-bit Loki go plugin for gathering lo...
loki/promtail   0.25.1          v1.6.0          Responsible for gathering logs and sending them...

Khi cài đặt Loki với Helm, chúng ta sẽ cần bật tính năng Persistence Volumes khi sử dụng cho hệ thống Kubernetes.

  • loki.persistence.enabled : true
  • loki.persistence.size: 100Gi

Chúng ta sẽ sử dụng storage class mặc định của Kapsule có tên “scw-bsdd” để tạo khối  volume.
Chạy câu lệnh sau để tiến hành cài đặt:

$ helm install loki-stack loki/loki-stack \
                               --create-namespace \
                               --namespace loki-stack \
                               --set promtail.enabled=true,loki.persistence.enabled=true,loki.persistence.size=100Gi

Nếu như bạn có dự định sẽ dùng Loki trên môi trường Production, phải đảm bảo là bạn phải thiết lập tính năng retention để tránh tình trạng bị đầy dữ liệu. Ví dụ, nếu muốn giữ log lại 30 ngày, những log vượt quá 30 ngày sẽ bị xóa đi, thì hãy thiết lập retention  là 30.

  • config.table_manager.retention_deletes_enabled : true
  • config.table_manager.retention_period: 720h

Sử dụng Helm, cài đặt Grafana trong cùng Namespace của Loki, bạn cũng nên bật tính năng persistence cho grafana luôn.

  • persistence.enabled: true
  • persistence.type: pvc
  • persistence.size: 10Gi
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm install loki-grafana grafana/grafana \
                              --set persistence.enabled=true,persistence.type=pvc,persistence.size=10Gi \
                              --namespace=loki-stack

Kiểm tra lại block device:

$ kubectl get pv,pvc -n loki-stack
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                STORAGECLASS   REASON   AGE
persistentvolume/pvc-53a60678-f132-4e62-b568-3518a20d6bd3   10Gi       RWO            Delete           Bound    loki-stack/loki-grafana              scw-bssd                16s
persistentvolume/pvc-8d605c6a-154c-4a4f-9dc0-7edce1825106   100Gi      RWO            Delete           Bound    loki-stack/storage-loki-stack-0      scw-bssd                5m29s

NAME                                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/loki-grafana           Bound    pvc-53a60678-f132-4e62-b568-3518a20d6bd3   10Gi       RWO            scw-bssd       17s
persistentvolumeclaim/storage-loki-stack-0   Bound    pvc-8d605c6a-154c-4a4f-9dc0-7edce1825106   100Gi      RWO            scw-bssd       5m30s

Now that both Loki and Grafana are installed in the cluster, check if the pods are correctly running:

$ kubectl get pods -n loki-stack

NAME                               READY   STATUS    RESTARTS   AGE
loki-grafana-75f788cb85-xqchj      1/1     Running   0          4m32s
loki-stack-0                       1/1     Running   0          17m
[..]
loki-stack-promtail-4nnkd          1/1     Running   0          17m
[..]

Để có thể kết nối được với Grafana để đặt user/password, chúng ta sử dụng port-forward như sau:

$ kubectl get secret --namespace loki-stack loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
8DaJk0m1gmS4t1OgXkpgZXs46PaUQn5iydvsZS7g
$ kubectl port-forward --namespace loki-stack service/loki-grafana 3000:80
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000

Truy cập giao diện web của Grafana http://localhost:3000 , màn hình đăng nhập sẽ như sau:

loki grafana access

Thêm Source của Loki vào Grafana ( http://loki-stack.loki-stack:3100)

loki add datasource

Bây giờ, bạn có thể truy cập được log trong Kuberntes.

loki graph

Chúng ta vừa cài đặt xong phần ứng dụng Loki, giờ đây tất cả Logs của các Pods sẽ được lưu trữ trong Loki và bạn có thể xem, truy vấn đến ứng dụng của bạn trong Grafana. Để tìm hiểu sâu hơn về các ngôn ngữ truy vấn của Loki, bạn có thể tham khảo tại đây.

Chúc các bạn thành công !!!

Tags

Add Comment

Click here to post a comment