[Logging] Sử dụng grafana xem log từ file

Như bài viết trước mình đã có hướng dẫn sử dụng Zap và Golang để write log ra file, anh em xem lại đây nhé. Vấn đề là log ra file chỉ để lưu lại thôi, chứ gặp vấn để trên môi trường production thì anh/em xem kiểu gì: Mở từng file ra xem ak

  • Như bài viết trước mình đã có hướng dẫn sử dụng ZapGolang để write log ra file, anh em xem lại đây nhé.
  • Vấn đề là log ra file chỉ để lưu lại thôi, chứ gặp vấn để trên môi trường production thì anh/em xem kiểu gì:
    • Mở từng file ra xem ak
    • Copy tất cả các file ra visual studio code rồi search all.
    • Đưa lên cloud-watch của aws, cách này hay đấy, hihi mà tiền đâu.
  • Theo như mình biết thì hiện tại vẫn có 1 số công ty sài cách mở file ra xem. Má nó chuối thôi rồi, nên tốt nhất là centralized lại, sử dụng Elastic-Logstash-Kibana (elk) hoặc Grafana-Loki-Promtail.
  • Ở bài viết này mình hướng dẫn cách cài đặt và view đơn giản sử dụng Grafana-Loki-Promtail, nếu anh/em cần thì mình làm demo đơn giản cái ELK sau.

Môi trường

  1. Cài docker-compose trên linux, anh em run từng lệnh một:
  • DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
  • mkdir -p $DOCKER_CONFIG/cli-plugins
  • curl -SL https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-(uname−s)−(uname -s)-(uname -m) -o $DOCKER_CONFIG/cli-plugins/docker-compose
  • chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
  • sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
  • docker compose version
    => kết quả thế này là thành công:
  1. Anh/em có thể tham khảo thêm cách cài ở đây

Cài đặt

1. Tạo một file docker-compose.yml:

version: "3.3"
networks:
  monitor:
    driver: bridge

=> Sử dụng chung một network để các container grafana, loki và promtail có thể dễ dàng giao tiếp với nhau.

2. Trong file yml tạo 1 block services:

services:

=> block services này là để add các image cũng như để tạo thành container sau khi run.

3. Add grafana, add trong block services:

grafana:
    restart: always
    image: grafana/grafana:latest
    container_name: grafana
    ports:
        - "3000:3000"
    volumes:
      - $PWD/grafana:/var/lib/grafana
    networks:
      - monitor
  • $PWD: là đường dẫn hiện tại, ví dụ hiện tại mình đang ở folder monitoring thì khi run pwd sẽ ra full đường dẫn.

4. Add loki:

  • Tạo một file loki-config.yaml, file này mình lấy mặc định nha:
auth_enabled: false

server:
  http_listen_port: 3100
  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

=> file này phải được đặt cùng cấp với file docker-compose.yml.

  • Add loki trong block services:
loki:
    image: grafana/loki:2.1.0
    container_name: loki
    restart: unless-stopped
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    volumes:
      - ./loki-config.yaml:/etc/loki/config.yaml
    networks:
      - monitor
  • ./loki-config.yaml:/etc/loki/config.yaml: là sẽ copy file loki-config.yaml vào bên trong container loki.

5. Add promtail:

  • Tạo một file promtial-config.yml, file này mình lấy mặc định nha:
server:
    http_listen_port: 9080
    grpc_listen_port: 0
  
  positions:
    filename: /tmp/positions.yaml
  
  clients:
    - url: http://loki:3100/loki/api/v1/push
  
  scrape_configs:
    - job_name: demo
      pipeline_stages:
      static_configs:
      - targets:
          - localhost
        labels:
          job: demo
          __path__: /var/log/demo/*

=> tạo một job demo, sẽ collector file log từ trong folder /var/log/demo/, folder này nằm trong container promtail nha. Khi start container mình sẽ mount một folder nào đó trên local máy vào folder này.

  • add promtail vào block services:
promtail:
    image: grafana/promtail:latest
    container_name: promtail
    restart: unless-stopped
    volumes:
      - /home/ducnp/demo/logs:/var/log/demo
      - ./promtial-config.yml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml
    networks:
      - monitor

=> trong block volumes: mình sẽ mount folder /home/ducnp/demo/logs trên local máy vào* /var/log/demo* folder bên trong container.

Run và Test

  1. Tại root của folder chứ file docker-compose.yml:
docker-compose up
  1. Run ok không có lỗi gì xuất hiện, mở web:
http://localhost:3000
  • Sau khi mở web lên thì cần nhập user/pass mặc định: admin/admin.
  • Đổi mật khẩu mới theo ý muốn của anh/em.
  1. Add datasource loki trên grafana và test:
  • Anh em vào youtube của mình xem nha, chỗ này viết dài quá nên mình quay video cho khoẻ, link.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