웹사이트 검색

CentOS 7에 Elastic Stack을 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 센트OS 8
  • 센트OS 7

이 페이지에서

  1. 1단계 - 운영 체제 준비
  2. 2단계 - Java 설치
  3. 3단계 - Elasticsearch 설치 및 구성
  4. 4단계 - Nginx로 Kibana 설치 및 구성
  5. 5단계 - Logstash 설치 및 구성
  6. 6단계 - CentOS 클라이언트에서 Filebeat 설치 및 구성
  7. 7단계 - Ubuntu 클라이언트에서 Filebeat 설치 및 구성
  8. 8단계 - Elastic Stack 테스트
  9. 참조

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

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

Kibana는 Elasticsearch용 오픈 소스 데이터 시각화 도구입니다. Kibana는 멋진 대시보드 웹 인터페이스를 제공합니다. Elasticsearch에서 데이터를 관리하고 시각화할 수 있습니다. 아름다울 뿐만 아니라 강력합니다.

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

전제 조건

  • CentOS 7 64비트, 4GB RAM - elk-master
  • CentOS 7 64비트, 1GB RAM - client1
  • Ubuntu 16.04 64비트, 1GB RAM - client2

1단계 - 운영 체제 준비

이 튜토리얼에서는 CentOS 7 서버에서 SELinux를 비활성화합니다. SELinux 구성 파일을 편집합니다.

vim /etc/sysconfig/selinux

SELinux 값을 적용에서 비활성화로 변경합니다.

SELINUX=disabled

그런 다음 서버를 재부팅합니다.

reboot

서버에 다시 로그인하고 SELinux 상태를 확인하십시오.

getenforce

결과가 비활성화되어 있는지 확인하십시오.

2단계 - 자바 설치

탄력적 스택 배포에는 Java가 필요합니다. Elasticsearch에는 Java 8이 필요하며 Oracle JDK 1.8을 사용하는 것이 좋습니다. 공식 Oracle rpm 패키지에서 Java 8을 설치하겠습니다.

wget 명령으로 Java 8 JDK를 다운로드합니다.

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"

그런 다음 이 rpm 명령으로 설치하십시오.

rpm -ivh jdk-8u77-linux-x64.rpm

마지막으로 Java JDK 버전을 확인하여 제대로 작동하는지 확인하십시오.

java -version

서버의 Java 버전이 표시됩니다.

3단계 - Elasticsearch 설치 및 구성

이 단계에서는 Elasticsearch를 설치하고 구성합니다. 나는 elastic.co에서 제공하는 rpm 패키지에서 Elasticsearch를 설치하고 localhost에서 실행되도록 구성할 것입니다(설정을 안전하게 하고 외부에서 연결할 수 없도록 합니다).

Elasticsearch를 설치하기 전에 서버에 elastic.co 키를 추가하십시오.

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

다음으로 wget으로 Elasticsearch 5.1을 다운로드한 다음 설치합니다.

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm

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

cd /etc/elasticsearch/
vim elasticsearch.yml

40행에서 주석을 제거하여 Elasticsearch에 대한 메모리 잠금을 활성화합니다. 이렇게 하면 Elasticsearch에 대한 메모리 스와핑이 비활성화됩니다.

bootstrap.memory_lock: true

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

network.host: localhost
http.port: 9200

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

이제 메모리 잠금 구성을 위해 elasticsearch.service 파일을 편집합니다.

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

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

LimitMEMLOCK=infinity

저장 및 종료.

Elasticsearch용 sysconfig 구성 파일을 편집합니다.

vim /etc/sysconfig/elasticsearch

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

MAX_LOCKED_MEMORY=unlimited

저장 및 종료.

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

systemd를 다시 로드하고 부팅 시 Elasticsearch가 시작되도록 활성화한 다음 서비스를 시작합니다.

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

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

netstat -plntu

그런 다음 mlockall이 활성화되었는지 메모리 잠금을 확인하고 아래 명령으로 Elasticsearch가 실행 중인지 확인합니다.

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

아래 결과가 표시됩니다.

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

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

wget으로 Kibana 5.1을 다운로드한 다음 rpm 명령으로 설치합니다.

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm

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

vim /etc/kibana/kibana.yml

server.port, server.host 및 elasticsearch.url에 대한 구성 줄의 주석 처리를 제거합니다.

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

저장 및 종료.

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

sudo systemctl enable kibana
sudo systemctl start kibana

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

