0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Tailing Logs Docker Hiệu Quả

Đăng vào 5 ngày trước

• 8 phút đọc

Chủ đề:

#logging#faq

Giới thiệu

Docker là một công cụ mạnh mẽ giúp triển khai và quản lý các ứng dụng trong các container. Một trong những yếu tố quan trọng để đảm bảo hiệu suất và độ ổn định của ứng dụng là theo dõi logs của container. Trong bài viết này, chúng ta sẽ tìm hiểu cách tail logs Docker, lợi ích, hạn chế và cách cải thiện quy trình này.

Nội dung

Logs Docker là gì?

Logs Docker là bản ghi của đầu ra được tạo ra bởi các ứng dụng đang chạy bên trong các container Docker. Những logs này có thể bao gồm cả đầu ra chuẩn (stdout) và đầu ra lỗi (stderr) từ ứng dụng. Việc theo dõi logs giúp chúng ta hiểu được hoạt động bên trong container, điều này rất quan trọng cho việc khắc phục sự cố và giám sát ứng dụng.

Lợi ích của việc theo dõi logs Docker

Việc theo dõi logs Docker mang lại nhiều lợi ích quan trọng:

  • Khắc phục sự cố: Logs cung cấp thông tin chi tiết về lỗi và vấn đề, giúp dễ dàng chẩn đoán và khắc phục sự cố.
  • Giám sát hiệu suất: Phân tích logs giúp nhận diện các điểm nghẽn hiệu suất và tối ưu hóa ứng dụng.
  • Kiểm toán an ninh: Logs có thể giúp phát hiện các hoạt động đáng ngờ và đảm bảo tuân thủ chính sách bảo mật.
  • Thông tin vận hành: Giám sát logs liên tục giúp duy trì sức khỏe và độ tin cậy tổng thể của các ứng dụng trong container.

Cách tail logs Docker

1. Tailing logs của một container cụ thể

Để tail logs từ một container, đầu tiên bạn cần lấy ID hoặc tên của container đó. Bạn có thể liệt kê tất cả các container đang chạy bằng lệnh:

bash Copy
docker ps

Sử dụng lệnh docker logs với tùy chọn -f để theo dõi logs của một container cụ thể. Thay thế <container_id_or_name> bằng ID hoặc tên thực tế của container.

bash Copy
docker logs -f <container_id_or_name>

2. Tailing một số dòng cụ thể

Bạn có thể tail một số dòng cụ thể từ cuối logs bằng cách sử dụng tùy chọn --tail. Ví dụ, để theo dõi 100 dòng cuối:

bash Copy
docker logs -f --tail 100 <container_id_or_name>

3. Tailing logs của tất cả các container

Nếu bạn có nhiều container đang chạy với Docker Compose và muốn theo dõi logs từ tất cả các container, bạn có thể sử dụng:

bash Copy
docker-compose logs -f

4. Sử dụng cờ --since

Bạn có thể xem logs của container Docker được tạo ra từ một ngày và giờ cụ thể trở đi bằng cách sử dụng cờ --since:

bash Copy
docker logs -f --since "yyyy-mm-ddThh:mm:ss" <container_id_or_name>

5. Sử dụng cờ --until

Bạn có thể xem logs của container Docker cho đến một thời điểm cụ thể bằng cách sử dụng cờ --until:

bash Copy
docker logs -f --until "yyyy-mm-ddThh:mm:ss" <container_id>

6. Sử dụng GREP

Bạn có thể lọc logs với một từ khóa bằng cách sử dụng lệnh grep. Lệnh grep cho phép bạn lọc logs của container Docker cho nội dung cụ thể bằng cách chuyển hướng đầu ra của lệnh docker logs -f <container_id> vào lệnh grep:

bash Copy
docker logs -f <container_id> | grep "error"

Hạn chế của lệnh docker logs -f

