웹사이트 검색

Ubuntu 16.04에 Elastic Stack을 설치하는 방법


Elasticsearch는 Java로 개발된 Lucene을 기반으로 하는 오픈 소스 검색 엔진입니다. HTTP 대시보드 웹 인터페이스(Kibana) 및 JSON 문서 체계와 함께 분산 및 다중 테넌트 전체 텍스트 검색 엔진을 제공합니다. Elasticsearch는 로그 파일을 포함한 모든 유형의 문서를 검색하는 데 사용할 수 있는 확장 가능한 검색 엔진입니다. Elasticsearch는 Elastic Stack 또는 ELK Stack의 핵심입니다.

Logstash는 시스템 이벤트 및 로그를 관리하기 위한 오픈 소스 도구입니다. 데이터 수집을 위한 실시간 파이프라이닝을 제공합니다. Logstash는 로그 또는 데이터를 수집하고 모든 데이터를 JSON 문서로 변환하여 Elasticsearch에 저장합니다.

Kibana는 Elasticsearch용 데이터 시각화 인터페이스입니다. Kibana는 멋진 대시보드(웹 인터페이스)를 제공하며 이를 통해 Elasticsearch의 모든 데이터를 직접 관리하고 시각화할 수 있습니다. 아름다울 뿐만 아니라 강력합니다.

이 튜토리얼에서는 서버 로그를 모니터링하기 위해 단일 Ubuntu 16.04 서버에 Elastic Stack을 설치하고 구성하는 방법과 Ubuntu 16.04 및 CentOS 7 운영 체제가 설치된 클라이언트 PC에 Elastic beats를 설치하는 방법을 보여줍니다.

전제 조건

  • Ubuntu 16.04 64비트 서버, 4GB RAM, 호스트 이름 - elk-master
  • Ubuntu 16.04 64비트 클라이언트, 1GB RAM, 호스트 이름 - elk-client1
  • CentOS 7 64비트 클라이언트(1GB RAM, 호스트 이름 - elk-client2)

1단계 - 자바 설치

탄력적 스택 배포에는 Java가 필요합니다. Elasticsearch에는 Java 8이 필요합니다. Oracle JDK 1.8을 사용하는 것이 좋습니다. PPA 저장소에서 자바 8을 설치합니다.

새 패키지 python-software-properties를 설치하면 apt 명령으로 새 저장소를 쉽게 추가할 수 있습니다.

sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common apt-transport-https

add-apt-repository 명령을 사용하여 새 Java 8 PPA 리포지토리를 추가한 다음 리포지토리를 업데이트합니다.

sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update

PPA webpub8 리포지토리에서 Java 8을 설치합니다.

sudo apt-get install -y oracle-java8-installer

설치가 완료되면 Java 버전을 확인하여 시스템에 Java가 제대로 설치되었는지 확인하십시오.

java -version

2단계 - Elasticsearch 설치 및 구성

이 단계에서는 Elasticsearch를 설치하고 구성합니다. 탄력적 저장소에서 Elasticsearch를 설치하고 localhost IP에서 실행되도록 구성합니다.

Elasticsearch를 설치하기 전에 탄력적 리포지토리 키를 서버에 추가합니다.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

탄력적 5.x 리포지토리를 sources.list.d 디렉터리에 추가합니다.

echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

아래의 apt 명령어를 사용하여 저장소를 업데이트하고 Elasticsearch 5.1을 설치합니다.

sudo apt-get update
sudo apt-get install -y elasticsearch

엘라스틱서치가 설치되었습니다. 이제 구성 디렉토리로 이동하여 elasticsaerch.yml 구성 파일을 편집하십시오.

cd /etc/elasticsearch/
vim elasticsearch.yml

43행에서 주석을 제거하여 Elasticsearch에 대한 메모리 잠금을 활성화합니다. 서버 과부하를 방지하기 위해 Elasticsearch에 대한 메모리 교환을 비활성화하기 위해 이렇게 합니다.

bootstrap.memory_lock: true

Network 블록에서 network.host 및 http.port 행의 주석 처리를 제거하십시오.

network.host: localhost
http.port: 9200

파일을 저장하고 vim을 종료합니다.

