Datadog Agentユーザにread権限を与えずに特定ディレクトリの使用量のメトリクスを送る
環境
- Datadog Agent v6.15.0
- CentOS 7.3.1611
背景
Datadogに特定のディレクトリの使用量のメトリクスを送るには、 公式で提供されている以下のインテグレーションを用いることで実現できる。 docs.datadoghq.com
しかし、このインテグレーションだと対象のディレクトリについてDatadog Agentのユーザに対してread権限を与える必要がある。 状況によってはDatadog Agentユーザにそのディレクトリのread権限を与えたくない場合がある。 対象のディレクトリにDatadog Agentユーザのread権限を与えずに使用量をDatadogに送りたい。
方法
Datadog Agentユーザに対して、sudoersの設定でディレクトリ容量取得コマンドの実行を許可する。
具体的には,sudo /usr/bin/du -sb ${対象のディレクトリのパス}
を許可する。
/etc/sudoers
に対して、${Datadog Agentのユーザ名} ALL= NOPASSWD: /usr/bin/du -sb ${対象ディレクトリパス}
を追加する。
次に、DatadogのカスタムAgentチェックを作成する。
docs.datadoghq.com
公式ドキュメントを参考にして、以下のファイルをconf.d/custom_directory.yaml
として配置する。
init_config: instances: - directory: ${directory_path}
さらに、以下のファイルをchecks.d/custom_directory.py
に配置する。
# -*- coding: utf-8 -*- try: from checks import AgentCheck except ImportError: from datadog_checks.checks import AgentCheck from datadog_checks.base.utils.subprocess_output import get_subprocess_output __version__ = "1.0.0" class DirectoryCheck(AgentCheck): def check(self, instance): directory = instance['directory'] size_bytes = self.__collect_directory_size_bytes(directory) self.gauge('ここにメトリクス名', size_bytes, tags=[ここにタグ]) def __collect_directory_size_bytes(self, directory): # Datadog Agent ユーザで # sudo du -sb <directoryパス> # が実行できる必要があります out, err, retcode = get_subprocess_output( ["sudo", "/usr/bin/du", "-sb", directory], self.log, raise_on_empty_output=True, ) if retcode != 0: raise RuntimeError(err) return int(out.split()[0])
対象環境でDatadog Agentを再起動すれば、custom_directory
カスタムチェックが動作し、
対象ディレクトリの容量がメトリクスとして送信される。