일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JS
- MSSQL
- Linux
- ssh
- 영어
- logstash
- build
- sample
- JavaScript
- Python
- MySQL
- docker
- error
- Windows
- unity
- API
- Kibana
- Ai
- AWS
- ChatGPT
- s3
- elasticsearch
- 구글
- 유니티
- mariadb
- nodejs
- 설정
- Es
- 엘라스틱서치
- Today
- Total
가끔 보자, 하늘.
logstash 인덱스 수정, 조건 설정하는 방법 본문
'logstash-' 날짜 형태로 인덱스를 자동 생성하는데, 여러 타이틀 혹은 용도 별로 분리하려면 수정이 필수적임.
만약 새롭게 생성하는 상황이라면, 원하는 곳에 pipelines에 적용할 config 파일을 하나 만들자.
( https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html 참고)
만약 이미 만들어 두었다면 config/pipelines.yml을 열어 pipeline.id의 path.config를 확인해보자.
이제 기본적인 pipeline config를 구성했다면 원하는 조건과 이름을 활용해 인덱스를 수정해보자.
만약 logstash에서 elasticsearch로 바로 보낸다면 output 부분이 아래와 같을 것이다.
output { elasticsearch { hosts => ["IP Address:port"] } }
hosts아래에 인덱스 이름 조건을 아래와 같이 삽입하면 elasticsearch에서 인덱스 명이 수정된 것을 확인할 수 있다.
output { elasticsearch { hosts => ["IP Address:port"]
index => 'test-%{+YYYY.MM.dd}' } }
만약 다중 pipelines을 사용한다면 input의 type별로 인덱스를 다르게 할 수 있다.
input {
redis {
.
.
type => "game_name"
}
.
.
}
.
.
output {
if[type]=="game_name"{ elasticsearch { hosts => ["IP Address:port"]
index => 'test-%{+YYYY.MM.dd}' }
}
.
.
}
* 조건은 아래와 같이 다중으로 처리 할 수 있다.
if[type]=="game_name" and [playtime]>0{
보다 상세한 내용은 https://www.elastic.co/guide/en/logstash/current/configuration.html 문서에서 찾을 수 있다.
------------------------------------------------------------------------------------------------------------------------------
커스텀 인덱스 사용에 대한 주의 사항이 있어 내용을 추가한다.
유저 ip로 유저들의 위치 등을 찾아 낼 수 있는 플러그인을 기본적으로 제공하는데 한 가지 제약이 있다.
그래서 Visualize/Map으로 가면 아래와 같은 에러를 볼 수 있다.
원인은 logstash-로 시작되는 인덱스가 아닌 경우 geoip 를 제대로 처리하지 않기 때문이다. (https://www.elastic.co/blog/geoip-in-the-elastic-stack 참고)
elasticsearch로 output 하는 기본 Template 파일을 보면 "template":"logstash-*"로 시작되는걸 볼 수 있다.
이를 해결하기 위한 방법은 두 가지가 있는데, 첫 번째는 별도의 template 파일을 만들어서 적용하는 것이다.
elasticsearch {
manage_template => true
template => "/etc/logstash/templates/custom_template.json"
}
(https://stackoverflow.com/questions/29344547/kibana4-geo-map-error-not-showing-the-client-ip-field 참고)
하지만 이는 커스텀 인덱스 별로 모두 별도로 만들어야 하는 문제가 있다. 이를 해결하기 위한 두 번째 방법을 권고하는데, 그 방법은 커스텀 인덱스 이름 앞에 "logstash-"를 붙이는 방법이다. 개인적으로도 이 방법을 추천한다.
index => 'logstash-test-%{+YYYY.MM.dd}'
잘 처리되면 아래와 같은 결과를 볼 수 있다.
이런 pipeline을 여럿 실행할 경우 아래와 같이 별도 실행할 수 있다.
bin/logstash --pipeline.id path_to_data_folder -f config/your_pipeline_file.config &
이상. 또 다른 이슈 안생기길...
'개발 이야기 > 인프라 구축 및 운영' 카테고리의 다른 글
Elasticsearch cluster 설정 (1) | 2018.07.25 |
---|---|
logstash와 mysql 연동 (54) | 2018.07.24 |
Kibana systemd 에 등록하기 (3) | 2018.07.11 |
Elasticsearch 설치기 (52) | 2018.07.06 |
EC2 - Server refused our key 에러 해결 방법 (0) | 2018.06.26 |