이제 메모리 잠금 mlockall 구성에 대한 elasticsearch 서비스 파일을 편집합니다.

vim /usr/lib/systemd/system/elasticsearch.service

LimitMEMLOCK 라인의 주석을 제거하십시오.

LimitMEMLOCK=infinity

파일을 저장하고 종료합니다.

/etc/default 디렉터리에서 Elasticsearch의 기본 구성을 편집합니다.

vim /etc/default/elasticsearch

60행의 주석을 해제하고 값이 무제한인지 확인하십시오.

MAX_LOCKED_MEMORY=unlimited

저장 및 종료.

Elasticsearch 구성이 완료되었습니다. Elasticsearch는 포트 9200을 사용하는 localhost IP 주소에서 실행되며 Ubuntu 서버에서 mlockall을 활성화하여 스왑 메모리를 비활성화했습니다.

Elasticsearch 서비스 파일을 다시 로드하고 부팅 시 실행되도록 활성화한 다음 서비스를 시작합니다.

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Elasticsearch가 실행될 때까지 잠시 기다린 다음 서버에서 열린 포트를 확인하고 포트 9200의 상태가 LISTEN인지 확인합니다.

netstat -plntu

그런 다음 메모리 잠금을 확인하여 mlockall이 활성화되었는지 확인하십시오. 또한 아래 명령으로 Elasticsearch가 실행 중인지 확인하십시오.

curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'

아래 결과가 표시됩니다.

3단계 - Nginx로 Kibana 설치 및 구성

이 단계에서는 Nginx 웹 서버 뒤에 Kibana를 설치하고 구성합니다. Kibana는 localhost IP 주소에서만 수신하고 Nginx는 Kibana 애플리케이션의 리버스 프록시 역할을 합니다.

다음 적절한 명령어로 Kibana를 설치합니다.

sudo apt-get install -y kibana

이제 kibana.yml 구성 파일을 편집합니다.

vim /etc/kibana/kibana.yml

server.port, server.hos 및 elasticsearch.url 행의 주석 처리를 제거합니다.

server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

파일을 저장하고 vim을 종료합니다.

부팅 시 실행할 Kibana를 추가하고 시작합니다.

sudo systemctl enable kibana
sudo systemctl start kibana

Kibana는 포트 5601에서 노드 애플리케이션으로 실행됩니다.

netstat -plntu

Kibana 설치가 완료되었습니다. 이제 Nginx를 설치하고 공용 IP 주소에서 Kibana에 액세스할 수 있도록 리버스 프록시로 구성해야 합니다.

다음으로 Nginx 및 apache2-utils 패키지를 설치합니다.

sudo apt-get install -y nginx apache2-utils

Apache2-utils는 Nginx와 함께 작동하는 웹 서버용 도구가 포함된 패키지이며, Kibana용 htpasswd 기본 인증을 사용합니다.

Nginx가 설치되었습니다. 이제 Nginx sites-available 디렉터리에 새 가상 호스트 구성 파일을 만들어야 합니다. vim으로 새 파일 kibana를 만듭니다.

cd /etc/nginx/
vim sites-available/kibana

아래에 구성을 붙여넣습니다.

