Mackerel アシスタントプロデューサーの id:wtatsuru です。
2022/06/15 更新
一部、影響日時と対象メトリックの記載に誤りがありましたので、以下の3点を訂正いたしました。対象者に個別に連絡させていただいている返金内容に変更はありません。
- AWSインテグレーション - Redshift の影響開始日が 2019年3月23日 からとなっていましたが、2019年2月20日からに訂正いたします。
- AWSインテグレーション - Step Functions の影響開始日が 2019年3月23日からとなっていましたが、2019年5月9日からに訂正いたします。
- Lambda の対象メトリックに
custom.states.lambda_functions.#.succeeded
を追記しました。
本文
Mackerel のクラウドインテグレーション機能にて、2019年2月20日から2022年4月11日までの期間中に、課金対象となるホスト台数の根拠となるメトリック数を誤って多くカウントし、本機能をご利用いただいていた一部のお客様に対して、実際に利用いただいているものより多い金額が請求されておりました。 2022年3月30日に事象を確認して以降、翌3月31日(該当記事)、4月26日(該当記事)の2度に渡り、本件についてのご報告と今後の方針についてお知らせしてまいりました。詳細の確認が完了し、該当するお客様への返金のご案内の準備が整いましたので、経緯とお詫び、返金のご対応について以下ご報告させていただきます。この度の不具合により、お客様にはご迷惑をおかけしましたことを深くお詫び申し上げます。
影響サービスと期間
- AWSインテグレーション - WAF
- 2020年3月23日から2022年3月31日まで
- AWSインテグレーション - Redshift
- 2019年2月20日から2022年4月8日まで
- AWSインテグレーション - Step Functions
- 2019年5月9日から2022年4月8日まで
- Google Cloud インテグレーション - App Engine
- 2020年9月24日から2022年4月11日まで
- Google Cloud インテグレーション - Compute Engine
- 2020年9月24日から2022年4月11日まで
事象
クラウドインテグレーションで取得されるメトリック数が、Mackerel のシステムの不具合により、一部のお客様の環境で実際の利用より多くカウントされるという事象が発生しておりました。本不具合によりメトリック数が多くカウントされてしまったことで、ホストあたりのメトリック数がプラン上限を超えてしまった環境では、追加のホスト台数が請求対象として加算されていました。
Mackerel のホストには、スタンダードホストは200、マイクロホストであれば30と、種別ごとにメトリック数の上限が存在します。ホストのメトリック数がプラン上限を超えた場合は追加のホスト台数として換算され、利用料金の請求対象となります。 この時、根拠となるメトリック数は、1時間程度以内の間隔で定期的に、その間にホストに対して投稿されたメトリック数をカウントして集計しています。詳細は以下のFAQをご覧ください。
プラン上限超過時のホスト台数換算について – Mackerel Support
発見から対応までの経緯
- 2022年3月30日 お客様からの問い合わせをきっかけに事象が発覚、調査を開始
- 2022年3月31日 第一報告知 AWSインテグレーション WAF連携のメトリック数の過剰カウントに関するご報告 - Mackerel お知らせ #mackerelio
- 2022年4月11日 メトリックの重複カウントが行われないよう修正
- 2022年4月26日 影響範囲調査完了告知 【続報】クラウドインテグレーション メトリック数の過剰カウントに関するご報告 - Mackerel お知らせ #mackerelio
- 2022年5月31日 最終報告(本告知)
原因
Mackerel ではクラウドインテグレーションを用いると、お客様の環境のクラウド製品をMackerel のホストとして管理し、メトリックを取得・監視していただくことができます。この機能は、お客様が自身のクラウド環境の認証情報をMackerel に登録いただくことで、Mackerel のシステムがその認証情報を使ってクラウドプラットフォームに対してリクエストを送り、クラウド製品の情報をMackerel のメトリックとしてお客様のOrganizationに投稿するものです。
クラウドインテグレーションにより Mackerel 上に投稿されるグラフのメトリック名は、Mackerel により自動で生成されます。 このメトリック名を生成、投稿する際の処理で Mackerel のシステムに以下のような不具合があったため、請求ホスト台数の根拠となるメトリック数が実際の利用より多くカウントされていました。
異なるメトリックを同一のメトリック名で投稿してしまうケース
この場合、表示されるメトリックは1つのみが採用されます。ただし、内部的には同一名称のメトリックが複数回投稿されているため、請求ホスト台数の根拠となるメトリック数としては複数カウントされていました。 クラウド製品の仕様やお客様のご利用状況により、異なるメトリックが同一メトリック名で投稿される可能性があることが開発段階で考慮しきれていなかったため、Mackerel のシステムがこのような事象に対処できる仕様となっておりませんでした。
同一メトリックを多重投稿してしまうケース
Mackerel のシステムがクラウド製品から取得するメトリックの数え上げ処理に不具合があり、同一のメトリックを複数回重複して取得してしまう事象が発生していました。この場合も、表示では重複は省かれますが、請求ホスト台数の根拠となるメトリック数には重複分も含まれてカウントされていました。
クラウド製品ごとの発生条件
- AWSインテグレーション - WAF
- 以下のいずれかの場合に
waf.web_acl_requests.#.*
の5メトリックを、ルール数分だけ多重に取得していた。- WAF v2 でマネージドでないルールグループを使用し、CloudWatch にメトリックが発生していた場合
- WAF Classic で, WebACL に同名のルールとルールグループを追加していた場合
- 以下のいずれかの場合に
- AWSインテグレーション - Redshift
- 以下のメトリックについて、AWS アカウント内に複数の Amazon Redshift クラスターが存在した場合、同一クラスターのメトリックを複数回取得してしまうことがあった。
custom.redshift.query_runtime_breakdown.*
custom.redshift.wlm_query_throughput.*
custom.redshift.wlm_query_duration.*
custom.redshift.wlm_queue_length.*
- 以下のメトリックについて、AWS アカウント内に複数の Amazon Redshift クラスターが存在した場合、同一クラスターのメトリックを複数回取得してしまうことがあった。
- AWSインテグレーション - Step Functions
- Lambda を Qualified ARN で指定した場合、以下の5つのメトリック名が重複し、複数回取得していた。
custom.states.lambda_functions.#.scheduled
custom.states.lambda_functions.#.started
custom.states.lambda_functions.#.timed_out
custom.states.lambda_functions.#.failed
custom.states.lambda_functions.#.succeeded
- Lambda を Qualified ARN で指定した場合、以下の5つのメトリック名が重複し、複数回取得していた。
- Google Cloud インテグレーション - App Engine
- App Engine アプリケーションのトラフィックが複数のゾーンやロケーションに分散された場合、zone や location ごとのメトリックを多重に同じ名前で取得していた。
- GAE Application
- Flexible Environment / Standard Environment 共通
appengine.http.server.dos_intercept.count
appengine.http.server.quota_denial.count
appengine.http.server.response_count.#.count
appengine.http.server.response_count.#.loading_count
appengine.http.server.response_latencies.#.mean
appengine.http.server.response_latencies.#.loading_mean
appengine.http.server.response_style.#.count
appengine.http.server.response_style.#.count_cached
appengine.memcache.#.centi_mcu_count.count
appengine.memcache.#.operation.count
appengine.memcache.#.bytes.received.*
appengine.memcache.#.bytes.sent.*
- Flexible Environment
appengine.flex.connections.current.count
appengine.flex.cpu.reserved_cores.count
appengine.flex.cpu.utilization.utilization
appengine.flex.disk.bytes.read
appengine.flex.disk.bytes.write
appengine.flex.network.bytes.received
appengine.flex.network.bytes.sent
- Standard Environment
appengine.system.cpu.usage.*
appengine.system.memory.usage
appengine.system.network.bytes.received
appengine.system.network.bytes.received_cached
appengine.system.network.bytes.sent
appengine.system.network.bytes.sent_cached
- Flexible Environment / Standard Environment 共通
- GAE Instance
- Flexible Environment
appengine.flex.instance.#.connections.current
appengine.flex.instance.#.cpu.utilization.utilization
appengine.flex.instance.#.network.bytes.received
appengine.flex.instance.#.network.bytes.sent
- Flexible Environment
- GAE Application
- App Engine アプリケーションのトラフィックが複数のゾーンやロケーションに分散された場合、zone や location ごとのメトリックを多重に同じ名前で取得していた。
- Google Cloud インテグレーション - Compute Engine
- インスタンスがL3ロードバランサ配下にあり、ロードバランサ経由のトラフィックとそうでないトラフィックが存在した場合に、以下のメトリックを重複して取得していた。
gce.instance.network.received
gce.instance.network.sent
gce.instance.network_packets.received
gce.instance.network_packets.sent
- インスタンスがL3ロードバランサ配下にあり、ロードバランサ経由のトラフィックとそうでないトラフィックが存在した場合に、以下のメトリックを重複して取得していた。
対応と再発防止策について
2022年4月11日までに、Mackerel のシステムがクラウド製品に対して問い合わせを行い、同一のメトリック名で複数個取得した場合も、Mackerel 側でのメトリックの投稿回数を一度のみ行う対応を行いました。これによりプラン上限超過時のホスト台数換算において、Webコンソールに見えているメトリック数以上のメトリック数が使われることはありません。
再発防止策として、メトリック新規追加時の検証項目として明示すること、及びメトリック名が重複が発生した場合に発見できるよう監視を入れること、の2点を実施します。
また、異なるメトリックの名前が重複してしまった場合に、1つのメトリックのみしか表示されない不具合は引き続き発生しております。こちらはクラウド製品ごとに今後順次対応を検討してまいります。ご不便をおかけして申し訳ありません。
利用料金の返金について
今回の不具合により過剰に請求が発生した可能性のある利用料金を返金させていただきます。オーガニゼーションのオーナー様にメールでご連絡させていただきますので、確認をお願いいたします。個別にご連絡差し上げていないお客様には影響はございません。
返金対象となるホスト台数は、以下の方法で算出しております。
- 該当する期間・クラウド製品のインテグレーションを利用しており、メトリック数のプラン上限超過によるホスト換算が発生したホストについて
- メトリック数のプラン上限超過によるホスト換算による課金額全てを対象に算出
お客様の設定状況に依存してメトリック名や数が変動するものもあり、本不具合による影響を正しく観測することができない箇所もあります。そのため、本不具合の影響であるかに関わらず、メトリック数が実際の利用より多くカウントされた可能性のある全てのホストについて該当期間メトリック超過により追加されたホスト台数に相当する金額全てを返金させていただきます。
本件、ご迷惑をおかけして申し訳ありません。今後はさらなるサービス品質向上に努めてまいりますので、引き続きMackerelをご愛顧くださりますよう宜しくお願い申し上げます。