Thursday, November 21, 2024

Tìm hiểu về file cấu hình Telegraf để thu thập số liệu hệ thống

-

1. Tổng quan.

Telegraf là một công cụ thu thập số liệu mạnh mẽ và linh hoạt, được sử dụng rộng rãi trong việc giám sát và quản lý hệ thống. Với khả năng tích hợp nhiều plugin đầu vào và đầu ra, Telegraf cho phép bạn thu thập số liệu từ nhiều nguồn khác nhau và gửi chúng đến các hệ thống lưu trữ và phân tích như InfluxDB. Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình Telegraf để thu thập số liệu hệ thống, bao gồm việc thêm các tag tùy chỉnh để phân loại và truy vấn dữ liệu một cách hiệu quả hơn.

Cấu trúc dưới mô tả quá trình thu thập, xử lý và xuất dữ liệu của Telegraf, một agent thu thập dữ liệu metric (thống kê) phổ biến.

Các thành phần chính:

  • Input:
    • Là điểm bắt đầu, nơi Telegraf thu thập dữ liệu từ các nguồn khác nhau như:
      • CPU: Thông tin về hiệu năng CPU (tần số, tải, sử dụng…)
      • Mem: Thông tin về bộ nhớ (sử dụng, sẵn có…)
      • MySQL: Các metric từ cơ sở dữ liệu MySQL (queries, connections…)
      • CloudWatch: Metric từ dịch vụ giám sát CloudWatch của AWS
  • Process:
    • Giai đoạn xử lý dữ liệu thô thu thập được:
      • Transform: Chuyển đổi dữ liệu sang định dạng phù hợp, tính toán các giá trị mới.
      • Decorate: Thêm các nhãn (tags) hoặc trường (fields) bổ sung vào dữ liệu để phân loại và làm giàu dữ liệu.
      • Filter: Lọc dữ liệu, chỉ giữ lại những dữ liệu cần thiết.
  • Aggregate:
    • Giai đoạn tổng hợp dữ liệu:
      • Mean: Tính giá trị trung bình của một nhóm dữ liệu.
      • Min, max: Tìm giá trị nhỏ nhất và lớn nhất trong một nhóm dữ liệu.
  • Output:
    • Điểm cuối cùng, nơi dữ liệu đã được xử lý được gửi đến:
      • InfluxDB: Cơ sở dữ liệu thời gian chuyên dụng, thường được sử dụng để lưu trữ và phân tích dữ liệu metric.
      • Kafka: Hệ thống truyền thông tin theo chủ đề (topic), thường được sử dụng để xử lý dữ liệu theo thời gian thực hoặc xây dựng các hệ thống streaming.

Cách hoạt động:

  • Thu thập dữ liệu: Telegraf thu thập dữ liệu từ các nguồn được định cấu hình (CPU, Mem, MySQL, CloudWatch).
  • Xử lý dữ liệu: Dữ liệu thô được chuyển đổi, bổ sung thông tin và lọc để đáp ứng yêu cầu.
  • Tổng hợp dữ liệu: Dữ liệu được tổng hợp thành các giá trị đại diện như trung bình, giá trị lớn nhất, nhỏ nhất.
  • Xuất dữ liệu: Dữ liệu đã xử lý được gửi đến InfluxDB hoặc Kafka để lưu trữ, phân tích hoặc xử lý tiếp theo.

Ứng dụng:

  • Giám sát hệ thống: Theo dõi hiệu năng của máy chủ, các dịch vụ, ứng dụng.
  • Phân tích dữ liệu: Phân tích xu hướng, tìm kiếm bất thường trong dữ liệu.
  • Tạo báo cáo: Tạo các báo cáo trực quan về tình trạng hệ thống.
  • Xây dựng các hệ thống cảnh báo: Cảnh báo khi có sự cố hoặc bất thường xảy ra.

Ví dụ: Giả sử bạn muốn theo dõi sử dụng CPU của một máy chủ. Telegraf sẽ thu thập dữ liệu sử dụng CPU, tính giá trị trung bình trong một khoảng thời gian nhất định, sau đó gửi dữ liệu này vào InfluxDB. Bạn có thể sử dụng một công cụ trực quan như Grafana để vẽ biểu đồ và theo dõi sự thay đổi của sử dụng CPU theo thời gian.

