Redisをグラフィカルに確認できるRedisInsightでElastiCache Redisのメモリ分析してみた

2020.09.07

こんにちはコカコーラ大好きカジです。

今日は、Redisの状況をグラフィカルに確認できるRedisInsightをEC2にインストールして、ElasitCache Redisを分析してみました。

前提条件

以下を構築済みであることとします。

  • VPC
  • ElastiCache

構成図

オンラインとオフライン2つの手法で分析できます。

RedisInsight構築手順

RedisInsight用のEC2 IAM Role作成

RedisInsight-EC2Roleという名前で作成し、以下の2つのマネージドルールをアタッチします

  • AmazonS3ReadOnlyAccess
  • AmazonElastiCacheReadOnlyAccess

EC2インスタンスを起動

ElastiCacheと同一VPCのインターネットアクセス可能なサブネットにEC2インスタンスを作成します。 詳細な構築方法は省略しますが、以下の設定で構築しています。

項目
AMI Amazon Linux 2 AMI (HVM), SSD Volume Type ami-0053d11f74e9e7f52
インスタンスタイプ t3.medium
ディスク 100GB
EC2 Role 上記で構築したもの

セキュリティグループはインバウンドで必要な「My IP」、ポートはをTCP 8001とSSH(TCP 22)を許可します。 また、ElastiCacheのセキュリティグループを修正し、RedisInsight用のEC2のセキュリティグループIDからElastiCacheへインバウンドのアクセスを許可します。

EC2(RedisInsight)で権限と接続確認

EC2 IAM Role確認

SSHでEC2にログインし、RedisInsight用のEC2 IAM Roleが設定できているか確認します。

[ec2-user@ip-10-1-12-165 ~]$ aws s3 ls
S3バケットの一覧が表示されることを確認

ElastiCacheとの接続確認

nc (netcat コマンド)をインストール

$ sudo yum install nc

ElastiCacheへ接続テスト

「echo info | nc "redis host" 6379」で接続

$ echo info | nc test.xxxxxx.0001.apne1.cache.amazonaws.com 6379
$3374
# Server
redis_version:5.0.6
redis_git_sha1:0
redis_git_dirty:0
redis_build_id:0
redis_mode:standalone
os:Amazon ElastiCache
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:0.0.0
process_id:1
(省略)

(私個人用のメモ) ElastiCacheにテストデータを入れたい場合

redis-cli経由で、DEBUG POPULATEコマンドでテストデータを入れたかったのですが、ElastiCacheはDEBUGコマンドが許可されていません。そのため、redis-benchmarkコマンドを利用しました。

$ sudo amazon-linux-extras install redis4.0
$ sudo yum install redis
# redis接続確認
$ redis-cli -h <redis host>
> exit
# テストデータ投入コマンド
$ redis-benchmark -h <redis host> -t set -r 100000 -n 1000000

RedisInsightのインストール

sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user

一度SSHログアウトして再度ログインし、新しいDockerグループの権限を取得します。 確認するには、「docker ps」を実行します。sudoを実行しなくても出力が表示されるはずです。

[ec2-user@ip-10-1-12-165 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

最後に、ここでRedisInsightをインストールします。

docker run -v redisinsight:/db -p 8001:8001 redislabs/redisinsight:latest

このコマンドは、RedisInsight Dockerイメージをダウンロードして実行し、ポート8001でWebページとして公開します。 EC2インスタンスのPublic IPアドレスを確認して、ブラウザーを起動しアクセスします。

http://<EC2 IP Address>:8001

RedisInsightの[データベース]ページが表示されます。 EULAに同意し、RedisInsightの使用を開始します。

ElastiCacheと接続

ADD REDIS DATABASEをクリックし、Add Databaseをクリックします。

名前と、ElastiCacheのエンドポイント、ポート番号を入力し、ADD REDIS DATABASEをクリックします。 注意:「Automatically Discover Databases」で検索でヒットするものの接続できませんでした。

早速、test(登録したElastiCache)をクリックすると、リアルタイムにコネクションや、メモリ利用率、キーの数が表示されます。

メモリ分析

やっと、分析できるところまできました。

オンライン分析を実行すると、redisの速度が低下する場合があります。続行しますか?でANALYZEを押します。

しばらく待つとMemory OverViewに以下のグラフが出ます。 - データの種類ごとのメモリ分割 - データ型別のキーの数 - 時間の経過とともに解放される可能性が高いメモリ

また、以下の情報がみれます。

Keyspace Summary キースペースの概要が表示されます。

Recommenations(推奨事項)

Memory Analyzer keyのメモリサイズ順に並び替えたり、Filterで検索が行えます。

S3バックアップファイルからのメモリ分析

オフライン分析を実行すると、S3のElastiCacheのスナップショットファイルや、Redisのdumpファイル出力(rdbバックアップファイル)からメモリ分析ができます。

ElastiCache RedisのS3へのスナップショット出力方法は以下のブログとなります。

まず、取得するS3のElastiCacheのスナップショットファイルのオブジェクトURLをコピーします。

Analyze Againクリックし、Offline Analyasisをクリックします。

S3のオブジェクトファイルURLをコピーアンドペーストし、PROCEEDをクリックしてしばらく待ちます。

同じ分析結果が参照できます。

また、手元のRedis 5.0.9で作成したrdbバックアップファイルからも分析できることを確認しました。

オフラインでも確認できるのが便利だと思います。どなたかのお役に立てれば光栄です。

参考元

Installing RedisInsight on AWS EC2 | Redis Labs Documentation Center

How fast is Redis? – Redis

FAQs | Redis Labs Documentation Center