What's ELK, Filebeat?

 

 

 

  • Elasticsearch: Apache Lucene을 기반으로 개발한 실시간 분산형 RESTful 검색 및 분석 엔진
  • Logstash: 각종 로그를 가져와서 JSON 형태로 만들어 Elasticsearch로 데이터를 전송함
  • Kibana: Elasticsearch에 저장된 데이터를 사용자에게 Dashboard 형태로 보여주는 시각화 솔루션
  • Filebeat: 로그 파일을 경령화시켜서 Elasticsearch 또는 Logstash로 넘겨주는 역할을 수행함. 특히, Logstash가 과부하되면 넘기는 속도를 줄여주고, 시스템 가동이 중단되거나 다시 시작해도, 로그의 중단점을 기억하고 그 지점부터 다시 보낼 수 있음

프로그웍스가 ELK에 관심을 가지계 된 계기는 다음과 같습니다. 클라우드 환경에서 마이크로아키텍처에서 탑재되는 개별 모듈의 동작상태를 관제하기 위한 방법이 무엇이 있을까 고민하던 중 한가지 방법이 될 수있겠다라고 생각했습니다.

1. 제작되는 개별 앱 또는 모듈의 로그작성 규칙을 통일하고 
2. filebeat를 통해 로그파일에서 원하는 것을 수집하여
3. 대쉬보드에 출력한다면,

VM, 컨테이너, 물리머신 등 환경에 상관없이 운영정보를 관리할 수 있을 것이다. 우선은 여기까지만 생각합니다. 이 후 발전시켜 나가겠습니다.

How to install the ELK, Filebeat?

 

우선 JDK를 설치한다(JDK를 설치하지 않았을 경우 진행). 

$sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 

 

그리고, 아래 환경변수를 /etc/profile 에 추가하고 적용한다.

$sudo vi /etc/profile  # 아래 내용 추가 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-1.b14.el7_2.x86_64 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar  # 환경변수 등록 $source /etc/profile

 

 

1. Elasticsearch

/etc/yum.repos.d/에 elasticsearch.repo 내용을 추가한다.

[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md 

 

 이제 yum 으로 설치한다. 

$sudo yum -y install elasticsearch 

 

2. Logstash

위의 Elasticsearch 설치 과정과 동일하다.

$sudo vi /etc/yum.repos.d/logstash.repo  # 아래 내용 추가 [logstash-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md  # 설치 $sudo yum -y install logstash

 

 

3. Kibana

위의 Elasticsearch 설치 과정과 동일하다.

$sudo vi /etc/yum.repos.d/kibana.repo  # 아래 내용 추가 [kibana-6.x] name=Kibana repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md  # 설치 $sudo yum -y install kibana 

 

Kibana를 설치했으면 Host(호스트), Name(이름), SSL(해도 되고 안 해도 됨)을 설정한다. SSL 설정을 했을 경우 SSL 인증서의 권한도 같이 수정해야 한다. 만약에 시스템에서 방화벽을 사용하면 포트 설정도 추가한다.

$sudo vi /etc/kibana/kibana.yml

 

 # 서버 호스트 및 이름 입력(여기서는 elk.com 사용)  server.host: "127.0.0.1"  server.name: "elk.com"

 

 # 로그가 담긴 Elasticsearch 주소 입력  elasticsearch.url: "http://127.0.0.1:9200"  # SSL 설정 # 서버를 내부에서만 사용하면 할 필요는 없다. 하지만, 외부에서 연결하여 사용할 경우 

# 보안성을 위해 SSL 설정을 반드시 해야 한다. server.ssl.enabled: true # .crt 파일 경로 입력 server.ssl.certificate: # .key 파일 경로 입력 server.ssl.key: # SSL 인증서 권한 수정 $sudo chown kibana. 경로(.crt와 .key 파일 둘 다 설정해야 함) # 필요시 방화벽 설정 $sudo firewall-cmd --add-port=5601/tcp --permanent $sudo firewall-cmd --reload

 

4. Filebeat

위의 Elasticsearch 설치 과정과 동일하다.

$sudo /etc/yum.repos.d/elastic.repo  # 아래 내용 추가 [elastic-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md  # 설치 $sudo yum install -y filebeat

설치가 완료되면 Filebeat에서 보낼 로그의 경로를 설정한다. 여기서는 Logstash를 사용하므로, output 쪽에 logstash로 지정한다.

$sudo vi /etc/filebeat/filebeat.yml  # 아래 내용 추가 filebeat.prospector: - input_type: log   paths:     # 쉘 명령어들을 기록한 로그     - /var/log/bash_history     # MySQL 로그     - /var/log/mysql/*     # Apache httpd 로그     - /var/log/httpd/*

 

output.logstash:   hosts: ["127.0.0.1:5044"] 

 

그리고, Filebeat로 보내진 로그를 Elasticsearch로 보내는 설정을 한다. 참고로 Filebeat 외 다른 beat(Metricbeat, Packetbeat, Heartbeat, Winlogbeat 등)에서 보낸 로그를 포함하여 이를 모두 Logstash에서 직접 로그를 보낼 수 있다.

$sudo vi /etc/logstash/conf.d/filebeat.conf  # 아래 내용 추가 input {   beats {     port => 5044     host => "0.0.0.0"   } } output {   elasticsearch {     hosts => ["http://127.0.0.1:9200"]     index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"      document_type => "%{[@metadata][type]}"   } } 

 이제 Kibana에서 위에서 설정한 로그를 확인할 수 있다.

# 서비스 모두 재시작  systemctl restart elasticsearch  systemctl restart logstash  systemctl restart kibana  systemctl restart filebeat 

 혹시 서비스 시작 도중 시스템이 느려지면 RAM 4GB 이상 설정한다. 이제 http://127.0.0.1:5601에 접속하면 Kibana가 정상적으로 실행된다. 처음에 Index Pattern이 없다고 나온다. 그러면 curl localhost:9200/_cat/indices?v 명령어를 실행해서 Elasticsearch에 저장된 Index Pattern을 확인하고 Kibana에 추가하면 된다 (여기서는 filebeat-로 추가했다. Index Pattern은 추후 원하는 대로 수정 가능하므로 참고할 것*). 이제 Dashboard 혹은 Discover 메뉴에서 보고 싶은 로그를 필터링하여 볼 수 있다.

 

[curl localhost:9200/_cat/indices?v 실행 결과]

 

[Index Pattern 설정]

 

[SQL Injection 공격 시도 MySQL 로그]

 

[사용자가 su 명령어를 입력한 로그를 추출한 결과(원하는 Command List를 입력해서 로그를 확인 가능)]

 

마지막으로, SQL Injection 공격 시도가 있을 때 ssl_error_log에서 아래처럼 POST Body 메시지를 볼 수 있다. Logstash 덕분에 JSON 형식으로 잘 넘어온다.

 

 

 

+ Recent posts