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ì?
- Lợi ích của việc theo dõi logs Docker
- Cách tail logs Docker
- Hạn chế của lệnh docker logs -f
- Theo dõi logs Docker với SigNoz
- Kết luận
- Câu hỏi thường gặp
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
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
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
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
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
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
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
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ế:
- Không quản lý quay vòng logs: Lệnh
docker logs -fkhô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ể. - 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.
- Lọc tích hợp hạn chế: Lệnh
docker logskhô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ặcsedđể lọc cơ bản. - Tập trung vào một container: Lệnh
docker logs -fchỉ 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. - 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
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
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
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
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
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 logscung 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.