tukaのブログ

気が向いた時に何か書きます

check-metaプラグインをアップデートしました(v0.1.0)

先日公開したcheck-metaプラグインをアップデートしました。

tukaelu.hatenablog.jp

現時点で最新版のv0.1.0では以下のオプションに対応しました。

それぞれさらっとご紹介です。


正規表現での比較(メタデータ値が文字列の場合)

v0.0.1ではメタデータの値が文字列型の場合は--expectedで指定した文字列との等価比較をしてましたが、--regexオプションを有効にすると正規表現としてマッチを行うようにしました。

Application Options:
  -n, --namespace=NAMESPACE            Uses the metadata for the specified namespace
  -k, --key=KEY                        The value matching the specified key is used for comparison
  -e, --expected=EXPECTED-VALUE        Compares with the specified expected value
      --regex                          Compare with regular expression if specified (Enable only for string type value)
 :

--regexオプションはメタデータの値が文字列以外の場合は作用しません。

(指定してもエラーになりません)


設定例はこんな感じ。

# GET /api/v0/hosts/<hostId>/metadata/namespace
# {
#   "key1": "value1",
#    :
# }
[plugin.checks.meta_match_regex]
command = ["/path/to/check-meta", "--namespace", "namespace", "--key", "key1", "--expected", "value[0-9]{1}", "--regex"]

check-logcheck-procsなどは--pettern正規表現を指定する形式なのに対し、必要な時にだけ正規表現として作用させるためにあえてフラグという選択をしました。


数値の大小比較(メタデータ値が数値の場合)

メタデータの値が数値型(JSONのnumber)の場合、actualを左辺、expectedを右辺として大小比較するフラグオプションを追加しました。

Application Options:
 :
    --gt   Compare as 'actual > expected' (Enable only for number type value)
    --lt   Compare as 'actual < expected' (Enable only for number type value)
    --ge   Compare as 'actual >= expected' (Enable only for number type value)
    --le   Compare as 'actual <= expected' (Enable only for number type value)
 :

設定例はこんな感じ。

# GET /api/v0/hosts/<hostId>/metadata/namespace
# {
#   "key1": "value1",
#   "key2": 1000,
#    :
# }
[plugin.checks.meta_match_regex]
command = ["/path/to/check-meta", "--namespace", "namespace", "--key", "key2", "--expected", "1000", "--le"]

比較オプションを複数指定した場合はエラーとなります。n以上、m以下の様な条件指定は現時点では非対応です。


メタデータ同士の比較

メタデータ同士の比較に対応しました:sparkles:

このプラグインに必要だなと真っ先に思った機能がメタデータ同士の比較でした。

オプションはこんな感じ。

Application Options:
 :
  -N, --compare-namespace=NAMESPACE    Uses the metadata for the specified namespace to compare
  -K, --compare-key=KEY                Uses the metadata value that matches the specified key as the expected value

比較に用いるメタデータのnamespaceとJSONのキーを指定し、メタデータ同士が同じ型ではない場合はエラーとなります。

またいずれかのオプションが指定されなかった場合は、actualな値のnamespaceもしくはJSONのキーを使用します。

リポジトリのREADMEのExampleに設定例を載せていますが、以下のようにkey1key4の値を比較する場合の定義はこのようになります。

# GET /api/v0/hosts/<hostId>/metadata/namespace
# {
#   "key1": "value1",
#    :
#   "key4": "value1",
# }
 :
## OK (compare with metadata)
[plugin.checks.meta_compare_metadata]
command = ["/path/to/check-meta", "--namespace", "namespace", "--key", "key1", "--compare-key", "key4"]

ちなみに前述の正規表現、数値の大小比較のオプションも組み合わせることが可能です。

チェック監視の条件はmackerel-agent.confに書くものでしたが、このプラグインの面白いところはAPI経由で監視条件をある程度コントロールできるところかなと思います。


まとめ

ゆるゆるとバージョンアップを続けておりますが、オプションが増えて少し便利になったかなと思います。

しかしまだAPIとの疎通ができなかった場合などの考慮に対応できていないので、次のバージョンアップではそちらにも対応しようと思います。不具合などありましたらIssueください!


メタデータが監視のみならず運用などにも使えるのではないか!と感じていただきつつ、活用していただけると!