Lệnh docker logs -f rất hữu ích cho việc giám sát nhưng cũng có một số hạn chế:

  1. Không quản lý quay vòng logs: Lệnh docker logs -f không quản lý quay vòng logs. Khi logs tăng, chúng có thể tiêu tốn không gian đĩa đáng kể.
  2. Lưu trữ logs hạn chế: Mặc định, Docker lưu trữ logs trên hệ thống tệp của máy chủ. Nếu logs lớn hoặc phát triển nhanh, điều này có thể tiêu tốn không gian đĩa lớn.
  3. Lọc tích hợp hạn chế: Lệnh docker logs không cung cấp các tùy chọn lọc nâng cao, bạn có thể cần sử dụng các công cụ như grep, awk, hoặc sed để lọc cơ bản.
  4. Tập trung vào một container: Lệnh docker logs -f chỉ theo dõi logs cho một container tại một thời điểm. Nếu bạn có ứng dụng đa container, bạn cần thực hiện các lệnh riêng biệt cho mỗi container.
  5. Không có cảnh báo tích hợp: Lệnh không hỗ trợ thiết lập cảnh báo dựa trên nội dung hoặc mẫu logs. Bạn sẽ cần các công cụ hoặc kịch bản bổ sung để giám sát logs và tạo cảnh báo.

Theo dõi logs Docker với SigNoz

Để theo dõi logs Docker hiệu quả và khắc phục các hạn chế của lệnh docker logs -f, việc sử dụng một nền tảng quan sát tiên tiến như SigNoz có thể rất hữu ích. SigNoz là một công cụ quan sát mã nguồn mở cung cấp khả năng giám sát, khắc phục sự cố và cảnh báo cho các ứng dụng và cơ sở hạ tầng của bạn.

Bước 1: Thiết lập các container Docker của bạn

Một thư mục dự án đã được cung cấp với cấu hình Docker Compose thiết lập một ứng dụng mẫu. Bạn có thể clone kho lưu trữ và điều hướng đến thư mục dự án:

bash Copy
git clone https://github.com/dockersamples/example-voting-app
cd example-voting-app

Bước 2: Tạo tài khoản SigNoz Cloud

SigNoz Cloud cung cấp một khoảng thời gian dùng thử miễn phí 30 ngày. Bạn có thể chọn sử dụng phiên bản mã nguồn mở.

Bước 3: Thêm tệp .env vào thư mục gốc dự án

Trong thư mục gốc của dự án, tạo một tệp mới có tên .env và dán nội dung sau:

bash Copy
OTEL_COLLECTOR_ENDPOINT=ingest.{region}.signoz.cloud:443
SIGNOZ_INGESTION_KEY=***

Bước 4: Cấu hình Collector OpenTelemetry

Tạo một tệp otel-collector-config.yaml trong thư mục gốc của dự án và dán nội dung sau:

yaml Copy
receivers:
  tcplog/docker:
    listen_address: "0.0.0.0:2255"
    operators:
      - type: regex_parser
        regex: '^<([0-9]+)>[0-9]+ (?P<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?) (?P<container_id>\\S+) (?P<container_name>\\S+) [0-9]+ - -( (?P<body>.*))?'
        timestamp:
          parse_from: attributes.timestamp
          layout: "%Y-%m-%dT%H:%M:%S.%LZ"
      - type: move
        from: attributes["body"]
        to: body
      - type: remove
        field: attributes.timestamp
      - type: filter
        id: signoz_logs_filter
        expr: 'attributes.container_name matches "^signoz-(logspout|frontend|alertmanager|query-service|otel-collector|otel-collector-metrics|clickhouse|zookeeper)"'

processors:
  batch:
    send_batch_size: 10000
    send_batch_max_size: 11000
    timeout: 10s

exporters:
  otlp:
    endpoint: ${env:OTEL_COLLECTOR_ENDPOINT}
    tls:
      insecure: false
    headers:
      "signoz-ingestion-key": ${env:SIGNOZ_INGESTION_KEY}

service:
  pipelines:
    logs:
      receivers: [tcplog/docker]
      processors: [batch]
      exporters: [otlp]

Bước 5: Thêm dịch vụ vào tệp Docker Compose

Trong tệp Docker Compose hiện tại của bạn, thêm cấu hình sau:

yaml Copy
  otel-collector:
    image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.79.7}
    container_name: signoz-otel-collector
    command:
      [
        "--config=/etc/otel-collector-config.yaml",
        "--feature-gates=-pkg.translator.prometheus.NormalizeName"
      ]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
    environment:
      - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
      - DOCKER_MULTI_NODE_CLUSTER=false
      - LOW_CARDINAL_EXCEPTION_GROUPING=false
    env_file:
      - ./.env
    ports:
      - "4317:4317" # OTLP gRPC receiver
      - "4318:4318" # OTLP HTTP receiver
    restart: on-failure

  logspout:
    image: "gliderlabs/logspout:v3.2.14"
    container_name: signoz-logspout
    volumes:
      - /etc/hostname:/etc/host_hostname:ro
      - /var/run/docker.sock:/var/run/docker.sock
    command: syslog+tcp://otel-collector:2255
    depends_on:
      - otel-collector
    restart: on-failure

Bước 6: Khởi động tệp Docker Compose

Chạy lệnh sau trong terminal của bạn để khởi động các container:

bash Copy
docker compose up -d

Nếu chạy mà không có lỗi, hãy truy cập vào SigNoz Cloud của bạn. Trong tab “Logs”, bạn sẽ thấy các logs đang được gửi đến.

Kết luận

  • Logs Docker cung cấp cái nhìn sâu sắc về sức khỏe, hiệu suất và hành vi của các ứng dụng trong container.
  • Tailing logs Docker cho phép bạn xem đầu ra theo thời gian thực, giúp bạn chủ động xác định và giải quyết vấn đề ngay khi chúng xảy ra.
  • Lệnh docker logs cung cấp khả năng theo dõi logs cơ bản, nhưng có những hạn chế mà bạn có thể giải quyết hiệu quả bằng các công cụ quan sát nâng cao như SigNoz.

Câu hỏi thường gặp

Bạn có thể tail logs Docker không?

Có, bạn có thể tail logs Docker bằng cách sử dụng lệnh docker logs -f <container_id>. Lệnh này cho phép bạn theo dõi đầu ra logs theo thời gian thực.

Mục đích của cờ --tail trong docker logs --tail 100 là gì?

Cờ --tail trong lệnh docker logs --tail 100 <container_id> lấy 100 dòng cuối cùng của đầu ra logs.

Làm thế nào để kiểm tra logs Docker?

Để kiểm tra logs Docker, hãy sử dụng lệnh docker logs <container_id>.

Logs Docker đi đâu?

Mặc định, logs Docker được lưu trữ dưới dạng JSON trên hệ thống máy chủ trong thư mục /var/lib/docker/containers/<container_id>/.

Logs Docker có bền vững không?

Logs Docker có tính bền vững miễn là container còn tồn tại. Tuy nhiên, quản lý retention logs có thể gặp khó khăn mà không có thực hành quản lý logs thích hợp.

Làm thế nào để tail logs liên tục?

Để tail logs liên tục, sử dụng lệnh docker logs -f <container_id>.

Lệnh tail logs có tác dụng gì?

Lệnh tail hiển thị phần cuối của một tệp logs, cung cấp các mục gần đây nhất.

Mục đích của tail Docker là gì?

Tailing logs Docker cho phép theo dõi đầu ra logs theo thời gian thực, giúp khắc phục sự cố và đảm bảo hoạt động suôn sẻ của các container.

Làm thế nào để thoát khỏi logs Docker?

Để thoát khỏi việc theo dõi logs theo thời gian thực, nhấn Ctrl + C khi sử dụng docker logs -f <container_id>.

Làm thế nào để kiểm tra trạng thái đang chạy của Docker?

Để kiểm tra trạng thái đang chạy của các container Docker, sử dụng lệnh docker ps.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào