이전글: 2018/01/10 - [IT/ELK] - Logstash 복수개의 instance 구동하기



최근에 데이터 수집 및 조회를 위해 Elasticsearch, Logstash를 많이 사용합니다.


간단한 설정으로 꽤 효율적인 운영이 가능해서 많이 사용하는 것 같습니다.


가급적이면 각각 다른 장비에 설치해서 사용하면 좋겠지만


여러 이유 때문에(개발 및 테스트 용도, 서버 자원 한계 등) Logstash와 Elasticsearch를 한 서버에 설치해 사용하는 경우도 있습니다.


한 서버에서 Logstash instance 네개와 Elasticsearch를 사용하고 있었는데 최근에 CPU Load average가 굉장히 높이 뛰면서


Elasticsearch가 down되는 현상이 있어서 이슈 공유합니다.


처음에는 Elasticsearch가 down되어서 Elasticsearch의 문제인가 싶어서 여러 설정을 찾아보았지만


근원적인 문제는 Logstash에 있었습니다.


Logstash 설정 파일인 logstash.yml 파일을 보면 아래와 같은 부분이 있습니다.



주석을 잘 읽어보면 pipeline worker의 default 개수가 CPU 코어 개수만큼으로 설정된다고 나와있습니다.


가뜩이나 logstash를 한 장비에서 여러 instance를 사용하면서 각 instance가 CPU 코어 개수 만큼 사용하고 있으니


병렬처리가 제대로 될 리가 없습니다.


pipeline.workers 설정을 장비의 CPU 개수를 참고해 적절히 제한하면서


CPU Load average가 급격히 올라갔던 이슈가 해결되었습니다.




'IT > ELK' 카테고리의 다른 글

ELK 스택에서 CPU 점유율이 높을때  (0) 2018.01.15
Logstash 여러개의 instance 구동하기  (0) 2018.01.10


Logstash 여러개의 instance 구동하기


- 한 서버에서 두개 이상의 Logstash instance를 구동할 필요가 있을 때 사용할 수 있는 방법입니다.
- Centos 7, Java 1.8 기준

1. ELK 공식 홈페이지에서 적당한 곳에 Logstash를 내려 받습니다.

  - 복수개의 instance를 구동하는게 목적이므로 버전은 크게 중요하지 않습니다만 여기서는 5.5.1 기준으로 설명합니다.


[seyou@localhost apps]$ pwd

/home/seyou/apps

[seyou@localhost apps]$ wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.1.tar.gz

[seyou@localhost apps]$ tar xfz ./logstash-5.5.1.tar.gz


2. 예시로 두개의 instance를 돌려볼 예정이므로 바이너리를 복제합니다.


[seyou@localhost apps]$ cp -R ./logstash-5.5.1 ./logstash-5.5.1-c2

[seyou@localhost apps]$ mv ./logstash-5.5.1 ./logstash-5.5.1-c1

[seyou@localhost apps]$ ls

logstash-5.5.1-c1  logstash-5.5.1-c2  logstash-5.5.1.tar.gz


3. 먼저 logstash-5.5.1-c1의 설정부터 변경합니다.

  - 포트, 로그 레벨, JVM 옵션 등 기본적인 설정 내용은 생략합니다.


[seyou@localhost apps]$ vim ./logstash-5.5.1-c1/config/logstash.yml


...

path.data: "/home/seyou/apps/logstash-5.5.1-c1/data"

path.log: "/home/seyou/apps/logstash-5.5.1-c1/log"

...


path.data

- logstash에서 사용할 data 디렉토리를 지정합니다.

path.log

- logstash에서 사용할 log 디렉토리를 지정합니다.


[seyou@localhost apps]$ vim ./logstash-5.5.1-c1/config/startup.options


...

LS_HOME=/home/seyou/apps/logstash-5.5.1-c1

LS_GC_LOG_FILE=/home/seyou/apps/logstash-5.5.1-c1/log

SERVICE_NAME="logstash-c1"

SERVICE_DESCRIPTION="logstash-c1"

...


LS_HOME

- logstash의 home 디렉토리

LS_GC_LOG_FILE

- logstash가 동작하면서 GC가 실행될때 남길 로그 디렉토리

SERVICE_NAME

- logstash 서비스 이름

- 한 장비에서 여러 instance 사용할때 구분할 이름

SERVICE_DESCRIPTION

- 서비스 설명


4. 3.의 과정을 복제한 logstash-5.5.2-c2 디렉토리에서 진행합니다.

- 각 디렉토리명은 logstash-5.5.2-c2에 맞게 변경

- SERVICE_NAME이 중복되지 않게 설정


5. 예제 conf 파일


[seyou@localhost apps]$ vim ./logstash-5.5.1-c1/config/test.conf


1
2
3
4
5
6
7
8
9
10
11
12
13
input {
 
  stdin { }
 
}
 
 
 
output {
 
  stdout { codec => rubydebug }
 
}
cs


[seyou@localhost apps]$ cp ./logstash-5.5.1-c1/config/test.conf ./logstash-5.5.1-c2/config/test.conf


6. Logstash 실행 및 테스트


[seyou@localhost logstash-5.5.1-c1]$ ./bin/logstash -f ./config/test.conf

다른 콘솔을 켜서

[seyou@localhost logstash-5.5.1-c2]$ ./bin/logstash -f ./config/test.conf








'IT > ELK' 카테고리의 다른 글

ELK 스택에서 CPU 점유율이 높을때  (0) 2018.01.15
Logstash 여러개의 instance 구동하기  (0) 2018.01.10

+ Recent posts

티스토리 툴바