전체적인 구조는 위와 같고 각각의 IP와 환경은 다음과 같다.
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ yum install filebeat
$ vi /etc/filebeat/filebeat.yml
enable: true
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
output.logstash:
# The Logstash hosts
hosts: ["Logstash IP(10.0.7.158):5044"]
$ filebeat modules enable system
$ filebeat modules list
대상 서버
- Logstash
- 10.0.7.158
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
# cat >> /etc/yum.repos.d/logstash.repo <<EOF
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
$ yum install logstash
$ cd /etc/logstash
의 config폴더에 demo-metrics-pipeline.conf를 생성$ cat > /etc/logstash/config/demo-metrics-pipeline.conf <<EOF
input {
beats {
port => 5044
type => "spring"
}
}
filter {
if [type] == "spring" {
dissect {
mapping => {"message" => "[%{timestamp}][%{level}][%{method}] - %{message}"}
}
date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss" ]
target => "@timestamp"
timezone => "Asia/Seoul"
locale => "ko"
}
}
}
output {
if [type] == "spring" {
elasticsearch {
# hosts에 배열이 주어지면 hosts매개변수에 지정된 호스트 간에 요청을 로드 밸런싱한다.
hosts => [ "elasticsearch-data-node-1-ip(10.0.7.152):9200","elasticsearch-data-node-2-ip(10.0.7.49):9200" ]
index => "spring-%{+YYYY.MM.dd}"
}
}
}
EOF
Input: Beats Input Plugin
수집 대상: Spring 로그
수집 방식: Beats 프로토콜을 사용하는 포트 5044
로그 유형: "spring"
Filter: Dissect & Date Filter Plugin
로그 유형: "spring"
분석 대상: "message" 필드
분석 방식: "[%{timestamp}][%{level}][%{method}] - %{message}" 형식의 로그 메시지를 분해하여 추출
날짜/시간 추출: "timestamp" 필드에서 "yyyy-MM-dd HH:mm:ss" 형식의 날짜/시간 정보 추출하여 "@timestamp" 필드에 저장
Output: Elasticsearch Output Plugin
로그 유형: "spring"
저장 대상: Elasticsearch 클러스터의 "spring-YYYY.MM.dd" 인덱스
Elasticsearch 클러스터: "elasticsearch-data-node-1-ip"와 "elasticsearch-data-node-2-ip" 노드
Elasticsearch 호스트 포트: 9200
$ systemctl restart logstash
=> 오류 발생
위와 같은 오류가 발생했을때 아래 방법을 따라하면 됨 (참고)
Unit logstash.service could not be found.
이런 메시지가 뜰 것이다.
/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd
service logstash status
대상 서버
- Master Node
- 10.0.7.164
- 10.0.7.120
- 10.0.7.77
- Data Node
- 10.0.7.152
- 10.0.7.49
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ cat >> /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
EOF
$ yum install --enablerepo=elasticsearch elasticsearch
대상 서버
- Data Node
- 10.0.7.152
- 10.0.7.49
$ vi /etc/elasticsearch/elasticsearch.yml
cluster.name: gjgs
node.master: false
node.data: true
node.ingest: false
node.ml: false
node.name: data-1
bootstrap.memory_lock: true
network.host: [_site_]
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["10.0.7.164", "10.0.7.120","10.0.7.77"]
cluster.initial_master_nodes: ["10.0.7.164", "10.0.7.120","10.0.7.77"]
yml에 없는 설정들은 그냥 빈곳에 추가로 작성하면 됩니다.
# systemctl restart elasticsearch
# curl http://127.0.0.1:9200
아래와 같이 나오면 제대로 설치 된 것
대상 서버
- Master Node
- 10.0.7.164
- 10.0.7.120
- 10.0.7.77
$ vi /etc/elasticsearch/elasticsearch.yml
cluster.name: gjgs
node.master: true
node.data: false
node.ingest: false
node.ml: false
node.name: master-1
bootstrap.memory_lock: true
network.host: [_site_]
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["10.0.7.164", "10.0.7.120","10.0.7.77"]
cluster.initial_master_nodes: ["10.0.7.164", "10.0.7.120","10.0.7.77"]
# systemctl restart elasticsearch
# curl http://127.0.0.1:9200
아래와 같이 나오면 제대로 설치 된 것
힙 크기
엘라스틱서치를 설치하고 /etc/elasticsearch 위치에 보면 jvm.options 파일이 있다. 자바 가상 머신 관련 설정들이 포함되어 있다. 이 파일에서 눈여겨봐야할 부분은 힙 메모리 관련 설정으로 Xms, Xmx 라는 이름의 설정이다. Xms는 최소 힙 크기이며, Xmx는 최대 힙 크기이다. 힙 메모리 설정은 다음 세 가지 부분을 주의하며 설정한다.
임시 파일과 덤프 파일 경로 설정
$ sudo vi /etc/elasticsearch/jvm.options
## JVM temporary directory
-Djava.io.tmpdir=${ES_TMPDIR}
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/lib/elasticsearch
리눅스 시스템 수준에서 걸려있는 제한들을 해제해줄 필요가 있다. 이 파일은 리눅스에만 있는 파일이므로 그 밖의 운영체제에서는 신경쓰지 않아도 된다.
sudo vi /etc/security/limits.conf
ubuntu - nofile 65535
ubuntu - nproc 4096
ubuntu soft memlock unlimited
ubuntu hard memlock unlimited
ubuntu는 엘라스틱서치를 실행하는 사용자 계정명이다. 엘라스틱서치를 사용하는 리눅스 계정을 적으면 된다. 설명은 다음과 같다.
위를 적용하고 reboot를 해준다. 그리고 ulimit -a 명령으로 적용됬는지 확인해본다.
sudo vi /etc/sysctl.conf
# 최대 가상 메모리 개수 변경
vm.max_map_count = 262144
# 변경 적용
sudo sysctl -w vm.max_map_count=262144
엘라스틱서치는 기본적으로 파일 입출력 성능 향상을 위해 파일을 메모리에 매핑하는 mmap 파일 시스템을 사용하는데, 이는 가상 메모리 공간을 사용하므로 충분한 공간을 확보할 필요가 있다.
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
위 에러가 뜨면 이 설정을 하지 않아서 뜨는 에러 이다.
sudo systemctl edit elasticsearch
# 작성 -> ^x -> y -> enter
# service도 작성하는 것입니다.
[Service]
LimitMEMLOCK=infinity
# 적용
sudo systemctl daemon-reload
대상 서버
- Kibana
- 10.0.7.62
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ cat >> /etc/yum.repos.d/kibana.repo <<EOF
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
$ yum install kibana
$ vi /etc/kibana/kibana.yml
# 포트
server.port: 5601
# 서버이름
server.name: "kibana"
# 키바나의 호스트 주소로 0.0.0.0 입력시 자동으로 외부 ip를 바인딩
server.host: "0.0.0.0"
# http 붙여야합니다.
elasticsearch.hosts: ["http://10.0.7.164:9200", "http://10.0.7.120:9200", "http://10.0.7.77:9200"]
$ systemctl restart kibana
아래와 같이 나오면 제대로 설치 된 것