2. Cấu trúc thư mục và file của Telegraf.

Cấu trúc thư mục /etc/telegraf/ được sử dụng để tổ chức các file cấu hình của Telegraf. Dưới đây là giải thích chi tiết về từng phần trong cấu trúc này:

Cấu trúc thư mục

/etc/telegraf/
├── telegraf.conf
└── telegraf.d/
    ├── another-plugin.conf
    └── more-plugins.conf

Giải thích chi tiết.

  • /etc/telegraf/: Thư mục chính chứa các file cấu hình của Telegraf.
  • telegraf.conf: Đây là file cấu hình chính của Telegraf. Nó chứa các cấu hình chung và các plugin cơ bản mà Telegraf sẽ sử dụng. Ví dụ, file telegraf.conf có thể chứa các cấu hình như:
    • Global Tags: Các tags toàn cục áp dụng cho tất cả các số liệu.
    • Agent Configuration: Cấu hình cho agent của Telegraf, bao gồm các thiết lập về thời gian thu thập và gửi số liệu.
    • Outputs: Cấu hình các đầu ra, ví dụ như InfluxDB.
    • Inputs: Cấu hình các plugin đầu vào để thu thập số liệu từ các nguồn khác nhau.
  • telegraf.d/: Thư mục này chứa các file cấu hình bổ sung cho các plugin cụ thể. Telegraf sẽ tự động đọc và tải tất cả các file .conf trong thư mục này khi khởi động. Điều này giúp quản lý cấu hình dễ dàng hơn bằng cách tách riêng các cấu hình plugin thay vì đặt tất cả trong một file telegraf.conf.
  • another-plugin.conf và more-plugins.conf: Đây là các file cấu hình bổ sung cho các plugin cụ thể. Mỗi file .conf trong thư mục telegraf.d có thể chứa cấu hình cho một hoặc nhiều plugin. Ví dụ:
    • another-plugin.conf: Có thể chứa cấu hình cho một plugin đầu vào khác, ví dụ như [[inputs.http]].
    • more-plugins.conf: Có thể chứa cấu hình cho một plugin đầu ra khác, ví dụ như [[outputs.kafka]].

3. Tìm hiểuvề nội dung của 1 file telegraf.conf.

Cấu hình này là của Telegraf, một agent thu thập số liệu và gửi chúng đến các cơ sở dữ liệu thời gian thực như InfluxDB.

[global_tags]
[agent]
  interval = "60s"
  round_interval = true
  metric_batch_size = 5000
  metric_buffer_limit = 100000
  collection_jitter = "0s"
  flush_interval = "60s"
  flush_jitter = "0s"
  precision = ""
  debug = true
  quiet = false
  logfile = "/var/log/telegraf/telegraf.log"
  hostname = ""
  omit_hostname = false
[[outputs.influxdb]]
   urls = ["http://influxdb-server1:8086","http://influxdb-server2:8086"]
   timeout = "60s"
   database = "database-name"
   tagexclude = ["hash", "last_update", "status_changed_at", "put_timestamp", "reported_put_timestamp"]
   namedrop = ["*-scanner"]
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs", "tracefs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.system]]
  [inputs.system.tags]
    region="vn-hcm"
    cls_service="vstorage"
    cls_service_role="s-storage"
[[inputs.net]]
[[inputs.netstat]]
[[inputs.nstat]]
[[inputs.interrupts]]
[[inputs.linux_sysctl_fs]]
[[inputs.conntrack]]
  files = ["ip_conntrack_count","ip_conntrack_max",
          "nf_conntrack_count","nf_conntrack_max"]
  dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"]
[[inputs.memcached]]
  servers = ["localhost:11211"]

Trong đó:

[global_tags]

Đây là nơi bạn có thể định nghĩa các biến toàn cục sẽ được áp dụng cho tất cả các số liệu thu thập.

[agent]

  • interval: Khoảng thời gian giữa các lần thu thập số liệu. Ở đây là 60 giây.
  • round_interval: Nếu true, Telegraf sẽ làm tròn thời gian thu thập đến gần nhất của interval.
  • metric_batch_size: Số lượng số liệu tối đa trong một batch gửi đến output.
  • metric_buffer_limit: Số lượng số liệu tối đa mà buffer có thể chứa trước khi bị loại bỏ.
  • collection_jitter: Thời gian ngẫu nhiên thêm vào interval để tránh thu thập đồng thời từ nhiều agent.
  • flush_interval: Khoảng thời gian giữa các lần gửi số liệu đến output. Ở đây là 60 giây.
  • flush_jitter: Thời gian ngẫu nhiên thêm vào flush_interval để tránh gửi đồng thời từ nhiều agent.
  • precision: Độ chính xác của số liệu. Để trống nghĩa là sử dụng độ chính xác mặc định.
  • debug: Nếu true, Telegraf sẽ ghi log chi tiết để debug.
  • quiet: Nếu true, Telegraf sẽ không ghi log thông thường.
  • logfile: Đường dẫn đến file log của Telegraf.
  • hostname: Tên host của agent. Để trống nghĩa là sử dụng tên host mặc định của hệ thống.
  • omit_hostname: Nếu true, Telegraf sẽ không thêm tên host vào số liệu.

[[outputs.influxdb]]

  • urls: Danh sách các URL của InfluxDB server.
  • timeout: Thời gian chờ tối đa cho một yêu cầu gửi số liệu.
  • database: Tên cơ sở dữ liệu trong InfluxDB để lưu trữ số liệu.
  • tagexclude: Danh sách các tag sẽ bị loại bỏ khỏi số liệu trước khi gửi.
  • namedrop: Danh sách các số liệu sẽ bị loại bỏ dựa trên tên.

Dưới đây là ví dụ về cách sử dụng tagexclude và namedrop trong cấu hình Telegraf:

Đối với tagexclude.

Giả sử bạn có các số liệu với các tags sau:

cpu,host=server01,hash=abc123,last_update=2024-09-09T04:10:06Z,usage_user=20
cpu,host=server02,hash=def456,last_update=2024-09-09T04:10:06Z,usage_user=30

Với cấu hình tagexclude = ["hash", "last_update"] thì các tags hash và last_update sẽ bị loại bỏ khỏi số liệu trước khi gửi đến InfluxDB. Kết quả sẽ là:

cpu,host=server01,usage_user=20
cpu,host=server02,usage_user=30

Đối với namedrop.

Giả sử bạn có các số liệu với các tên sau:

cpu,host=server01,usage_user=20
disk,host=server01,usage=70
disk-scanner,host=server01,usage=70

Với cấu hình namedrop = ["*-scanner"] thì các số liệu có tên khớp với mẫu *-scanner sẽ bị loại bỏ. Kết quả sẽ là:

cpu,host=server01,usage_user=20
disk,host=server01,usage=70

[[inputs.cpu]]

  • percpu: Nếu true, thu thập số liệu CPU cho từng CPU.
  • totalcpu: Nếu true, thu thập số liệu tổng hợp cho tất cả các CPU.
  • collect_cpu_time: Nếu true, thu thập thời gian CPU.
  • report_active: Nếu true, báo cáo CPU đang hoạt động.

[[inputs.disk]]

  • ignore_fs: Danh sách các loại hệ thống file sẽ bị bỏ qua khi thu thập số liệu.

[[inputs.diskio]]

  • Thu thập số liệu về I/O của đĩa.

[[inputs.kernel]]

  • Thu thập số liệu về kernel của hệ thống.

[[inputs.mem]]

  • Thu thập số liệu về bộ nhớ của hệ thống.

[[inputs.processes]]

  • Thu thập số liệu về các tiến trình của hệ thống.

[[inputs.system]]

  • Thu thập số liệu hệ thống chung.
    • [inputs.system.tags]: Thêm các tags cụ thể cho số liệu hệ thống.
      • region: Định nghĩa vùng, ở đây là “vn-hcm”.
      • cls_service: Định nghĩa loại dịch vụ, ở đây là “vstorage”.
      • cls_service_role: Định nghĩa vai trò của dịch vụ, ở đây là “s-storage”.

[[inputs.net]]

  • Thu thập số liệu về mạng.

[[inputs.netstat]]

  • Thu thập số liệu thống kê mạng.

[[inputs.nstat]]

  • Thu thập số liệu thống kê mạng chi tiết.

