phần 1, chúng ta đã cùng tìm hiểu về tổng quan một hệ thống monitoring và các thành phần của TIG Stack - một stack monitoring phổ biến. Phần này chúng ta sẽ tìm hiểu cách deploy TIG Stack bằng Docker.

TIG stack Docker

Sử dụng Docker sẽ giúp chúng ta deploy TIG stack một cách dễ dàng và nhanh chóng, nhưng sẽ có một vài điểm cần lưu ý.

Trong thực tế hầu hết các trường hợp chúng ta thường monitor một cluster hơn là một máy đơn, vì thế bài viết này sẽ hướng dẫn deploy lên một cluster được quản lí bởi Docker Swarm.

TIG with docker swarm

Với Swarm cluster, InfluxDBGrafana sẽ được cài trên cùng một node để tối ưu việc query, Telegraf sẽ được deploy với mode là global.

Telegraf

Mặc định khi chạy Telegraf bằng container nó chỉ collect metrics của container đó, để có thể collect data của host chúng ta cần mount một số file từ host vào và thay đổi một số config.

  • Chúng ta cần mount các file sau (chú ý mode là ro):
- /var/run/docker.sock:/var/run/docker.sock:ro # collect docker metrics
- /sys:/rootfs/sys:ro
- /proc:/rootfs/proc:ro
- /etc:/rootfs/etc:ro
  • Mặc định khi gửi metric đến database, Telegraf sẽ gửi kèm hostname (hostname của container). Vì thế chúng ta nên thay đổi config hostname trong file config của Telegraf hoặc đặt tên hostname của container cho phù hợp.
  • Để collect thông tin của các docker containers chạy trên host chúng ta cần uncomment phần [[inputs.docker]] trong file config, và mout file /var/run/docker.sock của host
  • Trong trường hợp muốn collect dữ liệu file log của một ứng dụng chạy trên host (có thể là container) chúng ta cần mount các file log vào trong Telegraf container và sử dụng plugin logparser để collect log. Tham khảo thêm: https://github.com/influxdata/telegraf/tree/release-1.5/plugins/inputs/logparser
  • Trường hợp muốn collect các metrics của các services như mongo, rabbitmq (chạy trong container), chúng ta cần container của Telegraf có thể kết nối với các container của các services kia. Để giải quyết vấn để này chúng ta có thể làm theo 2 cách sau:
    Cách 1: Tạo external docker network và sử dụng cho tất cả các container
    Cách 2: Mapping port của services ra bên ngoài và Telegraf có thể sử dụng ip của host hoặc docker0 để truy cập

InfluxDB

Chạy InfluxDB với docker container chúng ta cần chú ý giữ an toàn dữ liệu của nó bằng cách sử dụng volume:

volumes:
     - "influxdb-data:/var/lib/influxdb"

Chúng ta có thể thêm biến environment để tạo sẵn database cho Telegraf:

environment:
     - INFLUXDB_DB=telegraf

Cấu hình data retention cho database của Telegraf. Mặc định InfluxDB sẽ tạo một RETENTION POLICY có tên là autogen với DURATION là vô hạn cho mỗi database, vì thế để cấu hình lại data retention cho database ta có thể sửa policy này:

ALTER RETENTION POLICY autogen ON telegraf DURATION 30d REPLICATION 1 SHARD DURATION 24h0

Grafana

Với Grafana chúng ta cũng cần giữ an toàn các dữ liệu của nó bằng cách sử dụng volume:

volumes:
      - grafana-data:/var/lib/grafana

Chúng ta cũng có thể sử dụng các biến environment để cấu hình password cho admin, hoặc tài khoản để gửi mail alert, ...

Grafana cung cấp một tập các dashboard được cấu hình sẵn tại đây: https://grafana.com/dashboards . Chúng ta tìm dashboard phù hợp rồi import vào Grafana thay vì phải config từ đầu. Với Telegraf, chúng tôi thường import dashboard này: https://grafana.com/dashboards/61

Để mọi người dễ hình dung các config, chúng tôi đã tạo sẵn Github repo. Mọi người có thể tham khảo tại: https://github.com/devopszcom/tig-monitoring

Screenshot

Tham khảo

https://angristan.xyz/monitoring-telegraf-influxdb-grafana/