netstat -plntu

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

Nginx는 Epel 저장소에서 사용할 수 있으며 yum으로 epel-release를 설치합니다.

yum -y install epel-release

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

yum -y install nginx httpd-tools

httpd-tools 패키지에는 웹 서버용 도구가 포함되어 있으며 Kibana용 htpasswd 기본 인증을 사용합니다.

Nginx 구성 파일을 편집하고 server { } 블록을 제거하여 새 가상 호스트 구성을 추가할 수 있습니다.

cd /etc/nginx/
vim nginx.conf

서버 { } 블록을 제거합니다.

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

이제 conf.d 디렉토리에 새로운 가상 호스트 설정 파일을 만들어야 합니다. vim으로 새 파일 kibana.conf를 만듭니다.

vim /etc/nginx/conf.d/kibana.conf

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

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;
    }
}

저장 및 종료.

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

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

Nginx 구성을 테스트하고 오류가 없는지 확인하십시오. 그런 다음 부팅 시 실행할 Nginx를 추가하고 Nginx를 시작합니다.

nginx -t
systemctl enable nginx
systemctl start nginx

5단계 - Logstash 설치 및 구성

이 단계에서는 Logsatash를 설치하고 클라이언트의 서버 로그를 filebeat로 중앙 집중화하도록 구성한 다음 Syslog 데이터를 필터링 및 변환하고 스태시(Elasticsearch)로 이동합니다.

Logstash를 다운로드하고 rpm으로 설치합니다.

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm

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

tls 디렉터리로 이동하여 openssl.cnf 파일을 편집합니다.

cd /etc/pki/tls
vim openssl.cnf

서버 식별을 위해 [ v3_ca ] 섹션에 새 줄을 추가합니다.

[ v3_ca ]

# Server IP Address
subjectAltName = IP: 10.0.15.10

저장 및 종료.

openssl 명령으로 인증서 파일을 생성합니다.

openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt

인증서 파일은 /etc/pki/tls/certs/ 및 /etc/pki/tls/private/ 디렉토리에서 찾을 수 있습니다.

다음으로 Logstash에 대한 새 구성 파일을 생성합니다. 새 filebeat-input.conf 파일을 만들어 filebeat의 로그 소스를 구성한 다음 syslog 처리를 위한 syslog-filter.conf 파일과 Elasticsearch 출력을 정의하는 output-elasticsearch.conf 파일을 만듭니다.

logstash 구성 디렉토리로 이동하여 conf.d 하위 디렉토리에 새 구성 파일을 만듭니다.

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

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

input {
  beats {
    port => 5443
    ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.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

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

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

이 튜토리얼에서는 SSL 연결을 통해 데이터 로그 파일을 Logstash 서버로 전송하기 위해 Filebeat를 설치하고 구성하는 방법을 보여드리겠습니다.

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

ssh 

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

scp :~/logstash-forwarder.crt .
TYPE elk-server password

새 디렉터리를 만들고 인증서 파일을 해당 디렉터리로 이동합니다.

sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

다음으로 client1 서버에서 탄력적 키를 가져옵니다.

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

Filebeat를 다운로드하고 rpm으로 설치합니다.

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpm

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를 출력 대상으로 사용합니다. 이 자습서에서는 이를 Logshtash로 변경합니다. 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: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

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

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

sudo systemctl enable filebeat
sudo systemctl start filebeat

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

ssh로 서버에 접속합니다.

ssh 

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

scp :~/logstash-forwarder.crt .

인증서 파일의 새 디렉터리를 만들고 파일을 해당 디렉터리로 이동합니다.

sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

탄력적 키를 서버에 추가합니다.

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

Filebeat .deb 패키지를 다운로드하고 dpkg 명령으로 설치합니다.

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb

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: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

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

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

sudo systemctl enable filebeat
sudo systemctl start filebeat

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

systemctl status filebeat

8단계 - Elastic Stack 테스트

웹 브라우저를 열고 Nginx 구성에서 사용한 탄력적 스택 도메인을 방문합니다. 내 도메인은 elk-stack.co입니다. 암호를 사용하여 관리자로 로그인하고 Enter 키를 눌러 Kibana 대시보드에 로그인합니다.

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

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

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

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

그리고 Kibana 대시보드로 할 수 있는 것보다 훨씬 더 많은 것이 있습니다. 사용 가능한 옵션을 가지고 놀아보세요.

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

참조

  • https://www.elastic.co/guide/index.html