Thứ Tư, 1 tháng 10, 2014

[Graphite] Viết collector cho graphite

Bài viết được thực hiện trên:
thanhnt@Thanhnt:~$ lsb_release -r
Release:    12.04 

Để hiểu được bài viết này nói gì, trước tiên bạn cần hiểu về graphite và diamond ( tớ sẽ không giới thiệu trong bài viết này).
Để hiểu về graphite, có thể tham khảo tại:
https://graphite.readthedocs.org/en/latest/
Để hiểu thêm về diamond, bạn có thể tham khảo tại:
https://github.com/BrightcoveOS/Diamond
http://graphite.readthedocs.org/en/1.0/tools.html

Trong bài này, tớ chỉ nói về việc làm thế nào để viết được một collector, thu thập thông tin trên các nodes và gửi metric về graphite server với một ví dụ khá đơn giản.

Diamond collector chạy trong diamond process và collect metric. Sau đó metric sẽ được published tới graphite server.

Collector là một subclasses của diamond.collector.Collector.
Để gửi metric về graphite server, bạn cần sử dụng một method được gọi là "collect"
import diamond.collector

class ExampleCollector(diamond.collector.Collector):

    def collect(self):
        # Set Metric Name
        metric_name = "my.example.metric"

        # Set Metric Value
        metric_value = 42

        # Publish Metric
        self.publish(metric_name, metric_value)
 Chúng ta có thể nhận ra rằng , class ExampleCollector(diamond.collector.Collector)
được phát triển lên từ diamond.collector.Collector , là một base class trong diamond.
Để định nghĩa một metric, bạn cần hai tham số: tên metric và giá trị của metric. Thông thường, python dict sẽ rất hữu dụng trong trường hợp này.
Sau đó hàm self.publish sẽ publish metric đó tới graphite server.
Để testing một collecor, bạn cần sử dụng một file config cho diamond. Ví du, bạn có một file config cho diamond diamond.conf như sau:
[server]

user = ecuser
group = ecuser

handlers = diamond.handler.archive.ArchiveHandler
handlers_config_path = /tmp/diamond/handlers/
collectors_path = /tmp/diamond/collectors/
collectors_config_path = /tmp/diamond/collectors/

collectors_reload_interval = 3600

[handlers]

[[default]]

[[ArchiveHandler]]
log_file = /dev/stdout

[collectors]
[[default]]
Và sau đó bạn chạy lện sau:
# diamond -f -l --skip-pidfile -c path/diamond.conf

output sẽ có format như sau:
servers.hostname.example.my.example.metric 42

Diamond hỗ trợ việc viết thêm các colletor cho graphite một cách rất linh động. Vì vậy, bạn có thể viết thêm  các collector để collect các thông tin bạn cần một cách thoải mái.
Tất cả mọi việc bạn cần làm là định nghĩa tên metric và metric value để nhập vào self.publish() method.

Hi vọng ví dụ trên giúp ích được cho bạn trong việc tim hiểu và sử dụng graphite và diamond.

                                                                               --- Thanks for your reading ---

1 nhận xét:

  1. 1.
    > Chúng ta có thể nhận ra rằng , class ExampleCollector(diamond.collector.Collector)
    được phát triển lên từ diamond.collector.Collector , là một base method trong diamond.

    METHOD????

    2.
    > Diamond hỗ trợ việc add thêm các colletor một cách rất linh động. Vì vậy, bạn có thể add các collector collect các thông tin bạn cần một cách thoải mái.
    Tất cả mọi việc bạn cần làm là định nghĩa tên metric và metric value để nhập vào self.publish() method.

    nội dung đoạn này ~= 0

    Trả lờiXóa