tl;dr

何度か書いているかもしれないけど。

参考

Datadog でオリジナルなデータを飛ばす Agent Check の雛形

概要

  • チェックスクリプトは Agent クラスを継承、check() を利用して書き、/etc/dd-agent/checks.d/ 以下に置く
  • チェックスクリプトの設定ファイルは YAML で書いて /etc/dd-agent/checks.d/ 以下に置く
  • チェックスクリプトファイル名と設定ファイル名は同じにしておく(拡張子は別)必要がある
  • API を直接叩くのではなく、Datadog Agent の監視に含まれるので余計な cron 等を設定する必要が無いのが嬉しい

チェックスクリプト

/etc/dd-agent/checks.d/ 以下に置くもの。

  • 雛形
from checks import AgentCheck

class YourCheck(AgentCheck):

    '''
         このあたりに色々と処理を書く
    '''

    def check(self, instance):
        global_config = self.init_config.get('foo')
        instance_config = instance['bar']

        self.gauge('foo.bar', value)
  • 実装例(とある API が返す値(my_value)を Datadog に gaugeで送る)
from checks import AgentCheck
import requests, json

class MyValue(AgentCheck):

    def get_my_value(self, endpoint):
        response = requests.get(endpoint)
        return response.json()['my_value']

    def check(self, instance):
        metrics_key = self.init_config.get('metrics_key')
        endpoint = instance['endpoint']

        my_value = self.get_my_value(endpoint)
        self.gauge(metrics_key, my_value)

チェックスクリプトの設定ファイル

/etc/dd-agent/conf.d/ 以下に置くもの。

Check 実行ファイルおよび設定ファイルの名前(拡張子を除く)は一致している必要があります。 例えば、実行ファイルがmycheck.py の場合、設定ファイルは、mycheck.yaml というファイル名になります。

とのことなので、チェックスクリプトファイル名と設定ファイル名は同じにしておく(拡張子は別)必要がある。大事なことだと思うので二度書いた。

  • 雛形
init_config:

instances:
    [{}]

実装例(メトリクスキー foo.barでメトリクスを送信する)

init_config:
  metrics_key: 'foo.bar'

instances:
  - endpoint: 'https://api.endpoint.example.com'

以上

メモ。
また、来年あたり書くかもしれない。

元記事はこちら

Datadog でオリジナルなデータを飛ばす Agent Check の雛形あきこ