[DD] データドッグのdogpushコマンドでハマったこと

データドッグを使ったモニタリング設定をする必要があったので、dogpushコマンドを使用して設定を追加しようと思ったのですが、なぜかうまくいかずにハマってしまいました。

ちなみに過去にもdogpushコマンドを使ってモニター設定をしたことが何度かあったのですが、当時はハマった記憶がないのですんなり解決していたのかもしれません。

今後、同じ過ちがないように備忘録として記事を残します。

dogpushコマンドのインストール


今回はコマンドのインストールから始めていました。
導入や使い方はこちらのサイトを参考にさせていただきました。

ちなみに私の環境ではMacOSを使用しています。

# dogpushのインストール
$ pip install dogpush

pythonのバージョンは2.7で行いました。
python3系だとprintの記述でエラーが発生してしまったためです。



DataDogでAPIの発行


[Integrations]から[APIs]を開いてAPI keyとApplication Keyを発行します。

その後、ローカル環境にてconfig.yamlというファイルを作成します。

datadog:
  api_key: xxxxxxxxxxxxxxxxxxxxxxx
  app_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rule_files:
- monitors.yaml

rule_filesは読み込ませるモニター設定のyamlファイル名を入力します。

準備ができたら下記のコマンドを叩いてエラーがないことを確認してください。

# 既存のモニター設定をyaml形式で標準出力
$ dogpush init

ハマったところ

# monitors.yamlというファイル名で既存のモニター設定を保存
$ dogpush init > monitors.yaml

dogpush initコマンドを実行することで既存のデータドッグに登録されているモニター設定をyaml形式で出力することができます。コマンドを実行すると標準出力で表示されてしまうため、リダイレクトでmonitors.yamlというファイルに保存しました。


保存されたyamlファイルの内容ですが、「!!python/unicode」という文字列が表示されてしまっています。
文字コードを見分けるために自動的に付くものなのかなと思って気にしせずに作業を進めようとしましたが、ここで問題が発生しました。

dogpush diffコマンドを実行すると、ローカルでの設定とデータドッグでの設定に差分がないか確認をすることができます。
しかし、実際に実行してみると下記のエラーが発生してしまいました。

yaml.constructor.ConstructorError: could not determine a constructor for the tag ‘tag:yaml.org,2002:python/unicode’
in “/Users/xxxxxxx/monitors.yaml”, line 5, column 3


結論としては先ほどの「!!python/unicode」という文字列がついてしまうことが問題のようです。そのため、該当の文字列を削除するようにsedコマンドを挟むことにしました。

# 余計な文字列を削除しつつyamlに出力
$ dogpush init | sed -e ‘s/!!python\/unicode //g’ > monitors.yaml

余計な文字を削除したことでdogpush diffコマンドが成功するようになりました。

プッシュできるか試す


データドッグの既存のモニター設定を全て削除して、dogpush pushコマンドで正常にモニター設定を登録できるか確認します。


設定のpushに成功しました。


実際にデータドッグのモニター設定に登録されていることがわかります。
また、python/unicodeの文字列を削除しても日本語が正常に表示されていました。

おわりに

dogpushコマンドを使えば、既存のモニター設定をテンプレートとして保存したり、他のデータドッグアカウントへ同じモニター設定を展開することができます。

しかし、python/unicodeという文字列が表示されてしまうことでdogpushコマンドが正常に動作しませんでした。
今回はpython/unicodeの文字列を削除した際に一部のインデントが崩れてしまい、さらにインデントが崩れたことに気がつかなくて余計沼にハマってしまいました。

「python/unicodeを削除してもエラーが消えないし、実は削除してはダメだったのでは??? じゃあなんでエラー通らないんだ???」みたいなハマり方ですね。

今後、dogpushコマンドを使いたいケースが発生した際に今回のケースを忘れないように記事にしました。
もしも同じ罠にハマってる人がいたら参考になれば嬉しいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)