Dự án mình đang làm gần đây có request về việc làm monitoringtesting, những mảng mà mình chưa tìm hiểu bao giờ. Vậy nên tranh thủ khoảng thời gian rảnh rỗi do dịch covid, mình đã tìm hiểu một chút về những vấn đề trên và đã viết 2 bài blog về mảng testing ở đâyđây. Hôm nay mình tiếp tục tìm hiểu và chia sẻ về Monitoring system và cách tạo hệ thống Monitoring với TIG (Telegraf, Influxdb, Grafana).

1. Monitoring là gì và tại sao cần dùng nó?

Khi sử dụng máy tính, hoặc điện thoại, lâu dần chúng ta sẽ gặp hiện tượng giật, lag hoặc đơ máy. Chúng ta tự hỏi lý do vì sao chúng gặp phải những vấn đề đó cho dù là hàng mới. Đi hỏi từ chị google tới mấy anh thợ cài win thì đều ta hay được bảo là thiếu ram, đầy bộ nhớ…. Làm sao ta biết đượcì chính là máy đang thiếu gì, lỗi gì? Và vì lý do đó, chúng ta cần sử dụng monitoring system để kiểm tra xem vấn đề thực sự của thiết bị nằm ở đâu.

Khái niệm:

Monitoring system là một hệ thống theo dõi, ghi lại các trạng thái, hoạt động của máy tính hay ứng dụng một cách liên tục nhằm giám sát tài nguyên hệ thống và hiệu suất trong hệ thống máy tính.

Mình thường sử dụng aws, và trong nền tảng đó có một hệ thống monitoring service gọi là CloudWatch. Cloudwatch sẽ thu thập thông tin từ các server aws rồi chuyển thành log. Từ log chuyển thành các biểu đồ đo đạc các thông số. Và nếu hệ thống xảy ra vấn đề gì thì cloudwatch sẽ tạo cảnh báo và gửi thông báo tới user thông qua mail.

Tương tự như cloudwatch, các monitoring system khác cũng hoạt động theo cách tương tự theo luồng:

Kiểm tra thông số hệ thống -> lưu lại log -> thiết lập biểu đồ -> cảnh báo

Dựa trên những tiêu chí trên thì đã có nhiều stack được thiết kế ra để tạo thành một monitoring system như

  • Logstash – Elasticsearch – Kibana
  • Prometheus – Kubernetes – Grafana
  • Telegraf – InfluxDB – Grafana

Dưới đây, mình sẽ giới thiệu về stack Telegraf – InfluxDB – Grafana

2. Monitoring với TIG (Telegraf – InfluxDB – Grafana)

Trước hết, chúng ta đi tìm hiểu về từng phần mềm trong stack này

Telegraf

Telegraf là mã nguồn mở chuyên nghiệp để giúp bạn thu thập các số liệu từ stacks, sensors và systems.

Nó hỗ trợ các output plugin khác nhau như Influxdb, Graphite, Kafka, OpenTSDB, v.v.

Influxdb

InfluxDB là một Time Series Database (là database được tối ưu hóa để xử lý dữ liệu chuỗi thời gian, các dãy số được lập chỉ mục theo thời gian. )

Nó thường được lựa chọn trong các trường hợp khi phải lưu trữ, tổ chức những dữ liệu lớn được đánh dầu bằng các nhãn thời gian ( DevOps monitoring, IoT sensor data ,…)

Grafana

Grafana là một phần mềm phân tích và tương tác mã nguồn mở đa nền tảng có sẵn. Nó cung cấp các biểu đồ, đồ thị và cảnh báo cho web khi được kết nối với các nguồn dữ liệu được hỗ trợ. Nó có thể mở rộng thông qua hệ thống plugin.

Cài đặt

Cả Telegraf, Influxdb, Grafana đều có thể cài đặt ở nhiều hệ điều hành với nhiều cách khác nhau. Tuy nhiên mình sẽ sử dụng docker để cài đặt trên local ubuntu của mình vì thấy nó khá dễ dàng.

Với Telegraf và Influxdb, ta có thể tải pull từ docker về với câu lệnh sau:

//pull influxdb
docker pull influxdb
//tiếp đó ta chạy docker của influxdb với port là 8083 và 8086
docker run -d --name influxdb -p 8083:8083 -p 8086:8086 influxdb

//pull telegraf
docker pull telegraf
//chạy docker của telegraf kết nối tới influxdb ở http://localhost:8086
docker run -d --net=container:influxdb telegraf

Sau khi chạy những câu lệnh trên. Telegraf sẽ tự động ghi lại những kết quả đo đạc vào trong influxdb. Và chúng ta giờ sẽ cài đặt grafana để visualize data từ influxdb

Với mình sẽ dùng docker-compose bằng cách tạo một file docker-compose.yml với nội dung

version: '3.4'

networks:
  grafana:

services:
  grafana:
    image: grafana/grafana:latest
    networks:
      - grafana
    ports:
      - "3000:3000"
    environment:
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_BASIC_ENABLED=false

Ta chú ý phần ports mặc định thường dùng của grafana là 3000. Các config ở phần environment nhằm loại bỏ basic auth. (các bạn có thể bỏ qua nếu muốn tạo basic auth với user và password mặc định là admin). Sau đó chạy câu lệnh cài đặt grafana

docker-compose up -d grafana

Mở trình duyệt, với url là http://localhost:3000 cuối cùng ta có kết quả sau khi cài grafana

Giờ tới phần khởi tạo và cấu hình để có thể kết nối grafana với influxdb nhằm visualize data. Ta vào phần Add data source click chọn influxdb

Và nhập các giá trị:

Name: InfluxDB (tên của datasource)
URL: http://localhost:8086 (localhost với port 8086)
Access: Browser
Database: telegraf (tên database theo default mà telegraf tạo ra)

Rồi ấn Save. Ta được kết quả

Như vậy là ta đã hoàn thành việc kết nối grafana và inxfluxdb. Giờ ta sẽ đi visualize data đó ra bằng các trỏ vào dấu + ở thanh sidebar bên trái

Ta chú ý tới 2 phần là Dashboard và Import.
Dashboard cho phép chúng ta tạo các biểu đồ thể hiện thông số và tự custom chúng theo ý muốn

Import cho phép chúng ta thêm những biểu đồ đã được tạo sẵn từ trước

Mình sẽ dùng phần Import này để tạo biểu đồ.

Ở phần import ta lên trang https://grafana.com/dashboards để tìm những dashboard đã xây dựng sẵn, lựa chọn id hoặc url paste vào ô textbox. Sau đó điền tên của dashboard và tên của datasource đã kết nối với grafana vào.a

Các bạn có thể thử với id 5955. Sau đó ấn import và grafana sẽ tạo ra một dashboard với những biểu đồ đã được thiết lập sẵn về các thông số.

Và đây là kết quả

Như vậy, chúng ta đã hoàn thành công việc tìm hiểu về monitoring và sử dụng stack TIG để tạo một monitoring system.

Tham khảo:

docker telegraf: https://hub.docker.com/_/influxdb

docker telegraf: https://hub.docker.com/_/telegraf

link dashboard: https://grafana.com/grafana/dashboards/5955

Verified by ExactMetrics