server {
    listen 80;

    server_name elk-stack.co;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

파일을 저장하고 vim을 종료합니다.

htpasswd 명령을 사용하여 새 기본 인증 파일을 만듭니다.

sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD

sites-available의 kibana 파일에서 sites-enabled 디렉토리로의 심볼릭 링크를 생성하여 kibana 가상 호스트를 활성화합니다.

ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/

nginx 구성을 테스트하고 오류가 없는지 확인한 다음 부팅 시 실행되도록 nginx를 추가하고 nginx를 다시 시작합니다.

nginx -t
systemctl enable nginx
systemctl restart nginx

4단계 - Logstash 설치 및 구성

이 단계에서는 Logsatash를 설치 및 구성하여 클라이언트 소스의 서버 로그를 filebeat로 중앙 집중화한 다음 모든 데이터(Syslog)를 필터링 및 변환하고 보관(Elasticsearch)으로 전송합니다.

아래의 적절한 명령어를 사용하여 Logstash 5를 설치합니다.

sudo apt-get install -y logstash

vim으로 호스트 파일을 편집합니다.

vim /etc/hosts

서버 IP 주소와 호스트 이름을 추가합니다.

10.0.15.10    elk-master

호스트 파일을 저장하고 편집기를 종료합니다.

이제 클라이언트 소스가 탄력적 서버를 식별할 수 있도록 OpenSSL로 새 SSL 인증서 파일을 생성합니다.

cd /etc/logstash/
openssl req -subj /CN=elk-master -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt

/CN 값을 탄력적 서버 호스트 이름으로 변경합니다.

인증서 파일은 /etc/logstash/ 디렉토리에 생성됩니다.

다음으로 logstash에 대한 구성 파일을 생성합니다. 구성 파일 filebeat-input.conf를 filebeat의 입력 파일로, syslog-filter.conf를 syslog 처리용으로, 그리고 output-elasticsearch.conf 파일을 만들어 Elasticsearch 출력을 정의합니다.

logstash 구성 디렉토리로 이동하여 conf.d 디렉토리에 새 구성 파일을 작성하십시오.

cd /etc/logstash/
vim conf.d/filebeat-input.conf

구성을 입력하고 아래에 구성을 붙여넣습니다.

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/logstash.crt"
    ssl_key => "/etc/logstash/logstash.key"
  }
}

저장 및 종료.

syslog-filter.conf 파일을 생성합니다.

vim conf.d/syslog-filter.conf

아래 구성을 붙여넣습니다.

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

grok라는 필터 플러그인을 사용하여 syslog 파일을 파싱합니다.

저장 및 종료.

출력 구성 파일 output-elasticsearch.conf를 생성합니다.

vim conf.d/output-elasticsearch.conf

아래 구성을 붙여넣습니다.

