Trong bài này chúng ta sẽ được giới thiệu concept của việc trace log của các container thông qua bộ tool grafana-loki-promtail
Chuẩn bị container
Bạn có thể pull image từ dockerhub và run https://hub.docker.com/_/adminer/
Để ý lúc này CONTAINER_ID của mình là 4a2831508945, vậy là xong phần chuẩn bị
Cài đặt Promtail
Download version promtail
cd /usr/local/bin
curl -O -L "https://github.com/grafana/loki/releases/download/v2.4.1/promtail-linux-amd64.zip"
unzip "promtail-linux-amd64.zip"
Và cho phép quyền execute
của Promtail binary
sudo chmod a+x "promtail-linux-amd64"
Kết quả được như hình
Tạo Promtail config
Đầu tiên tạo ra file Promtail config.
sudo nano promtail-local-config.yaml
Và copy paste nội dung này vào
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: 'http://10.121.46.41:8100/loki/api/v1/push' scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*log - job_name: recargar_test static_configs: - targets: - localhost labels: job: recargar_test __path__: /var/lib/docker/containers/4a2831508945*/4a2831508945*.log - job_name: nginx static_configs: - targets: - localhost labels: job: nginx __path__: /var/lib/docker/containers/9f4846d87247*/9f4846d87247*.log
Trước đó chúng ta sẽ tạo sẵn 1 container Promtail sẽ đọc log ở container, để ý 4a2831508945 là CONTAINER_ID đã được chuẩn bị từ phần I ở trên.
Configure Promtail chạy dưới dạng Service
Bây giờ chúng tasẽ định cấu hình Promtail như một dịch vụ để chúng tacó thể giữ cho nó chạy trong nền.
Step 1: Tạo người dùng cụ thể cho dịch vụ Promtail
sudo useradd --system promtail
Step 2: Tạo một file tên là promtail.service
sudo nano /etc/systemd/system/promtail.service
Step 3: Copy nội dung sau vào file trên
[Unit] Description=Promtail service After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/promtail-linux-amd64 -config.file /usr/local/bin/promtail-local-config.yaml [Install] WantedBy=multi-user.target
Step 4: Để start và kiểm tra tình trạng của nó, sử dụng 2 lệnh sau
sudo service promtail start sudo service promtail status
Bây giờ, vì ta dùng Promtail để đọc các tệp nhật ký hệ thống, container nên người dùng promtail sẽ không có quyền đọc chúng. Vì vậy ta cần add user promtail
to the adm
group
usermod -a -G adm promtail
Xác nhận đã add thành công vào adm
group dùng lệnh
id promtail
Restart Promtail và kiểm tra status lần nữa
sudo service promtail restart sudo service promtail status
Ngoài ra, nếu bạn muốn stop Promtail
sudo service promtail stop
sudo service promtail status
Kiểm tra Promtail đã work ngoài việc xem status service bạn cũng có thể chạy lên
curl "127.0.0.1:9080/metrics”
Cài đặt Loki
Download version Loki
Ghé đường link này để check version Loki https://github.com/grafana/loki/releases/
cd /usr/local/bin
curl -O -L "https://github.com/grafana/loki/releases/download/v2.4.1/loki-linux-amd64.zip"
unzip "loki-linux-amd64.zip"
Và cho phép quyền execute
của Loki binary
chmod a+x "loki-linux-amd64"
Khởi tạo Loki config
Tạo ra Loki config file.
sudo nano loki-local-config.yaml
Copy nội dung sau vào file vừa tạo
auth_enabled: false server: http_listen_port: 8100 grpc_listen_port: 9096 common: path_prefix: /tmp/loki storage: filesystem: chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h ruler: alertmanager_url: http://localhost:9093 # By default, Loki will send anonymous, but uniquely-identifiable usage and configuration # analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/ # # Statistics help us better understand how Loki is used, and they show us performance # levels for most users. This helps us prioritize features and documentation. # For more information on what's sent, look at # https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go # Refer to the buildReport method to see what goes into a report. # # If you would like to disable reporting, uncomment the following lines: #analytics: # reporting_enabled: false
Bạn có thể copy bản default ở đây https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml.
Ở trên vì lý do mình đang dùng Centos7, port default là 3100 sẽ không work nên mình đổi thành 8100
Configure Loki chạy dưới dạng Service
Thao tác tương tự với Promtail nhé, ý nghĩa câu lệnh y chang nên khỏi giải thích lại ha
Step 1:
sudo useradd --system loki
Step 2:
sudo nano /etc/systemd/system/loki.service
Step 3: Nội dung của loki.service
[Unit] Description=Loki service [Service] Type=simple User=root ExecStart=/usr/local/bin/loki-linux-amd64 -config.file /usr/local/bin/loki-local-config.yaml --frontend.instance-addr=127.0.0.1 [Install] WantedBy=multi-user.target
Start/Stop và kiểm tra status
sudo service loki start
sudo service loki status
sudo service loki stop
Bạn có thể check Loki work hay chưa qua lệnh như hình sau, nhớ thay IP và PORT lại nhé
Thêm data source Loki vào Grafana
Vì mình đã có bài hướng dẫn cài đặt Grafana nên bỏ qua bước đó nhé. Giờ thì hãy login vào Grafana và vào Data Source, kiếm Loki
Điền URL của Loki vào
Click Save & Test nhé
Kiểm thử trace log từ container
Config query như hình sau
Lưu ý: job chọn là ‘recargar_test' vì ở bước cài đặt Promtail trong file config mình để tên job của container này là vậy
Giờ bạn có thể làm mọi thứ bạn thích !!
Chúc các bạn thành công!