Thursday, November 21, 2024

Thiết lập Grafana với InfluxDB để giám sát máy chủ Linux

-

1. Giới thiệu.

Grafana là một công cụ xuất sắc cho việc giám sát trạng thái, thiết kế dashboard và alert với tính linh hoạt và khả năng mở rộng khó tìm thấy ở các công cụ khác. Hướng dẫn này sẽ bao gồm mọi bước từ cài đặt datasource đến triển khai dashboard. Việc tự thiết kế Grafana là một lợi thế, vì một khi bạn đã thiết lập nó, bạn sẽ hiểu mọi chỉ số mà bạn đã hiển thị. Bạn có thể có một thiết kế cơ bản với một số chỉ số và cảnh báo quan trọng, hoặc bạn có thể tinh chỉnh nó theo ý muốn.

Docker Stack trong bài viết này, mình sẽ sử dụng một Stack bao gồm influxDB v2 sẽ được triển khai thông qua các container Docker với Telegraf sẽ cài bằng Systemd và Grafana trên một hệ thống Ubuntu.

InfluxDB là một cơ sở dữ liệu time series giữ tất cả các chỉ số của bạn. Version 2 đi kèm với một giao diện web tuyệt vời giúp truy vấn dữ liệu dễ dàng, ngay cả khi bạn không có kinh nghiệm cơ sở dữ liệu trước đây.

Telegraf là một công cụ được xây dựng vào trong influxDB, nó lấy một loạt thông tin về hệ thống, như sử dụng tài nguyên hệ thống và thống kê docker.

Docker sẽ được sử dụng để chạy InfluxDB cho hướng dẫn này. Nếu bạn không có Docker, bạn hãy cài đặt nó. Nếu có bất cứ điều gì sai trong quá trình cài đặt influxDB hoặc grafana trong hướng dẫn này, bạn có thể xem thông báo lỗi với các lệnh dưới:

Với influxDB.

docker logs influxdb

Hoặc với Grafana.

docker logs grafana

2. Cài đặt InfluxDB.

Dưới đây là cách cài đặt và cấu hình InfluxDB sử dụng Docker. InfluxDB là một cơ sở dữ liệu time series, thích hợp cho việc lưu trữ dữ liệu đo lường hoặc sự kiện thay đổi theo thời gian.

docker run -d \
    --name=influxdb \
    -p 8086:8086 \
    -v "<influxDB-dir>/data":/var/lib/influxdb2 \
    -v "<influxDB-dir>/config":/etc/influxdb2 \
    --restart=unless-stopped \
    influxdb:2.1.1

Đoạn lệnh docker run này chạy một container InfluxDB và lưu dữ liệu vào thư mục được mount từ máy chủ của bạn. Các tùy chọn -v "<influxDB-dir>/data":/var/lib/influxdb2 và -v "<influxDB-dir>/config":/etc/influxdb2 cho phép bạn lưu dữ liệu và cấu hình của InfluxDB vào thư mục trên máy chủ của bạn, thay vì trong container.

Sau khi chạy lệnh Docker, bạn có thể truy cập vào http://localhost:8086 hoặc http://<server-ip-addr>:8086 để login vào Web Interface của InfluxDB.

Tiếp theo, bạn sẽ tạo username, password, Organization Name là tên tổ chức và tên bucket ban đầu. Một lựa chọn tốt cho tên tổ chức của bạn là sử dụng hostname hệ thống của bạn và bạn nên đặt tên bucket bắt đầu là telegraf-bucket.

Bấm chọn Quick Start.

Sau khi cài đặt xong, bạn sẽ thấy màn hình này.

Chọn Load your data, sau đó điều hướng đến tab Telegraf và chúng ta qua phần cài đặt và cấu hình Telegraf nhé.

3. Telegraf.

Phần này mình sẽ hướng dẫn cách cấu hình và cài đặt Telegraf, một công cụ thu thập dữ liệu hệ thống được tích hợp trong InfluxDB.

Trên màn hình Telegraf, nhấp vào Create Configuration.

Bạn sẽ thấy các tùy chọn và mình chọn System, Docker và bấm Continue. Bạn cũng có thể chọn các dịch vụ khác nếu bạn muốn monitor chúng.

Sau khi nhấp vào Continue. Trên bảng điều khiển bên trái, bạn sẽ thấy Docker có một vòng tròn màu xám bên cạnh.

Nhấp vào tab docker.