output {
  elasticsearch { hosts => ["localhost:9200"]
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

저장 및 종료.

이 작업이 완료되면 부팅 시 시작하도록 logstash를 추가하고 서비스를 시작합니다.

sudo systemctl enable logstash
sudo systemctl start logstash

5단계 - Ubuntu 클라이언트에서 Filebeat 설치 및 구성

ssh 계정을 사용하여 루트로 서버에 연결합니다.

ssh 

scp 명령어를 사용하여 인증서 파일을 클라이언트에 복사합니다.

scp :/etc/logstash/logstash.crt .

호스트 파일을 편집하고 elk-master IP 주소를 추가하십시오.

vim /etc/hosts

파일 끝에 아래 구성을 추가하십시오.

10.0.15.10    elk-master

저장 및 종료.

이제 elk-client1 서버에 탄력적 키를 추가해야 합니다.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

https 다운로드 전송과 함께 탄력적 저장소를 사용할 것이므로 apt-transport-https 패키지를 서버에 설치해야 합니다.

sudo apt-get install -y apt-transport-https

탄력적 저장소를 추가하고 모든 Ubuntu 저장소를 업데이트합니다.

echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update

이제 apt 명령으로 filebeat를 설치합니다.

sudo apt-get install -y filebeat

다음으로 filebeat 구성 디렉토리로 이동하여 vim으로 filebeat.yml 파일을 편집합니다.

cd /etc/filebeat/
vim filebeat.yml

경로 구성에서 새 로그 파일을 추가합니다.

  paths:
    - /var/log/auth.log
    - /var/log/syslog

문서 유형을 syslog로 설정합니다.

  document-type: syslog

줄에 주석을 추가하여 elasticsearch 출력을 비활성화합니다.

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

logstash 출력을 활성화하고 구성의 주석을 해제한 다음 값을 아래와 같이 변경합니다.

output.logstash:
  # The Logstash hosts
  hosts: ["elk-master:5443"]
  bulk_max_size: 2048
  ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

저장 및 종료.

인증서 파일을 filebeat 디렉터리로 이동합니다.

mv ~/logstash.crt /etc/filebeat/

filebeat를 시작하고 부팅 시 실행되도록 추가합니다.

sudo systemctl start filebeat
sudo systemctl enable filebeat

서비스 상태를 확인하세요.

sudo systemctl status filebeat

6단계 - CentOS 클라이언트에서 Filebeat 설치 및 구성

Beats는 클라이언트 시스템에서 Logstash 또는 Elasticsearch 서버로 막대한 양의 데이터를 전송하기 위해 클라이언트 노드에 설치할 수 있는 경량 에이전트인 데이터 수집기입니다. 로그 파일용 Filebeat, 메트릭용 Metricbeat, 네트워크 데이터용 Packetbeat 및 Windows 클라이언트 이벤트 로그용 Winlogbeat의 4가지 비트를 사용할 수 있습니다.

이 튜토리얼에서는 보안 SSL 연결을 통해 로그 데이터를 logstash 서버로 전송하도록 Filebeat를 설치하고 구성하는 방법을 보여줍니다.

탄력적 서버에서 client1 서버로 인증서 파일을 복사합니다. client1 서버에 로그인합니다.

ssh 

scp 명령어로 인증서 파일을 복사합니다.

scp :/etc/logstash/logstash.crt .
TYPE elk-server password

호스트 파일을 편집하고 elk-master 서버 주소를 추가하십시오.

vim /etc/hosts

엘크 마스터 서버 주소를 추가합니다.

10.0.15.10    elk-master

저장 및 종료.

다음으로 탄성 키를 elk-client2 서버로 가져옵니다.

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

탄력적 저장소를 서버에 추가합니다.

cd /etc/yum.repos.d/
vim elastic.repo

아래 구성을 붙여넣습니다.

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

저장 및 종료.

이 yum 명령으로 filebeat를 설치합니다.

sudo yum -y install filebeat

Filebeat가 설치되었습니다. 이제 구성 디렉토리로 이동하여 filebeat.yml 파일을 편집하십시오.

cd /etc/filebeat/
vim filebeat.yml

경로 섹션 21행에서 몇 가지 새 로그 파일을 추가합니다. 여기에 두 개의 파일을 추가합니다. ssh 활동을 위한 /var/log/secure 및 서버 로그를 위한 /var/log/messages입니다.

  paths:
    - /var/log/secure
    - /var/log/messages

26행에 새 구성을 추가하여 syslog에 대한 파일 유형을 정의하십시오.

  document-type: syslog

기본적으로 filebeat는 출력으로 elasticsearch를 사용합니다. 이 튜토리얼에서는 이를 logstash로 변경합니다. 83행과 85행에 주석을 추가하여 Elasticsearch 출력을 비활성화합니다.

Elasticsearch 출력을 비활성화합니다.

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]

이제 새 logstash 출력 구성을 추가하고 logstash 출력 구성의 주석을 제거하고 모든 값을 아래 구성에 표시된 값으로 변경하십시오.

output.logstash:
  # The Logstash hosts
  hosts: ["elk-master:5443"]
  bulk_max_size: 2048
  ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

저장 및 종료.

부팅 시 시작하도록 filebeat를 추가하고 시작합니다.

sudo systemctl enable filebeat
sudo systemctl start filebeat

이제 filebeat 로그 파일을 확인하고 관찰하여 올바르게 실행되고 있는지 확인할 수 있습니다.

tail -f /var/log/filebeat/filebeat

8단계 - 테스트

웹 브라우저를 열고 nginx 구성에서 구성한 Elastic Stack 도메인을 방문합니다. 내 도메인은 elk-stack.co입니다. 비밀번호와 함께 관리자 이름을 입력하고 Enter 키를 눌러 Kibana 대시보드에 로그인합니다.

새 기본 색인 filebeat-*을 만들고 만들기를 클릭합니다.

기본 인덱스가 생성되었습니다. 탄성 스택에 여러 비트가 있는 경우 별표 버튼을 클릭하기만 하면 기본 비트를 구성할 수 있습니다.

검색으로 이동하면 elk-client1 및 elk-client2 서버의 모든 로그 파일이 표시됩니다.

잘못된 ssh 로그인에 대한 elk-client1 서버 로그의 JSON 출력 예입니다.

그리고 Kibana 대시보드로 훨씬 더 많은 일을 할 수 있습니다. 그냥 사용해 보세요!

Elastic Stack은 Ubuntu 16.04 서버에 설치되었고 filebeat는 Ubuntu 및 CentOS 클라이언트 서버에 설치되었습니다.

참조