[[inputs.interrupts]]

  • Thu thập số liệu về các ngắt của hệ thống.

[[inputs.linux_sysctl_fs]]

Thu thập số liệu về các thông số hệ thống file của Linux.

[[inputs.conntrack]]

  • Thu thập số liệu về kết nối mạng.
    • files: Danh sách các file chứa số liệu kết nối mạng.
    • dirs: Danh sách các thư mục chứa số liệu kết nối mạng.

[[inputs.memcached]]

  • Thu thập số liệu từ Memcached.
    • servers: Danh sách các server Memcached.

Phân loại thành phần.

  • Hệ thống hỗ trợ: Các plugin input/output của Telegraf như cpudiskdiskiokernelmemprocessessystemnetnetstatnstatinterruptslinux_sysctl_fsconntrackmemcached và influxdb.
  • Tự define: Các tags và cấu hình cụ thể như regioncls_servicecls_service_role trong inputs.system.tags và các giá trị trong global_tags (nếu có).

4. LoadBalancing.

Bạn có thể cấu hình Telegraf để gửi số liệu đến nhiều server InfluxDB bằng cách gộp chung các URL trong một khối [[outputs.influxdb]], như trong ví dụ của bạn. Tuy nhiên, khi bạn gộp chung các URL như vậy, Telegraf sẽ gửi số liệu đến các server InfluxDB theo cách phân phối tải (load balancing), nghĩa là mỗi server sẽ nhận được một phần số liệu, không phải tất cả các số liệu.

Nếu bạn muốn mỗi server InfluxDB nhận được toàn bộ số liệu, bạn cần tách ra thành hai khối [[outputs.influxdb]] riêng biệt, mỗi khối cấu hình cho một server InfluxDB.

Gộp chung (Load Balancing).

[[outputs.influxdb]]
   urls = ["http://influxdb-server1:8086","http://influxdb-server2:8086"]
   timeout = "60s"
   database = "database-name"
   tagexclude = ["hash", "last_update", "status_changed_at", "put_timestamp", "reported_put_timestamp"]
   namedrop = ["*-scanner"]

Kết quả: Số liệu sẽ được phân phối giữa influxdb-server1 và influxdb-server2.

Tách ra (Full Data to Each Server).

[[outputs.influxdb]]
   urls = ["http://influxdb-server1:8086"]
   timeout = "60s"
   database = "database-name"
   tagexclude = ["hash", "last_update", "status_changed_at", "put_timestamp", "reported_put_timestamp"]
   namedrop = ["*-scanner"]

[[outputs.influxdb]]
   urls = ["http://influxdb-server2:8086"]
   timeout = "60s"
   database = "database-name"
   tagexclude = ["hash", "last_update", "status_changed_at", "put_timestamp", "reported_put_timestamp"]
   namedrop = ["*-scanner"]
  • Kết quả: Mỗi server influxdb-server1 và influxdb-server2 sẽ nhận được toàn bộ số liệu.
  • Gộp chung: Số liệu được phân phối giữa các server InfluxDB.
  • Tách ra: Mỗi server InfluxDB nhận được toàn bộ số liệu.

Tùy thuộc vào yêu cầu của bạn, bạn có thể chọn cách cấu hình phù hợp. Nếu bạn muốn đảm bảo rằng mỗi server InfluxDB nhận được toàn bộ số liệu, bạn nên tách ra thành hai khối [[outputs.influxdb]] riêng biệt.

5. Gắn tags cho kết quả đầu ra.

Đoạn cấu hình này trong Telegraf định nghĩa một plugin đầu vào ([[inputs.system]]) để thu thập các số liệu hệ thống, và thêm các tags tùy chỉnh vào các số liệu đó. Các tag này giúp phân loại và truy vấn dữ liệu một cách hiệu quả hơn trong InfluxDB.

Cấu hình chi tiết.

[[inputs.system]]
  [inputs.system.tags]
    region="vn-hcm"
    cls_service="vstorage"
    cls_service_role="s-storage"