Và nhập unix:///var/run/docker.sock làm Endpoint cho Docker.

Bạn có thể đặt tên cho cấu hình của mình bằng cách nhập tên cấu hình của Telegraf vào Telegraf Configuration Name và bấm Create and Verify.

Phần này nó sẽ hướng dẫn bạn cách cài đặt và cấu hình Telegraf, một công cụ thu thập dữ liệu được sử dụng để đẩy dữ liệu vào InfluxDB.

Bước 1 – Cài đặt phiên bản mới nhất của Telegraf.

Mình quyết định cài đặt Telegraf trực tiếp trên hệ thống thay vì dùng Docker container. Cách này đòi hỏi ít cấu hình hơn, nhưng cả hai cách đều phù hợp cho hướng dẫn này. Hãy bấm vào InfluxData Downloads theo hướng dẫn.

Nếu bạn đã cài đặt Telegraf trên hệ thống của mình, hãy đảm bảo nó được cập nhật. Bạn sẽ cần phiên bản 1.9.2 hoặc cao hơn.

Do mình chọn cách cài bằng Systemd nên mình chọn Platform là Ubuntu & Debian.

Thực hiện các lệnh cài như hướng dẫn.

# influxdata-archive_compat.key GPG fingerprint:
#     9D53 9D90 D332 8DC7 D6C8 D3B9 D8FF 8E1F 7DF8 B07E
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

sudo apt-get update && sudo apt-get install telegraf

Kết quả sau khi cài xong Telegraf.

shell> telegraf --version
Telegraf 1.30.1 (git: HEAD@fb76952e)

Bước 2 – Cấu hình token API của bạn.

Token API của bạn là cần thiết để đẩy dữ liệu vào InfluxDB. Bạn có thể sao chép lệnh sau vào terminal của bạn để đặt một biến môi trường với token API của bạn.

export INFLUX_TOKEN=XCxJSNm5vrYqx03C-eHeOF3QTuj4hfZ2wYWwmJrwrXptopPgirRG0cU4nG1YTVq3uJGQ7_71iwIpRdJGk83trg==

Bước 3 – Khởi động Telegraf.

Cuối cùng, bạn có thể chạy lệnh telegraf --config http://10.237.7.80:8086/api/v2/telegrafs/0ce8518e78316000 theo hướng dẫn để bắt đầu chạy agent Telegraf trên máy của bạn.

Bạn có thể thêm “&” vào cuối lệnh Telegraf để chạy nó ở chế độ nền, ví dụ như sau telegraf --config <url> &.

telegraf --config http://10.237.7.80:8086/api/v2/telegrafs/0ce8691945adf000 &

Khi khởi động bằng lệnh telegraf --config hệ thống sẽ cảnh báo bạn lỗi khi khởi động Telegraf nếu có, nếu bạn gặp vấn đề về quyền — bạn có thể chạy nó dưới quyền root.

Nếu mọi thứ diễn ra tốt, bạn nên có thể nhấp vào Listen for Data trong InfluxDB và thấy nó báo Connection Found tức là bạn đã thành công.

Hãy bấm vào Finish và bây giờ bạn có thể nhấp vào tab Explore trong InfluxDB và bạn sẽ thấy các metric như cpu và disk đang được thu thập.

Lưu ý: Telegraf cũng có thể được cấu hình thủ công bằng một file cấu hình /etc/telegraf/telegraf.conf.

Ví dụ bạn có thể chỉnh sửa một số thông tin như sau:

Đảm bảo hãy copy file cấu hình gốc ra 1 bản backup.

cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.bak

Và đây là cấu hình của mình.

