티스토리 뷰

728x90
반응형

오픈소스 계열의 소프트웨어들의 특징은 바로 모니터링 환경을 별도로 제공하지 않는 다는 점이다. 대부분 기능적인 측면에 국한되어 있고, 운영 관점에서 여러 기능들을 구현하여 판매하는 것이 오픈소스 소프트웨어들의 특징이다. 대표적으로 ElasticSearch, Kafka, Netflix Zuul 등이 있으며, 다양한 분야에서 오픈소스를 상용화한 제품들이 등장하고 있다.

지금부터 살펴볼 Redis 역시 대표적인 오픈소스이며, Redis Labs에서 만든 Redisinsight에 대해 알아보도록 하자.


Redisinsight

Redisinsight는 바이너리 형태로 구축하거나, 도커이미지로 손쉽게 기동할 수 있다. 아래는 도커이미지를 활용하여 Redisinsight를 기동하는 과정이다.

1) docker image 기동

[root@ip-192-168-71-110 ~]# sudo yum install -y docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:20.10.4-1.amzn2 will be installed
--> Processing Dependency: runc >= 1.0.0 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: libcgroup >= 0.40.rc1-5.15 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: containerd >= 1.3.2 for package: docker-20.10.4-1.amzn2.x86_64
--> Processing Dependency: pigz for package: docker-20.10.4-1.amzn2.x86_64
--> Running transaction check
---> Package containerd.x86_64 0:1.4.4-1.amzn2 will be installed
---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed
---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed
---> Package runc.x86_64 0:1.0.0-0.3.20210225.git12644e6.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================================================
 Package                                           Arch                                          Version                                                                     Repository                                                Size
============================================================================================================================================================================================================================================
Installing:
 docker                                            x86_64                                        20.10.4-1.amzn2                                                             amzn2extra-docker                                         32 M
Installing for dependencies:
 containerd                                        x86_64                                        1.4.4-1.amzn2                                                               amzn2extra-docker                                         24 M
 libcgroup                                         x86_64                                        0.41-21.amzn2                                                               amzn2-core                                                66 k
 pigz                                              x86_64                                        2.3.4-1.amzn2.0.1                                                           amzn2-core                                                81 k
 runc                                              x86_64                                        1.0.0-0.3.20210225.git12644e6.amzn2                                         amzn2extra-docker                                        3.2 M

Transaction Summary
============================================================================================================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 59 M
Installed size: 243 M
Downloading packages:
(1/5): libcgroup-0.41-21.amzn2.x86_64.rpm                                                                                                                                                                            |  66 kB  00:00:00     
(2/5): pigz-2.3.4-1.amzn2.0.1.x86_64.rpm                                                                                                                                                                             |  81 kB  00:00:00     
(3/5): containerd-1.4.4-1.amzn2.x86_64.rpm                                                                                                                                                                           |  24 MB  00:00:01     
(4/5): docker-20.10.4-1.amzn2.x86_64.rpm                                                                                                                                                                             |  32 MB  00:00:01     
(5/5): runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64.rpm                                                                                                                                                           | 3.2 MB  00:00:00     
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                        47 MB/s |  59 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64                                                                                                                                                                          1/5 
  Installing : containerd-1.4.4-1.amzn2.x86_64                                                                                                                                                                                          2/5 
  Installing : libcgroup-0.41-21.amzn2.x86_64                                                                                                                                                                                           3/5 
  Installing : pigz-2.3.4-1.amzn2.0.1.x86_64                                                                                                                                                                                            4/5 
  Installing : docker-20.10.4-1.amzn2.x86_64                                                                                                                                                                                            5/5 
  Verifying  : containerd-1.4.4-1.amzn2.x86_64                                                                                                                                                                                          1/5 
  Verifying  : docker-20.10.4-1.amzn2.x86_64                                                                                                                                                                                            2/5 
  Verifying  : pigz-2.3.4-1.amzn2.0.1.x86_64                                                                                                                                                                                            3/5 
  Verifying  : runc-1.0.0-0.3.20210225.git12644e6.amzn2.x86_64                                                                                                                                                                          4/5 
  Verifying  : libcgroup-0.41-21.amzn2.x86_64                                                                                                                                                                                           5/5 

Installed:
  docker.x86_64 0:20.10.4-1.amzn2                                                                                                                                                                                                           

Dependency Installed:
  containerd.x86_64 0:1.4.4-1.amzn2                      libcgroup.x86_64 0:0.41-21.amzn2                      pigz.x86_64 0:2.3.4-1.amzn2.0.1                      runc.x86_64 0:1.0.0-0.3.20210225.git12644e6.amzn2                     

Complete!
[root@ip-192-168-71-110 ~]# sudo service docker start
Redirecting to /bin/systemctl start docker.service
[root@ip-192-168-71-110 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@ip-192-168-71-110 ~]# docker run -v redisinsight:/db -p 8001:8001 redislabs/redisinsight
Unable to find image 'redislabs/redisinsight:latest' locally
latest: Pulling from redislabs/redisinsight
bd8f6a7501cc: Pull complete 
44718e6d535d: Pull complete 
efe9738af0cb: Pull complete 
f37aabde37b8: Pull complete 
3923d444ed05: Pull complete 
a389cd00f6ac: Pull complete 
635fef62bb79: Pull complete 
d620e4e17484: Pull complete 
e2ee94785e13: Pull complete 
48b3e278075c: Pull complete 
100ed91c31ae: Pull complete 
55c329231ae6: Pull complete 
96d8432c61ad: Pull complete 
1ed83d76beb2: Pull complete 
b9f7ffeff2f8: Pull complete 
Digest: sha256:fd4bff16761308521952e802e1ac1fcafb0d78088c508cf3762754aa954c7009
Status: Downloaded newer image for redislabs/redisinsight:latest

 

(Docker Install > Docker Run > Redisinsight Download & Run)

2) Redisinsight dashboard (http://ip:8001)

> Redisinsight는 기본 8001 포트 사용

> EULA AND PRIVACY SETTINGS 동의

3) Redis 연결

> I already have a database 선택

> Connect to Redis Database 선택

> Redis ip/port/name 입력 후 ADD (필요 시 ID/PASSWORD 입력)

4) Redisinsight 기능

> OVERWIEW (Redis 통합 모니터링)

> 주요 지표 : Key, Memory, Network 등

> Key 정보 확인 (타입, 사이즈 등)

> CLI 지원

> SINGLE NODE, ALL NODES, ALL MASTERS, ALL REPLICAS 대상 지정 후 명령어 수행

> 명령어 메뉴얼 기능 제공

> 설정 동적 반영 지원

> Cluster Management

> Rebalance Cluster / Manual ReSharding

> Visualize Filter / Showing

> Client List

그 밖에 RedisStreams, RedisGraph, RedisGears, RedisTimeSeries, RedisSearch 등을 통합 관리할 수 있다.


RMA (Redis Memory Analyzer)

Redis 메모리 분석기 (RMA)는 Redis에서 사용할 수 있는 가장 포괄적인 메모리 분석기 중 하나이다. 세 가지 수준의 세부 정보를 지원합니다.

  • global - 메모리 사용량 정보
  • scanner - key type 기반 메모리 사용량 정보
  • ram - key type 별 메모리 사용량 정보

1) 설치

[root@ip-192-168-71-110 ~]# pip3 install rma
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting rma
  Downloading rma-0.2.1-py3-none-any.whl (29 kB)
Collecting redis
  Downloading redis-3.5.3-py2.py3-none-any.whl (72 kB)
     |--------------------------------------------------------------| 72 kB 691 kB/s 
Collecting msgpack-python
  Downloading msgpack-python-0.5.6.tar.gz (138 kB)
     |--------------------------------------------------------------| 138 kB 8.8 MB/s 
Collecting tqdm
  Downloading tqdm-4.61.1-py2.py3-none-any.whl (75 kB)
     |--------------------------------------------------------------| 75 kB 4.9 MB/s 
Collecting tabulate
  Downloading tabulate-0.8.9-py3-none-any.whl (25 kB)
Using legacy 'setup.py install' for msgpack-python, since package 'wheel' is not installed.
Installing collected packages: redis, msgpack-python, tqdm, tabulate, rma
    Running setup.py install for msgpack-python ... done
Successfully installed msgpack-python-0.5.6 redis-3.5.3 rma-0.2.1 tabulate-0.8.9 tqdm-4.61.1
[root@ip-192-168-71-110 ~]#

2) RMA - global mode

[root@ip-192-168-71-110 ~]# rma -p 6379 -b global
Match *: 100%|-----------------------------------------| 1/1 [00:00<00:00, 1001.03it/s]

Aggregating keys by pattern and type

Apply rules

Nodes