Giải thích.

  • [[inputs.system]]: Đây là plugin đầu vào của Telegraf để thu thập các số liệu hệ thống như CPU, bộ nhớ, đĩa, và mạng.
  • [inputs.system.tags]: Đây là phần cấu hình để thêm các tag tùy chỉnh vào các số liệu thu thập được từ plugin system.
    • region="vn-hcm": Thêm tag region với giá trị "vn-hcm".
    • cls_service="vstorage": Thêm tag cls_service với giá trị "vstorage".
    • cls_service_role="s-storage": Thêm tag cls_service_role với giá trị "s-storage".

Mục đích của các tags.

Tags giúp phân loại và truy vấn dữ liệu một cách hiệu quả hơn. Khi bạn lưu trữ số liệu trong InfluxDB, các tag này sẽ được lưu cùng với số liệu và bạn có thể sử dụng chúng để lọc và truy vấn dữ liệu.

Ví dụ về số liệu được lưu trong InfluxDB.

Giả sử plugin system thu thập số liệu về CPU, một điểm dữ liệu có thể trông như sau:

cpu,host=myhost,region=vn-hcm,cls_service=vstorage,cls_service_role=s-storage usage_user=12.5,usage_system=7.3 1633024800000000000

Trong đó:

  • Measurementcpu
  • Tags:
    • host=myhost
    • region=vn-hcm
    • cls_service=vstorage
    • cls_service_role=s-storage
  • Fields:
    • usage_user=12.5
    • usage_system=7.3
  • Timestamp1633024800000000000 (Unix timestamp in nanoseconds)

Truy vấn dữ liệu trong InfluxDB.

Bạn có thể sử dụng các tag để truy vấn dữ liệu một cách hiệu quả. Ví dụ, để truy vấn tất cả các số liệu CPU từ vùng vn-hcm, bạn có thể sử dụng câu lệnh InfluxQL sau:

SELECT * FROM cpu WHERE region='vn-hcm'

Từ ví dụ trên bạn có thể thấy:

  • Thẻ (tags): Được sử dụng để phân loại và truy vấn dữ liệu hiệu quả hơn.
  • Trường dữ liệu (fields): Là các giá trị số liệu thực tế.
  • Cấu hình tag trong Telegraf: Giúp thêm các tag tùy chỉnh vào các số liệu thu thập được, giúp bạn dễ dàng phân loại và truy vấn dữ liệu trong InfluxDB.

Tag giúp bạn tổ chức và truy vấn dữ liệu một cách hiệu quả hơn, đặc biệt khi bạn có nhiều nguồn dữ liệu hoặc nhiều máy chủ khác nhau.

6. Tìm hiểu các file trong thư mục telegraf.d.

Các file trong thư mục telegraf.d là các file cấu hình bổ sung cho Telegraf. Chúng chứa các cấu hình plugin cụ thể và được Telegraf tự động tải khi khởi động. Điều này giúp quản lý cấu hình dễ dàng hơn bằng cách tách riêng các cấu hình plugin thay vì đặt tất cả trong một file telegraf.conf.

Ví dụ về file swift-handoff-parts.conf

Dưới đây là nội dung của file swift-handoff-parts.conf:

[[inputs.exec]]
    commands = ["sudo python3.9 /etc/telegraf/plugins/swift/swift-handoff-parts-py3 --metric-telegraf True /etc/swift/object.ring.gz /srv/node"]
    interval = "5m"
    json_name_key = "name"
    tag_keys = ["role"]
    timeout = "60s"
    data_format = "json"

Trong đó:

  • [[inputs.exec]]: Đây là plugin exec của Telegraf, cho phép thực thi các lệnh bên ngoài và thu thập kết quả của chúng.
    • commands: Danh sách các lệnh sẽ được thực thi. Trong trường hợp này, lệnh là:
