코딩마을방범대

[ELK] 다른 서버에 구축되어 있는 ELK와 연결하기 본문

💡 백엔드/ELK

[ELK] 다른 서버에 구축되어 있는 ELK와 연결하기

신짱구 5세 2024. 11. 12. 13:57
728x90

 

 

 

 

도커를 통해 ELK 구축하기

ELK란 아래 포스트를 통해 개념을 확인할 수 있다. ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리ELK 스택Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미

sweet-rain-kim.tistory.com

 

위 포스트를 통해 A서버에 ELK가 구축되어 있다는 가정 하에, B서버의 로그를 A서버로 보내는 방법을 알아볼 것이다.

 

초기 환경

A서버: ELK 구축되어 있음

B서버: A서버로 보낼 log가 쌓임.

 

 

 

 


 

 

 

 

 

 

Ⅰ. B서버에 ELK를 별도로 구축하는 방법

※ 이 방법은 서버 별로 필터를 별도로 설정하고싶은 경우 추천한다.

 

1. 서버 B에 Elasticsearch, Logstash 설치

 

A. GPG 키 및 저장소 추가

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

 

B. 패키지 목록 업데이트

sudo apt-get update

 

C. Elasticsearch, Logstash 설치

sudo apt-get install elasticsearch logstash

 

 

 


 

2. Elasticsearch 설정

 

A. 서버 A

ELK 가 구축된 폴더의 ./elasticsearch/config/elasticsearch.yml 를 수정해주면 된다.

# 모든 네트워크 인터페이스에서 수신하도록 설정
network.host: 0.0.0.0

# HTTP 포트 설정 (포트는 docker-compose.yml에 설정되어있을 것이다.)
http.port: 9200

# 클러스터 이름 (선택 사항)
cluster.name: my-cluster

# 노드 이름 (선택 사항)
node.name: node-a

 

B. 서버 B

sudo vi /etc/elasticsearch/elasticsearch.yml
# 모든 네트워크 인터페이스에서 수신하도록 설정
network.host: 0.0.0.0

# HTTP 포트 설정
http.port: 9200

# 클러스터 이름 (서버 A와 동일해야 함)
cluster.name: my-cluster

# 노드 이름 (선택 사항)
node.name: node-b

 

 


 

 

3. B서버의 Logstash 설정 파일 수정

sudo vi /etc/logstash/conf.d/logstash.conf

 

예시1. 필터링 없이 A서버에 전송

input {
    file {
        path => "/path/to/your/logfile.log" # 로그 파일 경로
        start_position => "beginning"
    }
}

output {
    elasticsearch {
        hosts => ["http://<서버_A_IP>:9200"] # 서버 A의 Elasticsearch IP
        index => "your_index_name-%{+YYYY.MM.dd}"
    }
}

 

예시2. 필터 적용 후 A서버에 전송

input {
    file {
        path => "/path/to/your/logfile.log" # 로그 파일 경로
        start_position => "beginning"
    }
}

filter {
    # 필요한 필터 추가 (예: grok, mutate 등)
    mutate {
        add_field => { "new_field" => "value" }
    }
}

output {
    logstash {
        hosts => ["<서버_A_IP>:5044"] # A 서버의 Logstash IP 및 포트
    }
}

 

 


 

 

4. B서버의 Elasticsearch, Logstash 시작

sudo systemctl start elasticsearch
sudo systemctl start logstash




 

 

5. B서버의 Elasticsearch, Logstash 자동 시작 설정

sudo systemctl enable elasticsearch
sudo systemctl enable logstash




 

 

5. A서버의 Kibana 사이트 확인

B서버의 Logstash에서 설정한대로 index가 제대로 추가되었는지 확인한다.



 

 


 

 

 

 

 

 

Ⅱ. B서버에서 Filebeat로 전송하기

 

1. B서버에 filebeat 설치

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update
sudo apt-get install filebeat

 


 

2. B서버에 filebeat 세팅

sudo vi /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/your/logs/*.log  # 전송할 로그 파일의 경로

output.logstash:
  hosts: ["A_SERVER_IP:5044"] # A 서버의 Logstash 주소

 


 

3. A서버에 logstash 세팅

input {
  beats {
    port => 5044  # Filebeat가 Logstash로 전송할 포트
  }
}

filter {
  # 필요한 필터 추가
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]  # Elasticsearch 주소
    index => "your-index-name-%{+YYYY.MM.dd}"  # 인덱스 이름
  }
}

 


 

4. B서버 filebeat 시작

sudo systemctl start filebeat
sudo systemctl enable filebeat  # 부팅 시 자동 시작 설정

 


 

5. A서버 logstash 시작

sudo systemctl start logstash

 

 

 

 

728x90