Loki là một công cụ mạnh mẽ và ngày càng phổ biến trong việc thu thập và phân tích log. Bài viết này mình sẽ tìm hiểu một số kiến thức cơ bản về Loki nhé.
Loki là gì?
Loki là một hệ thống lưu trữ log được thiết kế đặc biệt cho các ứng dụng container hóa và các hệ thống phân tán. Nó được xây dựng để xử lý lượng lớn log với tốc độ cao và hiệu quả, đồng thời cung cấp khả năng truy vấn và phân tích dữ liệu log một cách linh hoạt. Loki hoạt động tốt nhất khi kết hợp với Grafana, một công cụ trực quan hóa dữ liệu phổ biến, để tạo ra các dashboard đẹp mắt và trực quan.
Tại sao chọn Loki?
- Hiệu suất cao: Loki được thiết kế để xử lý lượng lớn log với tốc độ cao, nhờ vào việc sử dụng dạng database time series và nén dữ liệu hiệu quả.
- Linh hoạt: Loki cho phép bạn lưu trữ các log có cấu trúc hoặc không cấu trúc, và hỗ trợ nhiều định dạng log khác nhau.
- Truy vấn mạnh mẽ: Ngôn ngữ truy vấn LogQL của Loki cung cấp cho bạn khả năng thực hiện các truy vấn phức tạp để tìm kiếm và phân tích dữ liệu log.
- Tích hợp với Grafana: Loki tích hợp sẵn với Grafana, cho phép bạn tạo các dashboard trực quan để theo dõi và phân tích log.
- Chi phí thấp: Loki là một dự án mã nguồn mở, và có thể chạy trên các máy chủ có cấu hình thấp.
Các thành phần chính của Loki.
- Promtail: Là một agent thu thập log từ các nguồn khác nhau (container, hệ thống file, v.v.) và gửi đến Loki.
- Loki server: Nhận và lưu trữ các log, tạo các chỉ mục để tìm kiếm nhanh chóng.
- Grafana: Công cụ trực quan hóa, cho phép bạn tạo các dashboard để xem và phân tích log.
Các trường hợp sử dụng điển hình.
- Giám sát log của ứng dụng container: Loki là một lựa chọn tuyệt vời để theo dõi log của các ứng dụng chạy trong Kubernetes hoặc Docker.
- Phân tích lỗi: Loki giúp bạn nhanh chóng tìm ra nguyên nhân gốc rễ của các vấn đề bằng cách tìm kiếm các log liên quan.
- Theo dõi hiệu suất: Bạn có thể sử dụng Loki để theo dõi hiệu suất của các ứng dụng và dịch vụ.
- Tìm kiếm log: Loki cung cấp một giao diện tìm kiếm mạnh mẽ để bạn tìm thấy các log bạn cần một cách nhanh chóng.
Lợi ích khi sử dụng Loki.
- Nâng cao khả năng quan sát hệ thống: Loki giúp bạn hiểu rõ hơn về hệ thống của mình bằng cách cung cấp một cái nhìn tổng quan về các log.
- Phát hiện và khắc phục sự cố nhanh hơn: Loki giúp bạn nhanh chóng xác định và khắc phục các vấn đề khi chúng xảy ra.
- Tối ưu hóa hiệu suất: Loki có thể giúp bạn xác định các bottleneck và cải thiện hiệu suất của hệ thống.
- Tuân thủ các quy định: Loki có thể giúp bạn lưu trữ và quản lý log theo các quy định về bảo mật và tuân thủ.
Ví dụ về việc sử dụng Loki để theo dõi log file.
Hãy tạo 1 file docker-compose.yml với nội dung dưới.
version: '3'
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
- ./promtail-config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
depends_on:
- loki
Tạo file promtail-config.yml
với nội dung sau:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/auth.log
Chạy stack này.
docker-compose up -d
Kết quả.
shell> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1fd43fdf15e grafana/grafana:latest "/run.sh" 6 seconds ago Up 4 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp loki-grafana-1
972a03b77b2b grafana/loki:latest "/usr/bin/loki -conf…" 8 seconds ago Up 5 seconds 0.0.0.0:3100->3100/tcp, :::3100->3100/tcp loki-loki-1
cf46e90a1ccb grafana/promtail:latest "/usr/bin/promtail -…" 8 seconds ago Up 5 seconds
Lưu ý:
- Đảm bảo rằng bạn có quyền truy cập vào
/var/log/auth.log
từ containerpromtail
. - Để truy cập Grafana, mở trình duyệt và điều hướng đến
http://localhost:3000
. Mặc định, tên người dùng làadmin
và mật khẩu làadmin
.
Thêm Datasource.
Chọn Loki.
Điền thông tin url của Loki, ví dụ http://loki:3100
và bấm Save & test. Nếu thêm datasource thành công hãy bấm vào Explore data.
Chúng ta lựa chọn Label filter với job là varlog.
Bấm vào Run querry để nhận logs.
Nếu bạn cảm thấy ổn rồi, có thể thêm nó như 1 Dashboard.
Bấm Open
Ví dụ về việc sử dụng Loki theo dõi log từ các server khác.
Để triển khai Promtail trên 2 server (10.237.7.71
và 10.237.7.72
) và đẩy log về server Grafana/Loki (10.237.7.81
), bạn cần thực hiện các bước sau:
- Cài đặt Docker và Docker Compose trên cả hai server: Đảm bảo rằng Docker và Docker Compose đã được cài đặt trên cả hai server (
10.237.7.71
và10.237.7.72
). - Tạo Docker Compose File trên mỗi Server: Tạo một file
docker-compose.yml
trên mỗi server với nội dung sau, thay đổiurl
trong phầnclients
củapromtail-config.yml
để chỉ đến server Loki (10.237.7.81
).
Docker Compose File (docker-compose.yml
) cho Server 10.237.7.71
và 10.237.7.72
:
version: '3'
services:
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
- ./promtail-config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
Nội dung của promtail-config.yml
trên cả hai server:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://10.237.7.81:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
host: <Tên hoặc địa chỉ IP của server này>
__path__: /var/log/auth.log
Thay thế <Tên hoặc địa chỉ IP của server này>
với tên hoặc địa chỉ IP cụ thể của mỗi server (10.237.7.71
và 10.237.7.72
).
Khởi động Promtail trên mỗi Server: Sau khi đã tạo và cấu hình docker-compose.yml
và promtail-config.yml
, chạy lệnh sau trên mỗi server để khởi động Promtail:
docker-compose up -d
Kiểm tra và Truy vấn Log trên Grafana: Đảm bảo rằng bạn đã cấu hình Grafana để kết nối với Loki và bắt đầu truy vấn log từ các server.
Lưu ý: Đảm bảo rằng mạng và bảo mật giữa các server được cấu hình đúng cách để cho phép giao tiếp.
Bây giờ vào Grafana thay vì chọn job thì bạn hãy lựa chọn là host, bạn sẽ thấy 2 server 10.237.7.71 và 10.237.7.72 xuất hiện.
Thử Querry 10.237.7.71 ta có kết quả.
Kết luận.
Loki là một giải pháp mạnh mẽ và linh hoạt cho việc thu thập và phân tích log. Nếu bạn đang tìm kiếm một công cụ để quản lý log của các ứng dụng container hóa hoặc các hệ thống phân tán, thì Loki là một lựa chọn đáng cân nhắc.