cat > /etc/telegraf/telegraf.conf << 'OEF'
[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false
[[outputs.influxdb_v2]]
  urls = ["http://10.237.7.80:8086"]
  token = "$INFLUX_TOKEN"
  organization = "tig-stack"
  bucket = "telegraf-bucket"
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  gather_services = false
  container_names = []
  source_tag = false
  container_name_include = []
  container_name_exclude = []
  timeout = "5s"
  perdevice = true
  total = false
  docker_label_include = []
  docker_label_exclude = []
[[inputs.mem]]
[[inputs.net]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
OEF

Sau khi chỉnh sửa cấu hình nhớ khởi động lại Telegraf nhé.

systemctl restart telegraf

Để kiểm tra lại trạng thái Telegraf sau khi khởi động có thể sử dụng lệnh systemctl status như dưới.

systemctl status telegraf

Để xem chi tiết cách thực hiện, xem hướng dẫn này.

Sau khi bấm Finish, bạn sẽ nhận được một phiên bản Telegraf Linux Monitoring System đầu tiên như hình.

Có thể bẩm vào Linux Monitoring System để xem chi tiết, chỉnh sửa hoặc download nội dung config của bạn.

4. Grafana.

Phần này sẽ hướng dẫn cách cài đặt và cấu hình Grafana, một công cụ hiển thị dữ liệu thời gian thực, sử dụng Docker.

Tương tự như InfluxDB, chúng ta khởi chạy Grafana bằng lệnh Docker sau:

docker run -d \
    --name=grafana \
    -p 3000:3000 \
    -v <grafana-dir>:/var/lib/grafana \
    grafana/grafana

Ví dụ.

mkdir /home/influxdb_v2/grafana
cd mkdir /home/influxdb_v2/grafana
docker run -d \
    --name=grafana \
    -p 3000:3000 \
    -v grafana:/var/lib/grafana \
    grafana/grafana

Bạn cũng cần phải thiết lập quyền hợp lệ cho thư mục <grafana-dir> bằng chown 472:0 <grafana-dir> -R. Ví dụ.

chown 472:0 /home/influxdb_v2/grafana -R

Truy cập http://<ip-addr>:3000 và bạn sẽ thấy màn hình đăng nhập. Thông tin đăng nhập mặc định là:

username: admin
password: admin

Sau khi đăng nhập, bạn sẽ thấy một màn hình yêu cầu thay đổi mật khẩu.

Bây giờ, bạn sẽ thấy màn hình khởi động của Grafana. Sau đó đi đến Data sources.

Chọn Add a data source và chọn InfluxDB.

Cấu hình Data Source.

Dưới đây là hướng dẫn cách cấu hình Grafana để kết nối với InfluxDB.

Quay lại trang InfluxDB tại http://<server-ip-addr>:8086 chọn tab dữ liệu, sau đó chọn API Tokens-> Read/write API Token.

Hãy đặt tên cho Token tại Description, chọn chột Read -> Scoped và Bukets telegraf-bucket sau đó Save lại.

Bạn đã có một Token mới với quyền chỉ đọc đang ở trạng thái Active, hãy bấm vào nó.

Và copy Token của bạn.

Đây là Token của mình.

jXwKjsFWVhlvCTZI2bH8G0kg9H3gOrbUAlfEgrc1SuwHwPq03AMPBM2DMW0TSADZfipo4h2n51ZXBXW-G9mJiw==

Quay lại Grafana, sau khi điền thông tin vào bạn sẽ có một màn hình như sau:

Đảm bảo bạn đã chọn loại truy vấn là Flux, vì chúng ta đang sử dụng InfluxDB v2. Nhập URL InfluxDB của bạn, Organization Name, token API và tên bucket và bấm Save để bảo nguồn dữ liệu của bạn được lưu thành công.

Cách sử dụng.

Dưới đây là hướng dẫn cách tạo và cấu hình một dashboard mới trong Grafana để hiển thị dữ liệu thu thập từ Telegraf.

Bây giờ, hệ thống đã sẵn sàng để hoạt động. Tuy nhiên, nó vẫn chưa thực sự hữu ích vì chưa có dashboard nào để quan sát. Trên Grafana hãy vào Create Dashboard thực hiện theo hình dưới.

Bạn có thể dán vào đây câu truy vấn mẫu sau và bạn sẽ thấy dữ liệu, giả sử bạn đã kích hoạt các chỉ số hệ thống trong Telegraf.

from(bucket: "telegraf-bucket")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "usage_user")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> group(columns: ["_measurement"])
|> aggregateWindow(every: v.windowPeriod, fn: sum, createEmpty: false)
|> yield(name: "sum")

Câu truy vấn này sẽ cung cấp tổng sử dụng CPU hệ thống và CPU người dùng.

Cái hay ở InfluxDB version 2 là bạn không cần phải tạo những câu truy vấn này bằng tay. Hãy thử đi đến tab Explore của InfluxDB và tạo một câu truy vấn ở đó. Sau đó, nhấp vào nút Script editor để lấy câu truy vấn. Bạn có thể dán nó vào một panel Grafana và lấy dữ liệu.

Tài liệu tham khảo https://medium.com/@james.ralph8555/setting-up-grafana-with-influxdb-for-server-monitoring-7b16c1d0ba0c.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories