티스토리 뷰
오픈소스 계열의 소프트웨어들의 특징은 바로 모니터링 환경을 별도로 제공하지 않는 다는 점이다. 대부분 기능적인 측면에 국한되어 있고, 운영 관점에서 여러 기능들을 구현하여 판매하는 것이 오픈소스 소프트웨어들의 특징이다. 대표적으로 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의 운영관점에서의 부족한 부분을 보완할 수 있을 것이다.
'⑦ Open Source Software' 카테고리의 다른 글
OpenSource Heimdall 통합 대시보드 구성하기 (0) | 2021.08.21 |
---|---|
Netdata를 활용한 EKS Observability and Analysis (0) | 2021.08.11 |
Redis5 vs Memcached 선택기준 (0) | 2021.06.18 |
Redis5 설계하기 총정리 (0) | 2021.05.15 |
Redis5 Cluster 구성하기 (0) | 2021.05.05 |
- Total
- Today
- Yesterday
- nodejs
- 쿠버네티스
- jeus
- JEUS6
- k8s
- SA
- JEUS7
- SWA
- Architecture
- apache
- MSA
- TA
- 마이크로서비스
- openstack token issue
- aws
- API Gateway
- node.js
- kubernetes
- JBoss
- webtob
- openstack tenant
- 마이크로서비스 아키텍처
- git
- Docker
- 아키텍처
- 오픈스택
- aa
- Da
- OpenStack
- wildfly
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |