- vừa được xem lúc

Tập trung và trực quan hóa nhật ký Docker trong Grafana với Loki

0 0 3

Người đăng: Kubernetes

Theo Viblo Asia

Bài viết hướng dẫn cách tập trung và trực quan hóa nhật ký Docker trong Grafana với Loki. Phương pháp này cho phép bạn mở rộng quy mô theo chiều ngang với Grafana, Loki và Promtail, mỗi phần chạy độc lập với nhau.

Cách tiếp cận trong bài viết này

Bạn sẽ thấy các hướng dẫn khác chỉ cho bạn cách thiết lập mọi thứ trong một máy duy nhất. Mặc dù điều này có thể thuận tiện cho những người chạy tất cả nội dung Docker của họ trong một máy chủ duy nhất, nhưng đó không phải là cách thực hành tốt nhất cho môi trường production.

Tôi sẽ chỉ cho bạn cách thiết lập mọi thứ theo cách bạn có thể mở rộng quy mô theo chiều ngang. Với Grafana, Loki và Promtail, mỗi phần chạy độc lập với nhau.

Ví dụ: Bạn có thể có promtail trong một máy chủ chạy các container Docker cho một ứng dụng web, gửi nhật ký đến một phiên bản Loki đang chạy trong một máy chủ khác và sau đó trực quan hóa mọi thứ trong Grafana đang chạy trong một máy chủ thứ ba.

Cách hoạt động của phương pháp

Trong cách thiết lập ở bài viết này, chúng ta sẽ có trình nền Docker gửi nhật ký trực tiếp đến Loki mà không cần phải định cấu hình Promtail! image.png

Điều này có một số lợi thế:

  • Bạn 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ẽ lo việc gửi nhật ký đến Loki
  • Truy vấn nhật ký trở nên DỄ DÀNG HƠN RẤT NHIỀU trong Grafana vì chúng ta có thể truy vấn theo tên container, image, dự án compose, v.v.

Thiết lập Loki

Nếu bạn đã có một phiên bản Loki và chỉ quan tâm đến việc thiết lập plugin Docker Loki, bạn có thể bỏ qua phần này.

Như tôi đã nói trong phần giới thiệu, tôi muốn thiết lập mọi thứ trong các máy chủ riêng biệt, vì vậy đây là cách tôi thiết lập Loki trong một máy chủ Ubuntu của mình.

Lưu ý rằng thiết lập này cũng hoạt động nếu bạn muốn thực hiện tất cả trong một máy, chỉ là bạn có thể muốn thiết lập loki và grafana trong cùng một tệp compose.

1. Tạo một thư mục cho các tệp cấu hình

cd && mkdir loki && cd loki

2. Tạo tệp loki-config.yaml

nano loki-config.yaml

Dán nội dung sau:

# You can enable authentication to prevent unauthorized access to your logs
auth_enabled: false server: # This is the port where Loki will receive logs from Docker (or Promtail) http_listen_port: 3100 # This is the port where Loki will expose its API 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

nano docker-compose.yaml

Dán nội dung sau:

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

Mặc dù bạn có thể chạy container đơn lẻ này bằng docker run, nhưng tôi thích sử dụng docker-compose để tôi không phải nhớ lệnh để khởi động container.

4. Khởi động Loki

docker compose up -d

Nếu mọi thứ suôn sẻ, bạn sẽ có thể truy cập Loki tại http://your-server-ip:3100.

Nếu bạn có máy chủ ở nhiều vị trí (aws, digital ocean, lab tại nhà, v.v.), bạn có thể tạo proxy ngược bằng NGINX hoặc dịch vụ tương tự để hiển thị Loki với internet. Nếu vậy, tôi khuyên bạn nên bật xác thực trong tệp loki-config.yaml hoặc chỉ cho phép máy chủ của bạn truy cập Loki thông qua proxy ngược hoặc tường lửa.

Bây giờ bạn có thể trỏ tất cả các máy chủ Docker của mình để trỏ đến phiên bản Loki này!

Thiết lập plugin Docker Loki

Tôi sẽ giả sử bạn đã có một hoặc nhiều container Docker đang chạy trong một máy chủ ở đâu đó.

Bạn có thể lặp lại bước này cho mọi máy chủ bạn có đang chạy container Docker.

1. Tạo các tệp cần thiết

Những gì tôi muốn làm trong máy chủ của mình là thiết lập một thư mục chỉ dành cho thiết lập ghi nhật ký này, vì vậy:

cd && mkdir promtail && cd promtail

Trong thư mục này, bạn sẽ cần 2 tệp:

  • promtail-config.yaml
  • docker-compose.yaml

2. promtail-config.yaml

