AWS WAF のメトリックが Mackerel で監視できるようになりました! #mackerel

Mackerel で AWS WAFのメトリックが監視できるようになったのでお伝えします。「AWSインテグレーションに次はどのサービスが追加されるか」という予想レースがあったとしたら大穴だったのではないでしょうか!? 実際に監視してみた画面と共に詳細をお送りします。
2020.04.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、Mackerel で監視してますか!(挨拶

先日のバージョンアップにより、Mackerel の AWS インテグレーションが AWS WAF のメトリックを取得できるようになりました。もちろんそのメトリックに対して監視ルールを設定、閾値を超えたときに通知させることも可能です。

WAF v1、v2 という表現がされていますが、要は AWS WAF (現行仕様) と AWS WAF Classic ですね。 v1、v2 の詳しいところは下記ブログの「AWS WAF v2 の変更点」のところをお読みいただくとして、つまりは特に考えることなく AWS WAF のメトリックが取得できるということです。

Mackerel のグラフ

こんな感じです。ここでは eval-waf という名前の Web ACL を監視対象にしています。

この Web ACL にはAWS-AWSManagedRulesAmazonIpReputationListAWS-AWSManagedRulesCommonRuleSetというふたつのマネージドルールが設定されていますが、今回テストで発生させたトラフィックは前者のみにマッチしたようですね。後者のメトリックが発生していないため、グラフには現れていません。

取得可能なメトリック

上述した Mackerel のドキュメントにもありますが、Web ACL を 1 マイクロホストとしてメトリックを取得します。 各 Web ACL 全体と、Web ACL に適用されている WAF ルールそれぞれについて、以下の 4 つのメトリックが取得されることになります。

  • AllowedRequests : 許可されたリクエストの数
  • BlockedRequests : ブロックされたリクエストの数
  • CountedRequests : 特定のルールすべての条件に一致した(カウントされた)リクエスト数
  • PassedRequests : ルールグループに含まれるどのルールにも一致しないリクエストの数

各メトリックの詳細は、↓の AWS のドキュメントをご参照ください。

つまり、このマイクロホストによって取得される最大のメトリック数は以下の数式で表されることになります。

4 x (ルール数 + 1)

+1 するのは「ALL」、つまり Web ACL 全体の分です。例えばひとつの Web ACL に 5 つのルールが設定されていた場合は 4 x (5+1) = 24 となります。 この計算で行くと、7 つのルールが設定されている Web ACL は 2 マイクロホストとして計算される可能性があることになるので注意しましょう。

ちなみに「最大の」とか「可能性がある」とわざわざ書いているのは、AWS のドキュメントの「レポート条件」にもあるように、値が発生しないとそもそもメトリックとして記録されず、結果 Mackerel にも取り込まれないからです。これはほかのメトリックと同じですね。

設定追加方法

既に AWS インテグレーションで監視をしている状態を想定して説明します。 まずは既存の Mackerel 用 IAM ロールに、下記のマネージドポリシーを追加してください。

AWSWAFReadOnlyAccess

これにより、Mackerel の AWS インテグレーションで WAF のメトリックが取得できるようになりました。 次に Mackerel のオーガニゼーション設定から、AWS インテグレーションの修正を行います。下記のような設定項目が増えていると思いますので、チェックをいれましょう。サービス・ロールはそれぞれの環境に合わせて設定してください。

あとは、しばらくするとメトリックが収集されるようになります!

AWS インテグレーションのメトリックは、おおよそ 5 分間隔で収集されていきますので、そのくらいの余裕をみてみてください。また前述の通り、そもそもメトリックが発生していなければ = トラフィックがない ALB などにアタッチされている Web ACL であれば、Mackerel の画面にも出てこないと思います。適当に curl したりブラウザで叩いてみたりして、トラフィックを発生させてみましょう。

メトリックが取得できれば、それに監視ルールを設定することも可能です。

まとめ

Mackerel で AWS WAF のメトリックが監視できるようになった、という話をお伝えしました!

AWS WAF のメトリックをモニタすることで、使っているルールの評価や調整に役立つものと思われます。またもちろん、他のメトリックと付き合わせることで、「いま」何が起きているかを総合的に判断するときに役立つでしょう。Mackerel で既に監視をされている環境で、AWS WAF を使われている場合は、是非設定追加をしてみてください!