Datadogの監視ダッシュボードをコード化して管理するツール「dashdog」を公開しました

記事タイトルとURLをコピーする

はじめまして。8月1日よりサーバーワークスにJOINしました、照井と申します。

札幌からリモートワークで、しかもパートタイマーというちょっと変わった形にはなりますが、これから宜しくお願い致します。

所属はクラウドインテグレーション部部長付で、実案件よりはMSP業務の効率化などの仕組み作りや研究開発をメインに働いています。

ゆとり第一世代であり、インフラを本格的にやり始めたのはAWSで、かつ東京リージョンができる頃からというクラウドゆとり第一世代?な2児の父です。ちなみにAWSの認定資格は5冠で全て取得しています。

というわけで(?)、前述の通りMSP業務の効率化などを目的としてDatadogの検証を進めているわけですが、その中で一部足りない機能が出てきたので、それを解決するツールを作ってGitHubおよびRubygemsに公開しましたというのが今回の本題となります。

何故Datadog?

サーバーワークスでは従来からZabbixを統合監視ツールとして利用しており、Zabbixおじさんと呼ばれるスペシャリストの存在などもあってAWSにしっかりと対応した監視運用サービスを既にご提供しております。

しかし、Zabbixは多機能で完成度の高い素晴らしい監視システムではあるのですが、やはりクラウドに最適化された運用をとなると、そもそもの設計思想的に合わない部分や、監視対象のAWSリソースが既に数千のオーダーに乗っており、これからも増え続けることを考えると運用負荷もバカにならないという現実もあります。

もちろん、Zabbixが優れている部分やSaaSだけでは達成できない要件などもあるので、Datadogを正式に採用したとしてもZabbixを捨てる訳ではなく、よりお客様へ最適なサービスをご提供できるように使い分け、組合わせて利用していきます。

また、SaaSを組み合わせることで迅速かつ適切なシステムをお客様へ提供するというサーバーワークスのスタイルをAWSの監視運用へも適用するという目的もあります。そんな中で、一部のお客様では既に利用しているDatadogをより活用してMSP全体のサービスレベルを上げるべく、検証や実装を進めているといった感じになります。

どんなツール?

ソースはコチラです。

簡単に言うと、Datadogの監視ダッシュボードの設定をRuby DSLの形式でexport/importするツールです。「codenize.tools」と聞いてピンと来る方は、それらと同じ系統のツールだと思っていただけると良いかと思います。
※ちなみにDatadogのアラート設定については、codenize.toolsの作者でありAWSコミュニティヒーローにも選ばれたCookpadの菅原さんによって既にツール化されていたりします。

DatadogのダッシュボードはGUIでも同一のアカウント内ではコピーすることができ、ダッシュボードの部品毎では内容をJSONで出力することが出来ます。しかし、MSPという我々のような立場では、お客様やプロジェクト毎に大量のダッシュボードを作成し、アカウントを超えて管理する必要があり、それだけでは多くの画面ポチポチ業を必要とされるため、多大な労力が必要となってしまいます。

ということで、不幸中の幸いかDatadogではダッシュボードのCRUDが一通りAPIとして提供されていたため、これを解決するツールを作りました。

我々のようなMSPという特殊な立場でなくとも、Microservicesな環境でサービス毎にダッシュボードを管理するのがツラいダッシュボードの変更履歴をGitHub等でpull-reqベースで管理したい、等といった用途でもお使いいただけるかと思います。

使い方

インストール方法

Rubygemsにて公開済みですので、以下のコマンドを実行するだけです(要Ruby実行環境)

$ gem install dashdog


利用方法

認証情報の設定

まずは、DatadogのAPIをコールするために必要なAPIキーとApplicationキーを環境変数にセットします。

$ export DD_API_KEY=
$ export DD_APP_KEY=

現状のダッシュボード構成を出力

ダッシュボード構成をRuby DSLで出力します。

$ dashdog export


-wまたは--writeオプションを付けるとBoardfileというファイルに内容を書き込みます(ファイル名もオプションで変更可能)
また、--splitオプションを付けるとダッシュボード毎に別々のファイルに書き込みます(この場合も分割されたファイルのrequireが書かれたBoadfileが起点となります)
※このブログが公開されるまでの間に偉大なる先人(前述の菅原さんです)からpull-reqいただきました(これ以外にも色々と)ありがとうございます!w

すると、以下のようなファイルが出来上がります。

timeboard "terui's TimeBoard 16 Aug 2016 11:46" do
  read_only false
  description "created by terui@serverworks.co.jp"
  title "terui's TimeBoard 5 Aug 2016 11:46"
  graphs do |*|
    definition do
      viz "timeseries"
      requests do |*|
        q "avg:system.load.1{*}"
        aggregator "avg"
        conditional_formats []
        type "line"
      end
    end
    title "Avg of system.load.1 over *"
  end
end

ダッシュボード設定を反映

上で出力したファイル(オプションで変更可能)を編集後、以下のコマンドを実行します。
設定ファイルを読み取って差分があれば適宜ダッシュボードの作成・更新・削除が行われます。

$ dashdog apply


-dまたは--dry-runオプションを付けると更新は行わずに差分のプレビューのみを行うことが出来ます。

こんな感じです。 dashdog-diff

最後に

MSPの分野でもよりSaaSを活用し、足りない部分やより便利な機能だけを作りこむことで、お客様へ最適な監視運用体制を迅速に提供できるようにしていきたいと考えています。

このツールを利用し、目的別のダッシュボードテンプレートを用意して展開できるようにしたり履歴・変更管理できるようにすることで、その一助になれば良いなと思い作りました。多少ニッチなツールではありますが、Datadogユーザでダッシュボードの管理にお困りの方がもし居ましたら使ってみてください。

ソースコードはGitHubに公開していますので、フィードバックやPull requestもお待ちしております :-)
(とか言ってる間に神の御手によって便利機能が次々と足されていくw)

また、当社はDatadog認定パートナーですので、Datadogのご活用をご検討の際はぜひお問い合わせください。