sudo python3.9 /etc/telegraf/plugins/swift/swift-handoff-parts-py3 --metric-telegraf True /etc/swift/object.ring.gz /srv/node
  • Lệnh này chạy một script Python (swift-handoff-parts-py3) với các tham số để thu thập thông tin về các thiết bị handoff của Swift từ file object.ring.gz và thư mục /srv/node.
  • interval: Khoảng thời gian giữa các lần thực thi lệnh. Ở đây là 5 phút. Điều này có nghĩa là lệnh sẽ được thực thi mỗi 5 phút một lần.
  • json_name_key: Khóa JSON sẽ được sử dụng làm tên của số liệu. Trong kết quả JSON, giá trị của khóa name sẽ được sử dụng làm tên của số liệu.
  • tag_keys: Danh sách các khóa JSON sẽ được sử dụng làm tag. Trong kết quả JSON, giá trị của khóa role sẽ được sử dụng làm tag.
  • timeout: Thời gian chờ tối đa cho lệnh thực thi. Ở đây là 60 giây. Nếu lệnh không hoàn thành trong thời gian này, nó sẽ bị hủy.
  • data_format: Định dạng dữ liệu của kết quả lệnh. Ở đây là JSON. Điều này có nghĩa là kết quả của lệnh sẽ được phân tích cú pháp dưới dạng JSON.

Khi bạn chạy lệnh:

sudo python3.9 /etc/telegraf/plugins/swift/swift-handoff-parts-py3 --metric-telegraf True /etc/swift/object.ring.gz /srv/node

Bạn nhận được kết quả JSON như sau:

[
    {"name": "swift-handoff-devices", "role": "container-server", "total-devices": 0, "total-parts": 0},
    {"name": "swift-handoff-devices", "role": "account-server", "total-devices": 0, "total-parts": 0},
    {"name": "swift-handoff-devices", "role": "object-1-server", "total-devices": 0, "total-parts": 0},
    {"name": "swift-handoff-devices", "role": "object-2-server", "total-devices": 0, "total-parts": 0},
    {"name": "swift-handoff-devices", "role": "object-server", "total-devices": 0, "total-parts": 0}
]

Phân tích kết quả

  • name: Giá trị của khóa name là "swift-handoff-devices". Đây sẽ là tên của số liệu.
  • role: Giá trị của khóa role sẽ được sử dụng làm tag. Các giá trị có thể là "container-server""account-server""object-1-server""object-2-server" và "object-server".
  • total-devices: Tổng số thiết bị handoff. Trong kết quả này, tất cả đều là 0.
  • total-parts: Tổng số phần handoff. Trong kết quả này, tất cả đều là 0.

Cách Telegraf xử lý kết quả.

Telegraf sẽ thu thập và gửi các số liệu với cấu trúc như sau:

  • Tên số liệu: swift-handoff-devices
  • Tags: role với các giá trị tương ứng
  • Trường dữ liệu: total-devices và total-parts

Ví dụ, một số liệu sẽ trông như sau:

swift-handoff-devices,role=container-server total-devices=0,total-parts=0
swift-handoff-devices,role=account-server total-devices=0,total-parts=0
swift-handoff-devices,role=object-1-server total-devices=0,total-parts=0
swift-handoff-devices,role=object-2-server total-devices=0,total-parts=0
swift-handoff-devices,role=object-server total-devices=0,total-parts=0

Các file trong thư mục telegraf.d không cần phải khai báo trong file chính telegraf.conf. Khi Telegraf khởi động, nó sẽ tự động đọc và tải tất cả các file .conf trong thư mục telegraf.d. Điều này giúp bạn quản lý cấu hình dễ dàng hơn bằng cách tách riêng các cấu hình plugin thay vì đặt tất cả trong một file telegraf.conf.

Cách hoạt động.

  • Khi Telegraf khởi động, nó sẽ đọc file telegraf.conf để lấy các cấu hình chung.
  • Sau đó, nó sẽ đọc tất cả các file .conf trong thư mục telegraf.d và tải các cấu hình plugin bổ sung.
  • Trong trường hợp này, Telegraf sẽ thực thi lệnh sudo python3.9 /etc/telegraf/plugins/swift/swift-handoff-parts-py3 --metric-telegraf True /etc/swift/object.ring.gz /srv/node mỗi 5 phút và thu thập kết quả dưới dạng JSON.

7. Telegraf có thể xử lý một dictionary JSON đơn lẻ hoặc một mảng các đối tượng JSON.

Điều này có nghĩa là Telegraf sẽ hiểu và xử lý đúng nếu kết quả JSON chỉ là một đối tượng đơn lẻ như sau:

{"name": "swift-handoff-devices", "role": "container-server", "total-devices": 0, "total-parts": 0}

Bạn vẫn có thể sử dụng cấu hình exec.

[[inputs.exec]]
    commands = ["sudo python3.9 /etc/telegraf/plugins/swift/swift-handoff-parts-py3 --metric-telegraf True /etc/swift/object.ring.gz /srv/node"]
    interval = "5m"
    json_name_key = "name"
    tag_keys = ["role"]
    timeout = "60s"
    data_format = "json"

Lý do là Telegraf có khả năng tự động phân tích cú pháp và xử lý kết quả JSON từ lệnh exec plugin mà không cần phải chỉnh sửa gì thêm trong cấu hình. Điều này giúp bạn dễ dàng thu thập và giám sát các số liệu từ các lệnh bên ngoài mà không cần phải lo lắng về định dạng cụ thể của kết quả JSON.

8. Trong Telegraf, các khóa JSON có thể được sử dụng làm tag trường dữ liệu (fields). Tag là các cặp khóa-giá trị được sử dụng để phân loại và truy vấn dữ liệu một cách hiệu quả hơn. Trường dữ liệu là các giá trị số liệu thực tế.

Ví dụ cấu hình tag_keys.

tag_keys = ["role"]
  • tag_keys: Danh sách các khóa JSON sẽ được sử dụng làm tag. Trong trường hợp này, khóa role sẽ được sử dụng làm tag.

Tại sao sử dụng tag_keys

  • Phân loại và truy vấn hiệu quả: Tag giúp phân loại và truy vấn dữ liệu một cách hiệu quả hơn. Ví dụ, bạn có thể dễ dàng truy vấn tất cả các số liệu có tag role=container-server.
  • Tối ưu hóa lưu trữ: Tags được lưu trữ một cách tối ưu trong cơ sở dữ liệu thời gian thực như InfluxDB, giúp giảm kích thước lưu trữ và tăng hiệu suất truy vấn.

Ví dụ về số liệu với tag.

Giả sử bạn có kết quả JSON như sau:

[
    {"name": "swift-handoff-devices", "role": "container-server", "total-devices": 0, "total-parts": 0, "total-disk": 0},
    {"name": "swift-handoff-devices", "role": "account-server", "total-devices": 0, "total-parts": 0, "total-disk": 0},
    {"name": "swift-handoff-devices", "role": "object-1-server", "total-devices": 0, "total-parts": 0, "total-disk": 0},
    {"name": "swift-handoff-devices", "role": "object-2-server", "total-devices": 0, "total-parts": 0, "total-disk": 0},
    {"name": "swift-handoff-devices", "role": "object-server", "total-devices": 0, "total-parts": 0, "total-disk": 0}
]

Với cấu hình tag_keys = ["role"], Telegraf sẽ tạo ra các số liệu như sau:

swift-handoff-devices,role=container-server total-devices=0,total-parts=0,total-disk=0
swift-handoff-devices,role=account-server total-devices=0,total-parts=0,total-disk=0
swift-handoff-devices,role=object-1-server total-devices=0,total-parts=0,total-disk=0
swift-handoff-devices,role=object-2-server total-devices=0,total-parts=0,total-disk=0
swift-handoff-devices,role=object-server total-devices=0,total-parts=0,total-disk=0
  • Như vậy:
    • Tags: Được sử dụng để phân loại và truy vấn dữ liệu hiệu quả hơn. Được định nghĩa bằng tag_keys.
    • Trường dữ liệu (fields): Là các giá trị số liệu thực tế.

Trong cấu hình của trên, role được định nghĩa là một tag để giúp phân loại và truy vấn dữ liệu một cách hiệu quả hơn. Các khóa JSON khác như total-devicestotal-parts và total-disk sẽ được sử dụng làm trường dữ liệu.

9. Kết luận.

Cấu hình Telegraf để thu thập số liệu hệ thống là một bước quan trọng trong việc giám sát và quản lý hiệu suất của hệ thống. Bằng cách thêm các thẻ tùy chỉnh, bạn có thể dễ dàng phân loại và truy vấn dữ liệu, giúp tối ưu hóa quá trình giám sát. Hy vọng rằng bài viết này đã cung cấp cho bạn những kiến thức cơ bản và cần thiết để bắt đầu với Telegraf. Hãy tiếp tục khám phá và tùy chỉnh Telegraf để phù hợp với nhu cầu giám sát của bạn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories