Saturday, 17 August 2013

[Monitoring] StatsD

StatsD là tên của một NodeJS daemon (hay gọi khác là service), daemon này listen các message được gửi tới qua cổng UDP (mặc định là cổng 8125).

chữ d ở cuối statsd là viết tắt cho daemon, giống như cách đặt tên phổ biến cho httpd, ftpd, rsyncd ...

Từ cái tên này, có thể thấy StatsD là một daemon phục vụ cho việc thống kê (statistics). Người ta (Etsy) tạo ra StatsD để giúp cho việc thu thập dữ liệu trở nên dễ dàng hơn. Mô hình cơ bản nhất là trên 1 máy server, StatsD chạy và các webapp trên máy đó sẽ gửi các thông tin thống kê tới daemon này. StatsD chỉ phục vụ quá trình thu thập dữ liệu, sau đó nó có thể gửi tới một máy chạy graphite hay ganglia để thực hiện vẽ các đồ thị dựa trên dữ liệu thu thập được.

Điểm đáng chú ý và hay ho nhất của StatsD (tức phần daemon) là nó rất đơn giản nên được implement trên nhiều ngôn ngữ khác nhau. Có thể kể tới:
  • Etsy’s statsd: node.js. The Original
  • petef-statsd: ruby. Supports AMQP.
  • statsd_rb: ruby.
  • quasor/statsd: ruby. can send data to graphite or mongoDB
  • py-statsd: python (including python client code).
  • zbx-statsd: python, based on py-statsd. Sends data to Zabbix instead of graphite.
  • statsd.scala: scala. Sends data to Ganglia instead of Graphite. Different messaging protocol, uses JSON.
  • txStatsD: python + twisted, from the folks @ Canonical
  • estatsd: erlang. From the folks @ Opscode
  • ...
(Theo http://joemiller.me/2011/09/21/list-of-statsd-server-implementations/)

Còn phần client (tức phần code sẽ gửi dữ liệu đến statsd) thì có thể thực hiện bởi bất cứ ngôn ngữ nào. Danh sách các client library bằng nhiều ngôn ngữ khác nhau: https://github.com/etsy/statsd/tree/master/examples

Phần dữ liệu truyền đi được gọi là StatsD metric (chi tiết xem ở
https://github.com/etsy/statsd/blob/master/docs/metric_types.md )

Bài giới thiệu chính thức về statsd
http://codeascraft.com/2011/02/15/measure-anything-measure-everything/

Kiểm tra xem pystatsd đang chạy và listen port UDP 8125
root@u1204: ~ () # ss -nlpu | grep 8125
UNCONN     0      0                 127.0.0.1:8125                     *:*      users:(("pystatsd-server",22404,3))
Lần tới bạn viết một webapp, hãy nhớ tích hợp statsd client vào và luôn sẵn sàng gửi đi các thông tin bạn cần đo đếm!