Giới thiệu
Hướng dẫn cài đặt và cấu hình Logging System trên Kubernetes với Grafana Loki và FluentBit.
Tổng quan
Hệ thống Log gồm ba thành phần chính:
- FluentBit thu thập logs và gửi logs tới Loki
- Loki là nơi lưu trữ logs
- Để xem logs ta dùng Grafana
Ta dùng Helm để cài các công cụ trên lên Kubernetes.
Loki
Tương tự như Prometheus dùng để lưu trữ metrics thì Loki dùng để lưu trữ logs.
Add Grafana Repo cho Loki:
helm repo add grafana https://grafana.github.io/helm-charts
Tạo tệp tin values.yaml
:
loki:
auth_enabled: true
commonConfig:
replication_factor: 1
storage:
type: "filesystem"
singleBinary:
replicas: 1
persistence:
size: 50Gi
test:
enabled: false
gateway:
basicAuth:
enabled: true
username: lokigw
password: rQgtlRCQMswOTvh
monitoring:
serviceMonitor:
enabled: false
selfMonitoring:
enabled: false
grafanaAgent:
installOperator: false
lokiCanary:
enabled: false
Ở trên ta cài Loki với cấu hình đơn giản cho môi trường dev, để triển khai cho môi trường product ta tham khảo ở đây Configure storage. Cài Loki:
helm -n observability install --create-namespace -f values.yaml loki grafana/loki
Kiểm tra:
kubectl get pod -n observability
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 50s
loki-gateway-18fi5ds94f-tgf4p 1/1 Running 0 50s
FluentBit
Thêm Fluent Repo:
helm repo add fluent https://fluent.github.io/helm-charts
Tạo tệp tin values.yaml
cho FluentBit:
image:
repository: grafana/fluent-bit-plugin-loki
tag: main-e2ed1c0
args:
- "-e"
- "/fluent-bit/bin/out_grafana_loki.so"
- --workdir=/fluent-bit/etc
- --config=/fluent-bit/etc/conf/fluent-bit.conf
config:
inputs: |
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
multiline.parser docker, cri
Mem_Buf_Limit 5MB
Skip_Long_Lines On
outputs: |
[Output]
Name grafana-loki
Match kube.*
Url http://loki:3100/loki/api/v1/push
TenantID 1
Labels {job="loki-collector"}
LabelKeys level,app
BatchWait 1
BatchSize 1001024
LineFormat json
AutoKubernetesLabels true
Ở tệp tin trên các bạn chú ý thuộc tính Labels {job="loki-collector"}
. Cài FluentBit:
helm -n observability install -f values.yaml fluent-bit fluent/fluent-bit
Grafana
Để xem được logs ta cần cài Grafana:
helm -n observability install -f values.yaml grafana grafana/grafana
Kiểm tra:
kubectl get pod
NAME READY STATUS RESTARTS AGE
fluent-bit-dt37a 1/1 Running 0 50s
grafana-537adka914-38dc1 1/1 Running 0 50s
loki-0 1/1 Running 0 50s
loki-gateway-18fi5ds94f-tgf4p 1/1 Running 0 50s
Truy cập Grafana:
kubectl -n observability port-forward svc/grafana 3000:80
Lấy mật khẩu Grafana:
kubectl get secret -n observability grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Truy vấn logs
Mở trình duyệt và truy cập localhost:3000
và nhập vào username là admin
và password ở trên. Ở Menu ta chọn mục Connections → Data sources → Add new data source và chọn Loki. Điền vào như sau:
Mở mục HTTP headers và thêm vào Header X-Scope-OrgID với Value là 1.
Bấm Save. Sau đó ở Menu ta chọn mục Explore và điền vào giá trị {job="loki-collector"}
.
Bấm Run query ta sẽ thấy logs.
Kết luận
Nếu hệ thống chỉ cần lưu trữ logs để kiểm tra lỗi hoặc log real-time mà không cần phân tích phức tạp thì có thể sử dụng bộ Grafana Loki để hệ thống gọn nhẹ. Trường hợp cần phân tích log và query phức tạp thì nên dùng bộ EFK (Elasticsearch + FluentBit + Kibana).
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?