Configures the number of batches to be sent asynchronously to Logstash while waiting for ACK from Logstash.
Output only becomes blocking once number of pipelining batches have been written.
Pipelining is disabled if a value of 0 is configured.
The default value is 2.
# 기본 설정 예시
$ vi filebeat.yml# 아래 설정에서 inode_marker 파일은 미리 생성이 되어 있어야 에러가 발생 하지 않습니다.
filebeat.inputs:
- type: filestream
id: fb-filestream
enabled: true
paths:
- $[PATH}/logs/*.log
file_identity.inode_marker.path: $[PATH}/logs/.filebeat-marker
encoding: utf-8
processors:
- decode_json_fields:
fields: [ "message" ]
target: "json"
output.elasticsearch:
hosts: ["localhost:9200"]
# 실행$ ./filebeat -c filebeat.yml -e
4. Logstash Setup
filebeat 연동 시 filebeat.yml 의 output 에 logstash 설정을 합니다.
# filebeat 설치 경로에 가서 수정 합니다.$ vi filebeat.yml
output.logstash:
hosts: ["localhost:5044"]
# 이제 logstash 와 filebeat 연동을 위한 설정을 합니다.$ vi config/logstash-sample.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
# 이제 logtash 와 filebeat 를 실행 해서 정상적으로 색인이 되었는지 확인 합니다.$ bin/logstash -f config/logstash-sample.conf
# pipeline.yml 을 사용하기 위해서는 아래 설정 후 실행 하면 됩니다.# 기본 설정이기 때문에 한번은 해야 합니다.$ vi config/logstash.yml
node.name: ${NODE-NAME}
path.data: ${PATH}/data/logstash
path.logs: ${PATH}/logs/logstash
config.reload.automatic: true
config.reload.interval: 60s
http.port: 9600
$ vi config/pipeline.yml
- pipeline.id: filebeat-log-pipeline
pipeline.workers: 4
pipeline.batch.size: 20
path.config: "${PATH}/config/logstash-sample.conf"
# 이제 실행 합니다.$ bin/logstash
Kibana Discover 에서 데이터 요청 시 _source 는 false 로 가져 오지 않습니다. 다만, View 형식을 Table 에서 JSON 으로 변경 시 _source:true 로 데이터를 가져 오게 됩니다. 그렇기 때문에 기본 fields 를 이용해서 문서의 field 를 가져 오게 됩니다.
elastic-stack-installer
각 stack 경로로 들어가서 실행 하면 됩니다.
기본 stack 의 start/stop 스크립트는 포함이 되어 있습니다.
$cd stack/elasticsearch/bin$ zsh installer
설치 할 운영체제를 선택 하세요.
0. MACOS
1. LINUX_X86_64
2. LINUX_AARCH64
0
선택한 운영 체계는 0 번 입니다.
설치 할 버전을 입력 하세요.
예) 7.15.1
7.15.1
입력한 버전은 7.15.1 입니다.
VPN 연결을 통해 배포가 이루어 지나요? (y/n)
설치 파일을 먼저 다운로드 받습니다. 이후 설치 스크립트를 재실행 하고 이 단계를 'N' 로 입력하고 스킵 합니다.
n
wget --read-timeout=5 --timeout=5 --no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.1-darwin-x86_64.tar.gz
--2021-10-19 18:31:24-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.1-darwin-x86_64.tar.gz
artifacts.elastic.co (artifacts.elastic.co) 해석 중... 34.120.127.130
다음으로 연결 중: artifacts.elastic.co (artifacts.elastic.co)|34.120.127.130|:443... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 338602042 (323M) [application/x-gzip]
저장 위치: `elasticsearch-7.15.1-darwin-x86_64.tar.gz'
elasticsearch-7.15.1-darwin-x86_64.tar.gz 100%[====================================================================================================>] 322.92M 2.93MB/s / 1m 57s
2021-10-19 18:33:21 (2.75 MB/s) - `elasticsearch-7.15.1-darwin-x86_64.tar.gz' 저장함 [338602042/338602042]
SSH 통신을 위한 KEY 가 필요 한가요? (y/n)
n
SSH 접속 User 를 입력 하세요.
예) deploy
henry
설치할 인스턴스의 IP 를 입력 하세요.
예)
127.0.0.1
localhost
인스턴스에 설치할 경로를 입력 하세요.
예)
/home/deploy/apps/
/Users/deploy/apps/
인스턴스에 설치 파일을 배포할 경로를 입력 하세요.
예)
/home/deploy/dist/elastic-stack/elasticsearch
/Users/deploy/dist/elastic-stack/elasticsearch
Symbolic link 를 사용하시면 입력 하시고 아니면 엔터를 입력 하세요.
elasticsearch
ssh -p 22 -o StrictHostKeychecking=no henry@localhost mkdir -p /Users/deploy/dist/elastic-stack/elasticsearch
ssh -p 22 -o StrictHostKeychecking=no henry@localhost mkdir -p /Users/deploy/apps/
scp -P 22 -o StrictHostKeychecking=no elasticsearch-7.15.1-darwin-x86_64.tar.gz henry@localhost:/Users/deploy/dist/elastic-stack/elasticsearch
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/dist/elastic-stack/elasticsearch; tar -xvzf elasticsearch-7.15.1-darwin-x86_64.tar.gz
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/dist/elastic-stack/elasticsearch; rm -f elasticsearch-7.15.1-darwin-x86_64.tar.gz
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/dist/elastic-stack/elasticsearch; mv elasticsearch-7.15.1 /Users/deploy/apps/
scp -P 22 -o StrictHostKeychecking=no start henry@localhost:/Users/deploy/apps//elasticsearch-7.15.1/bin/
scp -P 22 -o StrictHostKeychecking=no stop henry@localhost:/Users/deploy/apps//elasticsearch-7.15.1/bin/
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/apps//elasticsearch-7.15.1/bin; chmod 755 start
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/apps//elasticsearch-7.15.1/bin; chmod 755 stop
elasticsearch-7.15.1-darwin-x86_64.tar.gz 100% 323MB 237.0MB/s 00:01
x elasticsearch-7.15.1/
...중략...
start 100% 211 572.4KB/s 00:00
stop 100% 97 283.6KB/s 00:00
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/apps/; rm -f elasticsearch
ssh -p 22 -o StrictHostKeychecking=no henry@localhost cd /Users/deploy/apps/; ln -s elasticsearch-7.15.1 elasticsearch
다운로드 받은 파일을 삭제 합니다.
rm -f elasticsearch-7.15.1-darwin-x86_64.tar.gz
설치 가능한 Stack 은 Elasticsearch, Filebeat, Kibana, Logstash 입니다.
Elastic 사에서 다운로드 경로와 파일명에 대한 Name Rule 을 바꾸지만 않으면 잘 됩니다. :)
이 경우 elasticsearch 에서 동일하게 사용 하기 위한 ilm 과 template 설정을 하게 되면 동작이 잘 안되는 경우가 있는데요.
큰 차이는 is_write_index 설정 때문 입니다.
뭐 이것도 경우에 따라 다르게 나올 수 있지만 일반적이라면 저 설정 때문이다 생각 하시면 됩니다.
beats 에서는 libbeat 에서 자동으로 설정을 해줍니다.
// CreateAlias sends request to Elasticsearch for creating alias.func(h *ESClientHandler)CreateAlias(alias Alias)error {
// Escaping because of date pattern// This always assume it's a date pattern by sourrounding it by <...>
firstIndex := fmt.Sprintf("<%s-%s>", alias.Name, alias.Pattern)
firstIndex = url.PathEscape(firstIndex)
body := common.MapStr{
"aliases": common.MapStr{
alias.Name: common.MapStr{
"is_write_index": true,
},
},
}
// Note: actual aliases are accessible via the index
status, res, err := h.client.Request("PUT", "/"+firstIndex, "", nil, body)
if status == 400 {
// HasAlias fails if there is an index with the same name, that is// what we want to check here.
_, err := h.HasAlias(alias.Name)
if err != nil {
return err
}
return errOf(ErrAliasAlreadyExists)
} elseif err != nil {
return wrapErrf(err, ErrAliasCreateFailed, "failed to create alias: %s", res)
}
returnnil
}
하지만, elasticsearch 에서 수동으로 설정을 한다고 하면 꼭 "is_write_index:true" 설정을 해주셔야 alias 생성 및 등록이 잘 된다는거 알고 넘어 가자고요.