とあるプロダーツプレイヤーの徒然日記

とあるプロダーツプレイヤーが徒然なるままによしなし事をそこはかとなく書きつくろいます

ElastiCacheのメトリックスと監視について(FreeableMemoryとBytesUsedForCache)

概要

先日、ElastiCacheのふと監視をしていたらFreeableMemoryが急激に0に近づいていたので、 うわっ!!!!やばい!!となり、慌ててスケールアップをしようかとなりました。

やばい!となりましたが、そもそもFreeableMemoryってなんだっけ? と疑問になり、BytesUsedForCacheのメトリクスとどういう関係にあるの?

ってか、「監視って何を見ればいいの?」という話です。

AWSのカスタマーサポートへのお問い合わせ結果

FreeableMemory

Freeable Memory につきましては、稼働しているノードにおける空きメモリ状況となります。ノードで稼働しております OS やその他のプロセスによって確保されているメモリが含まれております。OS ではメモリ上にディスクキャッシュなどを可能な限り保持し、他で必要になった際に随時解放する挙動となります。多くの OS ではメモリ上にディスクキャッシュなどを可能な限り保持し、他で必要になった際に随時解放する挙動となりますので、大きな SwapUsage が記録されない限りは問題にはなりません。また、FreeableMemory メトリクス自体はノード単位のメトリクスとなるため、Redis が利用可能なメモリ量としては正確ではありません。

■ ホストレベルのメトリックス:FreeableMemory  https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/CacheMetrics.HostLevel.html

なるほど!FreeableMemory0に近づいたからといって、Redisの書き込みができなくなるわけじゃないのか!

BytesUsedForCache

BytesUsedForCache につきましては、Redis によって割り当てられた総バイト数となりますため、Redis として現在確保しているメモリ量となります。そのため、Redis が利用可能なメモリ量としましては、MaxMemory の値から BytesUsedForCache を引いた値にてご確認頂けますでしょうか。

■ Redis のメトリックス:BytesUsedForCache

https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/CacheMetrics.Redis.html

■ Redis 固有のパラメータ:maxmemory  http://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/ParameterGroups.Redis.html#ParameterGroups.Redis.NodeSpecific

直接の残量はみれないが、契約サーバーのMaxMemoryからBytesUsedForCacheの値を引いたものが残量としてわかる という話でした。

※「そのメトリックスが欲しい」というのは一旦置いとくことにしましょう

結論

  • FreeableMemoryは「稼働しているノードにおける空きメモリ状況」であり、キャッシュサーバーの残容量ではない
  • BytesUsedForCacheはRedisが利用可能なメモリ量であり、残量はMaxMemoryの値からBytesUsedForCache を引いた値
  • SwapUsageやBytesUsedForCacheを監視し、負荷状況によってクラスタのスケールアップをすればいい

とのことでした。 ありがとうございました、サポートセンターの中島さん。