본문 바로가기

데이터베이스

(23)
Elastic APM을 이용한 Django 모니터링 연동 0. 들어가며 프로젝트에서 이벤트 로깅만 남기는 것이 아니라 시스템 로깅 (트랜잭션, CPU 부하 등등..)도 시각화할 수 있도록 APM을 도입을 권하기 위해 테스트용으로 연동이 잘되는지, 서버가 정상적으로 띄어지는지 확인하기 위해 구현하였다. 실제로 Elastic APM 보다 유료 APM이 더 인기 많고 많은 기업에서 사용하지만, Elastic Stack을 이미 사용하고 있다면 Elastic APM을 사용하는 것도 좋다. 먼저 알아둬야 할 것은... 도커를 이용해서 APM-Server를 띄울 것이다. APM 서버가 돌아가야 Kibana에서 APM을 사용할 수 있다. 그 다음엔 웹 어플리케이션(python, java ...)에서 APM-Server을 연동할 수 있도록 APM-Agent 설정을 해줘야 한다..
Elastic APM 1. APM APM은 Application Performance Monitoring의 약어로, Application에 대한 성능 정보 및 발생한 에러 정보 그리고 Application이 동작중인 서버의 기본적인 Metric 정보를 수집할 수 있는 기능을 지원한다. 또한, MicroService 환경에서 서비스를 구성하는 여러 Application 간의 Request를 하나의 Trace로 묶어서 추적할 수 있는 분산 Tracing(distribute tracing)에 대한 기능도 지원한다. APM은 위와 같이 수집된 여러 데이터를 바탕으로 하여 Application에 지연이 발생하였을때, 지연에 대한 병목 구간을 찾아 낼 수 있는 모니터링 서비스 이다. 2. APM 시스템 아키텍처 Elastic APM은 ..
[Redis] Python(Django)에서 Redis Sorted Set을 이용한 랭킹 구축 0. 들어가며 Django로 메가 쇼핑몰을 개발하는 도중에 Redis의 String과 Set 자료구조를 사용해야할 필요가 있어서 레디스에 대해 공부하는 도중, 상품 데이터의 평점을 기반으로 Top 랭킹 데이터를 구축하면 좋겠다는 생각이 들어서 공부하게 되었다. 레디스의 String 자료구조와 RDB의 데이터만 이용해서 상품 랭킹 데이터를 개발할 수 있지만, 코드가 복잡해질 수 있다는 생각이 들었다. 그래서 레디스의 기능을 좀 더 활용하고자 하는 목표를 가지고 있기 때문에 최대한 활용해보려고 Sorted Set 자료구조로 랭킹을 구축해볼 것이다. 1. Data Set Django는 RDB와 연동을 해서 Migration으로 RDB와 직접적인 데이터 소통을 할 수 있다. 쉽게 말하면 migration 파일만..
[ElasticSearch] ILM 기능으로 인덱스 주기 관리 이번에는 며칠동안 삽질했던 ILM 정책을 수립하는 과정에 대해서 기록하려고 한다. 환경은 3개의 클라우드 서버 환경에서 각 1개의 노드를 설정하였다. 또한, 노드의 옵션을 hot, warm, cold로 두어서 로그를 효율적으로 관리하려고 한다. 물론 master로 설정된 노드는 키바나가 설치되어 있어야 한다. (로그스태시는 자유) 마스터 노드가 있는 서버에서 키바나 Dev Tools로 접속을 한다. # 모든 인덱스 조회 GET _cat/indices?v # 모든 노드 조회 GET _cat/nodes?v # 각 노드의 Roles 조회 GET _cat/nodeattrs?v&s=name GET _nodes?filter_path=nodes.*.name,nodes.*.roles 위의 명령어를 통해서 각 인덱스와 ..
[ElasticSearch] node 종류와 옵션 ILM 정책을 수립을 하는 도중에 hot-warm-cold 세 개로 노드를 나누어서 multi-tier 노드 아키텍처를 설정하려고 한다. 그러기 위해서는 노드의 종류와 각 노드들의 옵션이 무엇인지 알아야 하기 때문에 글을 정리하려고 한다. ElasticSearch 노드 종류 (1) Master 노드 node.master를 true로 지정하며 클러스터의 컨트롤을 통해 마스터 노드로 선택될 자격을 가지게 된다. 마스터 노드는 클러스터에서 인덱스를 만들고 지우는 행위, 클러스터에서 노드들을 트래킹하고 각각의 노드를 샤드를 할당할건지 결정한다. 데이터를 인덱싱하고 찾고 하는 작업은 CPU, Memory, I/O 자원을 많이 사용하기 때문에 큰 규모에서는 data node와 master node를 구별한다. (2..
[Elasticsearch] (error) vm.max_map_count 값 변경하기 3개의 노드를 하나의 클러스터로 연동하면서 수 많은 에러를 발견하였다. 그 중에 하나가 vm.max_map_count에 대한 에러이다. 본인이 구글링과 함께 실제로 해본 내용을 바탕으로 글을 작성할 것이다. 1. 에러 elasticsearch | ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. elasticsearch | bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at..
[Elasticsearch] 다른 서버에서 클러스터 구성 (노드 연동) with. docker-compose 요구사항에서 3개의 서버의 엘라스틱서치 서버를 구동하고 각 엘라스틱서치 서버에는 싱글 노드로 운영되고 있다. 3개의 서버 엘라스틱서치의 각 노드들을 하나의 클러스터로 묶어서 수명 주기 정책을 적용하려고 한다. 그러기 위해서는 먼저 각각의 싱글노드 3개를 하나의 클러스터로 연동시켜야 하는데, 여러 에러를 많이 만났다. 이러한 에러를 사전에 방지하고 실수를 회고하고자 글을 쓰려고 한다. 먼저, 본인은 3개의 엘라스틱서치 서버를 열어야 하지만 연동 테스트하기 위해서 먼저 두 개의 서버를 먼저 연동시키려고 한다. 클라우드 환경은 GCP를 이용하였고, 서비스 출시를 목표로 하는 것이기 때문에 docker-compose를 이용하였다. 여러 서버에서 하나의 클러스터로 실행하기 위해서는 엘라스틱서치 포트에 대해서 이해..
[ElasticSearch] 엘라스틱서치의 내부 구조 및 cluster, index, replica, shard 프로젝트를 진행하면서 노드를 수명 주기 관리로서 해결해야할 요구사항이 생겼기에 엘라스틱 서치의 내부 구조와 용어에 대한 이해가 필요하다고 절실히 느꼈다. 어떤 좋은 티스토리에서 어떠한 문장을 봤는데 'ES 성능은 shard 개수보다 replica 개수에 영향을 준다'라는 문장이었다. 본인은 아직 shard와 replica에 대한 개념이 잡히지 않아서 왜 그런지, 내부는 어떻기에 이런지에 대한 의문이 생겨 공부하기로 했다. 1. 내부 구조 먼저 ES의 내부 구조를 살펴보면.. 엘라스틱서치는 여러 개의 클러스터로 구성될 수 있다. 위의 구조처럼 하나의 클러스터를 가정을 둘 때, 하나의 클러스터에는 여러 개의 노드들이 묶여져 있는 구조를 볼 수 있다. (물론 하나의 노드도 가능) 그리고 각 노드에 데이터를 저..