Giới Thiệu
Bài viết này sẽ hướng dẫn bạn cách tập trung và trực quan hóa nhật ký Docker trong Grafana bằng cách sử dụng Loki. Phương pháp này không chỉ hỗ trợ bạn mở rộng quy mô theo chiều ngang mà còn giúp quá trình quản lý nhật ký trở nên dễ dàng và hiệu quả hơn.
Tại Sao Chọn Grafana, Loki Và Promtail?
Sử dụng Grafana, Loki và Promtail giúp bạn xây dựng một hệ thống giám sát phân tán, nơi mỗi thành phần có thể hoạt động độc lập. Điều này mang lại hiệu quả cao hơn so với việc triển khai tất cả trên một máy chủ duy nhất, nên đây là cách tiếp cận lý tưởng cho các môi trường sản xuất.
Ví dụ, bạn có thể có Promtail trên một máy chủ chạy các container Docker cho một ứng dụng web, gửi nhật ký đến Loki đang chạy trên một máy chủ khác và sau đó trực quan hóa tất cả trong Grafana trên một máy chủ thứ ba.
Cách Thức Hoạt Động Của Hệ Thống
Trong thiết lập này, trình nền Docker gửi nhật ký trực tiếp đến Loki mà không cần thực hiện cấu hình Promtail. Lợi ích của phương pháp này bao gồm:
- Không cần phải loay hoay với các tệp nhật ký và vị trí của chúng.
- Docker sẽ tự động gửi nhật ký đến Loki.
- Việc truy vấn nhật ký trong Grafana trở nên dễ dàng hơn, cho phép bạn tìm kiếm theo tên container, image, hoặc dự án compose.
Thiết Lập Loki
Nếu bạn đã có phiên bản Loki, bạn có thể bỏ qua phần này. Sau đây là hướng dẫn thiết lập Loki trên một máy chủ Ubuntu:
1. Tạo Thư Mục Cho Các Tệp Cấu Hình
bash
cd && mkdir loki && cd loki
2. Tạo Tệp Cấu Hình cho Loki
bash
nano loki-config.yaml
Dán nội dung sau vào tệp:
yaml
# Bật xác thực để ngăn chặn truy cập trái phép
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
3. Tạo Tệp docker-compose.yaml
bash
nano docker-compose.yaml
Dán nội dung sau:
yaml
services:
loki:
image: grafana/loki:latest
volumes:
- ./loki-config.yml:/etc/loki/loki-config.yml
ports:
- "3100:3100"
restart: unless-stopped
command: -config.file=/etc/loki/loki-config.yml
4. Khởi Động Loki
bash
docker compose up -d
Nếu mọi thứ suôn sẻ, bạn có thể truy cập Loki tại http://your-server-ip:3100
.
Thiết Lập Plugin Docker Loki
1. Tạo Các Tệp Cần Thiết
Tạo thư mục cho Promtail:
bash
cd && mkdir promtail && cd promtail
2. Tạo Tệp promtail-config.yaml
Tệp này sẽ chỉ định vị trí nhật ký và nơi gửi chúng:
yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: docker
pipeline_stages:
- docker: {}
static_configs:
- labels:
job: docker
__path__: /var/lib/docker/containers/*/*-json.log
3. Tạo Tệp docker-compose.yaml Cho Promtail
yaml
services:
promtail:
image: grafana/promtail:latest
restart: unless-stopped
volumes:
- /var/log:/var/log
- ./promtail-config.yml:/etc/promtail/promtail-config.yml
command: -config.file=/etc/promtail/promtail-config.yml
4. Cài Đặt Plugin Docker Loki
Chạy lệnh sau để cài đặt plugin:
bash
docker plugin install grafana/loki-docker-driver:2.9.2 --alias loki --grant-all-permissions
5. Cấu Hình Trình Nền Docker
Tạo tệp daemon.json:
json
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://localhost:3100/loki/api/v1/push",
"loki-batch-size": "400"
}
}
6. Khởi Động Lại Docker
bash
sudo systemctl restart docker
7. Khởi Động Promtail
bash
cd ~/promtail && docker compose up -d
Thiết Lập Grafana
1. Cài Đặt Grafana
Cài đặt Grafana đơn giản chỉ cần chạy:
bash
docker run -d --name=grafana -p 3000:3000 grafana/grafana
2. Kết Nối Grafana Với Loki
Trong Grafana, đi đến "Data Sources", thêm nguồn dữ liệu với URL của Loki và kiểm tra kết nối.
3. Truy Vấn Nhật Ký
Tại đây, bạn có thể dễ dàng truy vấn nhật ký theo tên container và các thông tin khác một cách hiệu quả.
Kết Luận
Hệ thống này giúp bạn dễ dàng quản lý và giám sát nhật ký của các container Docker. Hy vọng rằng bạn sẽ tìm thấy bài viết này hữu ích cho quá trình triển khai các ứng dụng Docker của mình.
source: viblo