Tệp này sẽ cho Promtail biết vị trí tìm nhật ký và nơi gửi chúng.

server: http_listen_port: 9080 grpc_listen_port: 0 positions: # Temporary file to store the last read position for each log stream. Useful in case of a crash or restart. filename: /tmp/positions.yaml clients: # The URL where your Loki instance is running - 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

Bạn có thể sao chép trực tiếp đoạn mã trên, điều quan trọng duy nhất cần thay đổi là trường url trong phần clients.

Đoạn mã trên giả định rằng bạn sẽ chạy một container Docker chạy Loki trong cùng máy chủ với Promtail (do đó là localhost). Ví dụ, tôi có Loki trong lab tại nhà của mình chạy phía sau proxy ngược, vì vậy tôi sẽ thay đổi phần này thành https://myloki.mydomain.com/loki/api/v1/push.

3. docker-compose.yaml

# docker-compose.yml 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

Tệp docker-compose này sẽ khởi động một container Promtail với tệp cấu hình mà chúng ta vừa tạo.

4. Cài đặt plugin Docker Loki

Đây là phần dễ nhất.

docker plugin install grafana/loki-docker-driver:2.9.2 --alias loki --grant-all-permissions

Kiểm tra ở đây để biết phiên bản mới nhất của lệnh này.

Nếu lệnh thành công, bạn sẽ thấy plugin được liệt kê khi bạn chạy docker plugin ls.

5. Định cấu hình trình nền Docker

Chúng ta cần tạo một tệp daemon.json trong /etc/docker/ với nội dung sau:

{ "log-driver": "loki", "log-opts": { "loki-url": "http://localhost:3100/loki/api/v1/push", "loki-batch-size": "400" }
}

Điều này cho Docker biết rằng nó nên sử dụng trình điều khiển nhật ký loki thay vì trình điều khiển mặc định và gửi nhật ký đến phiên bản Loki.

Một lần nữa, hãy thay đổi trường loki-url thành URL chính xác cho bạn.

loki-batch-size là tùy chọn, nhưng tôi muốn đặt nó thành 400 để tránh gửi quá nhiều yêu cầu đến Loki.

6. Chờ đã, nếu plugin Loki gửi nhật ký, tại sao chúng ta cần Promtail?

Plugin Loki sẽ gửi nhật ký đến Loki, nhưng nó sẽ không theo dõi vị trí nhật ký. Điều này có nghĩa là nếu Loki ngừng hoạt động, bạn sẽ mất các nhật ký đã được gửi trong khi nó ngừng hoạt động.

Promtail sẽ theo dõi vị trí nhật ký và gửi nhật ký đến Loki khi nó hoạt động trở lại.

7. Khởi động lại Docker

sudo systemctl restart docker

8. Khởi động promtail

cd ~/promtail && docker compose up -d

Tuyệt vời! Giờ đây, chúng ta có tất cả các container Docker trong máy này gửi nhật ký của chúng đến phiên bản Loki của chúng ta!

Thiết lập Grafana

1. Cài đặt Grafana

Nếu bạn đã thiết lập Grafana, bạn có thể chuyển sang 3.3, nơi tôi chỉ cho bạn cách truy vấn nhật ký dễ dàng như thế nào.

Nó đơn giản như chạy một container:

docker run -d --name=grafana -p 3000:3000 grafana/grafana

Bạn có thể truy cập Grafana tại http://your-server-ip:3000.

2. Kết nối Grafana với Loki

  • Trong bảng điều khiển bên trái, đi tới "Connections" > "Data Sources".

  • Nhấp vào "+ Add new data source".

  • Tìm kiếm "Loki": image.png

  • Điền tên và URL của phiên bản Loki của bạn: image.png

  • Nhấp vào "Save & Test". Bạn sẽ thấy một thông báo cho biết mọi thứ đang hoạt động chính xác. image.png

3. Truy vấn nhật ký

Trong bảng điều khiển bên trái, đi tới "Explore". Chọn nguồn Loki của bạn ở trên cùng: image.png

Bây giờ đến phần siêu thú vị của thiết lập này. Bạn có thể truy vấn nhật ký theo tên container, dự án compose, v.v.: image.png

Đây là phần hay nhất của thiết lập này, vì bạn có thể dễ dàng xem nhật ký của một container cụ thể mà không cần phải phân loại qua hàng trăm tệp và cấu hình kỳ lạ.

Kết luận

Tôi thích thiết lập này, tôi triển khai nội dung của mình chủ yếu bằng Docker và việc tập trung tất cả nhật ký vào một nơi duy nhất giúp cuộc sống của tôi dễ dàng hơn rất nhiều trong việc gỡ lỗi và giám sát.

Hy vọng bạn thấy bài viết này hữu ích.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 398

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 122