Annotate provider maintenance time with Mackerel

このブログはDigitalOceanが提供しているVPS上で動いています。

DigitalOceanはもちろん、AWSやさくらVPSなどの物理リソースを提供しているプロバイダでは、プロバイダの都合によってメンテナンスが発生する場合があります。例えばネットワーク機器の差し替えや古くなった物理サーバの入れ替えなどによるものです。

このようなプロバイダ側で予測が可能で、サービスの可用性に影響する類のメンテナンスについては、まず何らかの形(メールや公式サイトなど)で告知が行われます。

ふと思いついて↑のメンテナンス期間をMackerelのグラフアノテーションに入れてみました。

はたしてグラフアノテーションは未来の日付に対して有効なのでしょうか…。

Web管理画面からは日付をマニュアルで入力することはできなかったので、mkrコマンドでやってみます。以下のコマンドを実行。

mkr annotations create \
--title "DO Maintenance" \
--description "DigitalOceanのメンテが入る時間 https://twitter.com/lorentzca/status/854522664165048320" \
--from $(date -jf '%Y/%m/%d %H:%M:%S' '2017/04/25 05:00:00' +%s) \
--to $(date -jf '%Y/%m/%d %H:%M:%S' '2017/04/25 07:00:00' +%s) \
--service "VPS"

以下のような結果が返ってきました。できたっぽい…?

{
    "id": "2ZiQgT66EnN",
    "title": "DO Maintenance",
    "description": "DigitalOceanのメンテが入る時間 https://twitter.com/lorentzca/status/854522664165048320",
    "from": 1493064000,
    "to": 1493071200,
    "service": "VPS"
}

mkrコマンドでアノテーションのリストを出してみます。未来の日付だけど、ちゃんと設定されているように見える。

$ mkr annotations list --service VPS --from $(date -jf '%Y/%m/%d %H:%M:%S' '2017/04/24 00:00:00' +%s) --to $(date -jf '%Y/%m/%d %H:%M:%S' '2017/04/26 00:00:00' +%s)
[
    {
        "id": "2ZiQgT66EnN",
        "title": "DO Maintenance",
        "description": "DigitalOceanのメンテが入る時間 https://twitter.com/lorentzca/status/854522664165048320",
        "from": 1493064000,
        "to": 1493071200,
        "service": "VPS"
    }
]

Web画面からはもちろん確認できません。

とりあえず明日になればどうなっているのかわかるので、分かり次第追記しようと思います!

※ 結果にまとめました。

結果

ちゃんとアノテートされてる! ✨

メンテナンス枠内でinterfaceのrx(受信したパケット量)が6時ちょうどに半減していますね。これはメンテナンス(ネットワーク機器のメンテナンスだったはず)の影響なのかたまたまなのか…。

過去1週間くらいまでの同時間帯のグラフと比べて見ます。

たまたまっぽい…かな!

式はこんな感じです。

group(alias(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "RX_today"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "1d"), "RX_1day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "2d"), "RX_2day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "3d"), "RX_3day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "4d"), "RX_4day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "5d"), "RX_5day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "6d"), "RX_6day_ago"),
alias(timeShift(host("2K7YoVDZ9FS", "interface.eth0.rxBytes.delta"), "7d"), "RX_7day_ago"))

まとめ

  • APIならばアノテーションに未来の日付を設定することは可能
  • Web管理画面から未来の日付のアノテーションは設定できないし、その日が来るまで確認もできない

感想

良い。

今まではメンテによって個人サーバに再起動が走るときは告知が来たタイミングでカレンダーに予定を入れていました。

Mackerelでアノテーションとしてメンテ時間を管理できればメンテの前後でのメトリックの変化がひと目で分かるし(uptimeがリセットされたとか)、メンテナンス期間の中のどのタイミングで実際に再起動などが実行されたかもひと目で分かるようになる。

便利!!

うまくやれば自動でメンテ時間を注釈することもできるかも…?(結構大変そうだけど)

参考リンク