| Stat                               | Value          |
|:-----------------------------------|:---------------|
| info used_memory                   | 1581128        |
| info used_memory_human             | 1.51M          |
| info used_memory_rss               | 4919296        |
| info used_memory_rss_human         | 4.69M          |
| info used_memory_peak              | 1662416        |
| info used_memory_peak_human        | 1.59M          |
| info used_memory_peak_perc         | 95.11%         |
| info used_memory_overhead          | 1539904        |
| info used_memory_startup           | 1455016        |
| info used_memory_dataset           | 41224          |
| info used_memory_dataset_perc      | 32.69%         |
| info allocator_allocated           | 1593680        |
| info allocator_active              | 1822720        |
| info allocator_resident            | 4313088        |
| info total_system_memory           | 1031057408     |
| info total_system_memory_human     | 983.29M        |
| info used_memory_lua               | 43008          |
| info used_memory_lua_human         | 42.00K         |
| info used_memory_scripts           | 488            |
| info used_memory_scripts_human     | 488B           |
| info number_of_cached_scripts      | 1              |
| info maxmemory                     | 0              |
| info maxmemory_human               | 0B             |
| info maxmemory_policy              | noeviction     |
| info allocator_frag_ratio          | 1.14           |
| info allocator_frag_bytes          | 229040         |
| info allocator_rss_ratio           | 2.37           |
| info allocator_rss_bytes           | 2490368        |
| info rss_overhead_ratio            | 1.14           |
| info rss_overhead_bytes            | 606208         |
| info mem_fragmentation_ratio       | 3.24           |
| info mem_fragmentation_bytes       | 3401536        |
| info mem_not_counted_for_evict     | 790            |
| info mem_replication_backlog       | 0              |
| info mem_clients_slaves            | 0              |
| info mem_clients_normal            | 83538          |
| info mem_aof_buffer                | 790            |
| info mem_allocator                 | jemalloc-5.1.0 |
| info active_defrag_running         | 0              |
| info lazyfree_pending_objects      | 0              |
| used proto-max-bulk-len            | 536870912      |
| used active-defrag-max-scan-fields | 1000           |
| used hash-max-ziplist-entries      | 512            |
| used hash-max-ziplist-value        | 64             |
| used list-max-ziplist-size         | -2             |
| used set-max-intset-entries        | 512            |
| used zset-max-ziplist-entries      | 128            |
| used zset-max-ziplist-value        | 64             |
| totalKeys                          | 1              |
| redisKeySpaceOverhead              | 96             |

Done in 0.02804775000004156 seconds[root@ip-192-168-71-110 ~]# 
[root@ip-192-168-71-110 ~]# 

글로벌 모드에서 RMA는 key count, 시스템 메모리, allocation 크기 등과 같은 통계를 제공한다.

3) RMA - scanner mode

[root@ip-192-168-71-110 ~]# rma -p 6379 -b scanner
Match *: 100%|--------------------------------| 1/1 [00:00<00:00, 1860.00it/s]

Aggregating keys by pattern and type

Apply rules

Keys by types

| name   |   count | type   | percent   |
|:-------|--------:|:-------|:----------|
| b      |       1 | string | 100.00%   |

Done in 0.014729796999745304 seconds
[root@ip-192-168-71-110 ~]#

스캐너 모드에서는 keyspace의 개요를 볼 수 있다. 항목의 유형 및 해당 네임 스페이스가 사용하는 메모리 비율과 함께 네임 스페이스를 제공한다. 이 정보로 기반으로 네임 스페이스 패턴과 결합된 "RAM"동작을 사용하여 자세한 분석을 수행하는 것이 유용하다.

4) RMA — RAM mode

root@ip-192-168-71-110 ~]# rma -p 6379 -b ram
Match *: 100%|----------------------| 1/1 [00:00<00:00, 2092.97it/s]

Aggregating keys by pattern and type

Apply rules
                                                                                                                                                                                                                                            
Keys statistic

Stat by <string>

| Match   |   Count |   Useful |   Free |   Real |   Ratio | Encoding        |   Min |   Max |   Avg |   TTL Min |   TTL Max |   TTL Avg |
|:--------|--------:|---------:|-------:|-------:|--------:|:----------------|------:|------:|------:|----------:|----------:|----------:|
| b       |       1 |        1 |      0 |     48 |   48.00 | embstr [100.0%] |     1 |     1 |     1 |        -1 |        -1 |     -1.00 |
| Total:  |       1 |        1 |      0 |     48 |    0.00 |                 |     0 |     0 |     0 |        -1 |        -1 |    nan    |

Done in 0.016523048999260936 seconds
[root@ip-192-168-71-110 ~]# 

RAM 모드에서는 대부분의 다른 메모리 분석기에서 제공하는 keyspace 수준 메모리 소비를 얻습니다. 사용된 메모리, 실제 데이터 크기, 오버 헤드, 인코딩, TTL 등의 자세한 정보를 얻을 수 있다.

RMA 장점 :

  • 실시간 작동
  • scan 명령을 사용하여 데이터베이스를 살펴보므로 성능 영향이 제한되고 분석이 매우 정확함
  • 문서화 되어 있고, 적용사례를 쉽게 찾을 수 있음
  • 특정 데이터 유형만 분석하거나 특정 패턴과 일치하는 키만 고려하는 등 사용자 지정 및 필터링 옵션 지원
  • 네임 스페이스, 키 또는 전역 값과 같은 다양한 수준에서 세부 정보 제공
  • 데이터 구조 오버 헤드 (즉, 목록 데이터 유형에 대한 포인터와 같은 내부 Redis 정보를 저장하는 데 사용되는 메모리 양)를 표시

RMA 단점 :

  • 데이터베이스를 스캔하는 것은 큰 데이터베이스의 경우 매우 느릴 수 있음. 성능 향상을 위해 특정 개수의 키가 반환되면 검색을 중지하는 옵션 적용 필요

결론

하나의 도구로 모든 요구 사항을 충족하지 못할 수도 있지만 Redisinsight / RMA 등을 조합하여 활용하면 Redis의 운영관점에서의 부족한 부분을 보완할 수 있을 것이다.

728x90
반응형