웹사이트 검색

CentOS 7에 Elasticsearch, Logstash 및 Kibana(ELK 스택)를 설치하는 방법


소개

이 튜토리얼에서는 CentOS 7(즉, Elasticsearch 2.2.x, Logstash 2.2.x 및 Kibana 4.4.x)에 Elasticsearch ELK Stack을 설치하는 방법을 살펴보겠습니다. 또한 Filebeat 1.1.x를 사용하여 중앙 위치에서 시스템의 syslog를 수집하고 시각화하도록 구성하는 방법도 보여줍니다. Logstash는 향후 사용을 위해 로그를 수집, 구문 분석 및 저장하기 위한 오픈 소스 도구입니다. Kibana는 Logstash가 인덱싱한 로그를 검색하고 보는 데 사용할 수 있는 웹 인터페이스입니다. 이 두 도구는 모두 로그 저장에 사용되는 Elasticsearch를 기반으로 합니다.

중앙 집중식 로깅은 한 곳에서 모든 로그를 검색할 수 있으므로 서버 또는 애플리케이션의 문제를 식별하려고 시도할 때 매우 유용할 수 있습니다. 또한 특정 기간 동안 로그를 연관시켜 여러 서버에 걸쳐 있는 문제를 식별할 수 있기 때문에 유용합니다.

Logstash를 사용하여 모든 유형의 로그를 수집할 수 있지만 이 자습서의 범위는 syslog 수집으로 제한됩니다.

우리의 목표

이 자습서의 목표는 여러 서버의 syslog를 수집하도록 Logstash를 설정하고 수집된 로그를 시각화하도록 Kibana를 설정하는 것입니다.

ELK 스택 설정에는 네 가지 주요 구성 요소가 있습니다.

  • Logstash: 들어오는 로그를 처리하는 Logstash의 서버 구성 요소
  • Elasticsearch: 모든 로그 저장
  • Kibana: Nginx를 통해 프록시될 로그 검색 및 시각화를 위한 웹 인터페이스
  • Filebeat: 로그를 Logstash로 보낼 클라이언트 서버에 설치되는 Filebeat는 등심 네트워킹 프로토콜을 활용하여 Logstash와 통신하는 로그 전달 에이전트 역할을 합니다.

ELK 서버라고 하는 단일 서버에 처음 세 가지 구성 요소를 설치합니다. Filebeat는 로그를 수집하려는 모든 클라이언트 서버에 설치되며, 이를 통칭하여 클라이언트 서버라고 합니다.

전제 조건

이 튜토리얼을 완료하려면 CentOS 7 VPS에 대한 루트 액세스 권한이 필요합니다. 설정 방법은 여기에서 찾을 수 있습니다(3단계 및 4단계): CentOS 7을 사용한 초기 서버 설정.

대신 Ubuntu를 사용하려면 Ubuntu 14.04에 ELK를 설치하는 방법 자습서를 확인하십시오.

ELK 서버에 필요한 CPU, RAM 및 스토리지의 양은 수집하려는 로그의 양에 따라 다릅니다. 이 튜토리얼에서는 ELK 서버에 대해 다음 사양의 VPS를 사용합니다.

  • OS: CentOS 7
  • 램: 4GB
  • CPU: 2

ELK 서버 외에도 로그를 수집할 몇 가지 다른 서버가 필요합니다.

ELK 서버 설정을 시작하겠습니다!

자바 8 설치

Elasticsearch와 Logstash에는 Java가 필요하므로 지금 설치하겠습니다. Elasticsearch에서 권장하는 최신 버전의 Oracle Java 8을 설치하겠습니다. 그러나 해당 경로로 이동하기로 결정한 경우 OpenJDK에서 제대로 작동해야 합니다. 이 섹션의 단계를 따른다는 것은 Java SE에 대한 Oracle 바이너리 라이센스 계약에 동의함을 의미합니다.

홈 디렉토리로 변경하고 다음 명령을 사용하여 Oracle Java 8(업데이트 73, 이 작성 당시 최신 버전) JDK RPM을 다운로드합니다.

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

그런 다음 이 yum 명령을 사용하여 RPM을 설치합니다(다른 릴리스를 다운로드한 경우 여기에 파일 이름을 대체하십시오).

  1. sudo yum -y localinstall jdk-8u73-linux-x64.rpm

이제 Java가 /usr/java/jdk1.8.0_73/jre/bin/java에 설치되고 /usr/bin/java에서 링크되어야 합니다.

이전에 다운로드한 아카이브 파일을 삭제할 수 있습니다.

  1. rm ~/jdk-8u*-linux-x64.rpm

이제 Java 8이 설치되었으므로 ElasticSearch를 설치해 보겠습니다.

Elasticsearch 설치

Elastic의 패키지 저장소를 추가하여 패키지 관리자와 함께 Elasticsearch를 설치할 수 있습니다.

다음 명령을 실행하여 Elasticsearch 공개 GPG 키를 rpm으로 가져옵니다.

  1. sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

Elasticsearch용 새 yum 리포지토리 파일을 만듭니다. 이것은 단일 명령입니다.

  1. echo '[elasticsearch-2.x]
  2. name=Elasticsearch repository for 2.x packages
  3. baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
  4. gpgcheck=1
  5. gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
  6. enabled=1
  7. ' | sudo tee /etc/yum.repos.d/elasticsearch.repo

다음 명령으로 Elasticsearch를 설치합니다.

  1. sudo yum -y install elasticsearch

이제 Elasticsearch가 설치되었습니다. 구성을 편집해 보겠습니다.

  1. sudo vi /etc/elasticsearch/elasticsearch.yml

Elasticsearch 인스턴스(포트 9200)에 대한 외부 액세스를 제한하여 외부인이 데이터를 읽거나 HTTP API를 통해 Elasticsearch 클러스터를 종료할 수 없도록 해야 합니다. network.host를 지정하는 줄을 찾아 주석 처리를 제거하고 해당 값을 "localhost\로 바꾸면 다음과 같습니다.

network.host: localhost

elasticsearch.yml을 저장하고 종료합니다.

이제 Elasticsearch를 시작합니다.

  1. sudo systemctl start elasticsearch

그런 다음 다음 명령을 실행하여 부팅 시 Elasticsearch를 자동으로 시작합니다.

  1. sudo systemctl enable elasticsearch

이제 Elasticsearch가 실행 중이므로 Kibana를 설치해 보겠습니다.

키바나 설치

Kibana 패키지는 Elasticsearch와 동일한 GPG 키를 공유하며 이미 해당 공개 키를 설치했습니다.

Kibana용 새 yum 리포지토리 파일을 만들고 편집합니다.

  1. sudo vi /etc/yum.repos.d/kibana.repo

다음 리포지토리 구성을 추가합니다.

  1. [kibana-4.4]
  2. name=Kibana repository for 4.4.x packages
  3. baseurl=http://packages.elastic.co/kibana/4.4/centos
  4. gpgcheck=1
  5. gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
  6. enabled=1

저장 및 종료.

다음 명령으로 Kibana를 설치합니다.

  1. sudo yum -y install kibana

편집을 위해 Kibana 구성 파일을 엽니다.

  1. sudo vi /opt/kibana/config/kibana.yml

Kibana 구성 파일에서 server.host를 지정하는 줄을 찾아 IP 주소(기본적으로 "0.0.0.0\)를 "localhost\로 바꿉니다.

server.host: "localhost"

저장 및 종료. 이 설정은 Kibana가 로컬 호스트에서만 액세스할 수 있도록 합니다. 외부 액세스를 허용하기 위해 동일한 서버에 Nginx 리버스 프록시를 설치하므로 괜찮습니다.

이제 Kibana 서비스를 시작하고 활성화합니다.

  1. sudo systemctl start kibana
  2. sudo chkconfig kibana on

Kibana 웹 인터페이스를 사용하려면 역방향 프록시를 설정해야 합니다. Nginx로 지금 해봅시다.

Nginx 설치

localhost에서 수신 대기하도록 Kibana를 구성했기 때문에 역방향 프록시를 설정하여 외부 액세스를 허용해야 합니다. 이를 위해 Nginx를 사용합니다.

참고: 사용하려는 Nginx 인스턴스가 이미 있는 경우 대신 사용하십시오. Nginx 서버에서 연결할 수 있도록 Kibana를 구성해야 합니다(아마도 /opt/kibana/config/kibana.yml에서 host 값을 변경하고 싶을 것입니다. Kibana 서버의 사설 IP 주소로). 또한 SSL/TLS를 활성화하는 것이 좋습니다.

yum에 EPEL 저장소를 추가합니다.

  1. sudo yum -y install epel-release

이제 yum을 사용하여 Nginx 및 httpd-tools를 설치합니다.

  1. sudo yum -y install nginx httpd-tools

htpasswd를 사용하여 Kibana 웹 인터페이스에 액세스할 수 있는 "kibanaadmin”(다른 이름을 사용해야 함)이라는 관리 사용자를 만듭니다.

  1. sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

프롬프트에 암호를 입력합니다. Kibana 웹 인터페이스에 액세스하는 데 필요하므로 이 로그인을 기억하십시오.

이제 원하는 편집기에서 Nginx 구성 파일을 엽니다. 우리는 vi를 사용할 것입니다:

  1. sudo vi /etc/nginx/nginx.conf

파일의 마지막 구성 블록인 기본 서버 블록(server {로 시작)을 찾아 삭제합니다. 완료되면 파일의 마지막 두 줄이 다음과 같아야 합니다.

    include /etc/nginx/conf.d/*.conf;
}

저장 및 종료.

이제 새 파일에 Nginx 서버 블록을 생성합니다.

  1. sudo vi /etc/nginx/conf.d/kibana.conf

다음 코드 블록을 파일에 붙여넣습니다. 서버 이름과 일치하도록 server_name을 업데이트해야 합니다.

  1. server {
  2. listen 80;
  3. server_name example.com;
  4. auth_basic "Restricted Access";
  5. auth_basic_user_file /etc/nginx/htpasswd.users;
  6. location / {
  7. proxy_pass http://localhost:5601;
  8. proxy_http_version 1.1;
  9. proxy_set_header Upgrade $http_upgrade;
  10. proxy_set_header Connection 'upgrade';
  11. proxy_set_header Host $host;
  12. proxy_cache_bypass $http_upgrade;
  13. }
  14. }

저장 및 종료. 이렇게 하면 Nginx가 서버의 HTTP 트래픽을 localhost:5601에서 수신 대기 중인 Kibana 애플리케이션으로 보내도록 구성됩니다. 또한 Nginx는 앞에서 만든 htpasswd.users 파일을 사용하고 기본 인증을 요구합니다.

이제 Nginx를 시작하고 활성화하여 변경 사항을 적용합니다.

  1. sudo systemctl start nginx
  2. sudo systemctl enable nginx

참고: 이 자습서에서는 SELinux가 비활성화되어 있다고 가정합니다. 그렇지 않은 경우 Kibana가 제대로 작동하려면 다음 명령을 실행해야 할 수 있습니다. sudo setsebool -P httpd_can_network_connect 1

Kibana는 이제 FQDN 또는 ELK 서버의 공용 IP 주소(예: http://elk_server_public_ip/)를 통해 액세스할 수 있습니다. 웹 브라우저에서 여기로 이동하면 "kibanaadmin\ 자격 증명을 입력한 후 인덱스 패턴을 구성하라는 Kibana 시작 페이지가 표시됩니다. 나중에 다른 모든 구성 요소를 설치한 후 다시 살펴보겠습니다. .

로그스태시 설치

Logstash 패키지는 Elasticsearch와 동일한 GPG 키를 공유하며 이미 해당 공개 키를 설치했으므로 Logstash용 새 Yum 리포지토리 파일을 생성하고 편집해 보겠습니다.

  1. sudo vi /etc/yum.repos.d/logstash.repo

다음 리포지토리 구성을 추가합니다.

  1. [logstash-2.2]
  2. name=logstash repository for 2.2 packages
  3. baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
  4. gpgcheck=1
  5. gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
  6. enabled=1

저장 및 종료.

다음 명령으로 Logstash를 설치합니다.

  1. sudo yum -y install logstash

Logstash가 설치되었지만 아직 구성되지 않았습니다.

SSL 인증서 생성

Filebeat를 사용하여 클라이언트 서버에서 ELK 서버로 로그를 전달할 예정이므로 SSL 인증서와 키 쌍을 생성해야 합니다. 인증서는 Filebeat에서 ELK 서버의 ID를 확인하는 데 사용됩니다. 다음 명령을 사용하여 인증서와 개인 키를 저장할 디렉터리를 만듭니다.

이제 SSL 인증서를 생성하기 위한 두 가지 옵션이 있습니다. 클라이언트 서버가 ELK 서버의 IP 주소를 확인할 수 있도록 하는 DNS 설정이 있는 경우 옵션 2를 사용하십시오. 그렇지 않으면 옵션 1을 사용하면 IP 주소를 사용할 수 있습니다.

옵션 1: IP 주소

ELK 서버의 IP 주소를 확인하기 위해 로그를 수집할 서버를 허용하는 DNS 설정이 없는 경우 ELK 서버의 사설 IP 주소를 subjectAltName에 추가해야 합니다. (SAN) 생성하려는 SSL 인증서의 필드입니다. 이렇게 하려면 OpenSSL 구성 파일을 엽니다.

  1. sudo vi /etc/pki/tls/openssl.cnf

파일에서 [ v3_ca ] 섹션을 찾고 그 아래에 다음 줄을 추가합니다(ELK 서버의 사설 IP 주소로 대체).

  1. subjectAltName = IP: ELK_server_private_ip

저장 및 종료.

이제 다음 명령을 사용하여 적절한 위치(/etc/pki/tls/)에서 SSL 인증서와 개인 키를 생성합니다.

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

logstash-forwarder.crt 파일은 로그를 Logstash로 보낼 모든 서버에 복사되지만 나중에 수행할 것입니다. Logstash 구성을 완료하겠습니다. 이 옵션을 선택한 경우 옵션 2를 건너뛰고 Logstash 구성으로 이동합니다.

옵션 2: FQDN(DNS)

사설 네트워킹에 DNS 설정이 있는 경우 ELK 서버의 사설 IP 주소가 포함된 A 레코드를 만들어야 합니다. 이 도메인 이름은 다음 명령에서 SSL 인증서를 생성하는 데 사용됩니다. 또는 서버의 공용 IP 주소를 가리키는 레코드를 사용할 수 있습니다. 서버(로그를 수집할 서버)가 도메인 이름을 ELK 서버로 확인할 수 있는지 확인하십시오.

이제 다음 명령을 사용하여 적절한 위치(/etc/pki/tls/…)에서 SSL 인증서와 개인 키를 생성합니다(ELK 서버의 FQDN으로 대체).

  1. cd /etc/pki/tls
  2. sudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

logstash-forwarder.crt 파일은 로그를 Logstash로 보낼 모든 서버에 복사되지만 나중에 수행할 것입니다. Logstash 구성을 완료하겠습니다.

Logstash 구성

Logstash 구성 파일은 JSON 형식이며 /etc/logstash/conf.d에 있습니다. 구성은 입력, 필터 및 출력의 세 섹션으로 구성됩니다.

02-beats-input.conf라는 구성 파일을 만들고 "filebeat\ 입력을 설정해 보겠습니다.

  1. sudo vi /etc/logstash/conf.d/02-beats-input.conf

다음 입력 구성을 삽입합니다.

  1. input {
  2. beats {
  3. port => 5044
  4. ssl => true
  5. ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
  6. ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  7. }
  8. }

저장하고 종료합니다. 이것은 tcp 포트 5044에서 수신할 beats 입력을 지정하고 이전에 생성한 SSL 인증서와 개인 키를 사용합니다.

이제 syslog 메시지에 대한 필터를 추가할 10-syslog-filter.conf라는 구성 파일을 생성해 보겠습니다.

  1. sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

다음 syslog 필터 구성을 삽입합니다.

  1. filter {
  2. if [type] == "syslog" {
  3. grok {
  4. match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
  5. add_field => [ "received_at", "%{@timestamp}" ]
  6. add_field => [ "received_from", "%{host}" ]
  7. }
  8. syslog_pri { }
  9. date {
  10. match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
  11. }
  12. }
  13. }

저장하고 종료합니다. 이 필터는 (Filebeat에 의해) "syslog\ 유형으로 레이블이 지정된 로그를 찾고 grok를 사용하여 들어오는 syslog 로그를 구문 분석하여 구조화되고 쿼리 가능하도록 만듭니다.

마지막으로 30-elasticsearch-output.conf라는 구성 파일을 생성합니다.

  1. sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

다음 출력 구성을 삽입합니다.

  1. output {
  2. elasticsearch {
  3. hosts => ["localhost:9200"]
  4. sniffing => true
  5. manage_template => false
  6. index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
  7. document_type => "%{[@metadata][type]}"
  8. }
  9. }

저장 및 종료. 이 출력은 기본적으로 localhost:9200에서 실행 중인 Elasticsearch의 비트 데이터를 사용된 비트의 이름을 딴 인덱스(여기서는 filebeat)에 저장하도록 Logstash를 구성합니다.

Filebeat 입력을 사용하는 다른 응용 프로그램에 대한 필터를 추가하려면 파일 이름을 지정하여 입력 구성과 출력 구성 사이(즉, 02-와 30- 사이)에서 정렬되도록 하십시오.

다음 명령을 사용하여 Logstash 구성을 테스트합니다.

  1. sudo service logstash configtest

구문 오류가 없으면 구성 확인이 표시되어야 합니다. 그렇지 않으면 오류 출력을 읽고 Logstash 구성에 어떤 문제가 있는지 확인하십시오.

Logstash를 다시 시작하고 활성화하여 구성 변경 사항을 적용합니다.

  1. sudo systemctl restart logstash
  2. sudo chkconfig logstash on

다음으로 샘플 Kibana 대시보드를 로드합니다.

Kibana 대시보드 로드

Elastic은 Kibana를 시작하는 데 도움이 되는 몇 가지 샘플 Kibana 대시보드와 Beats 인덱스 패턴을 제공합니다. 이 자습서에서는 대시보드를 사용하지 않지만 대시보드에 포함된 Filebeat 인덱스 패턴을 사용할 수 있도록 대시보드를 로드합니다.

먼저 샘플 대시보드 아카이브를 홈 디렉터리에 다운로드합니다.

  1. cd ~
  2. curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

다음 명령을 사용하여 unzip 패키지를 설치합니다.

  1. sudo yum -y install unzip

다음으로 아카이브의 내용을 추출합니다.

  1. unzip beats-dashboards-*.zip

그리고 다음 명령을 사용하여 샘플 대시보드, 시각화 및 Beats 인덱스 패턴을 Elasticsearch에 로드합니다.

  1. cd beats-dashboards-*
  2. ./load.sh

방금 로드한 인덱스 패턴은 다음과 같습니다.

  • [패킷비트-]YYYY.MM.DD
  • [topbeat-]YYYY.MM.DD
  • [filebeat-]YYYY.MM.DD
  • [winlogbeat-]YYYY.MM.DD

Kibana를 사용하기 시작하면 Filebeat 인덱스 패턴을 기본값으로 선택합니다.

Elasticsearch에서 Filebeat 인덱스 템플릿 로드

Filebeat를 사용하여 Elasticsearch에 로그를 전달할 계획이므로 Filebeat 인덱스 템플릿을 로드해야 합니다. 인덱스 템플릿은 들어오는 Filebeat 필드를 지능적인 방식으로 분석하도록 Elasticsearch를 구성합니다.

먼저 Filebeat 색인 템플릿을 홈 디렉터리에 다운로드합니다.

  1. cd ~
  2. curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

그런 다음 다음 명령을 사용하여 템플릿을 로드합니다.

  1. curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

템플릿이 제대로 로드되면 다음과 같은 메시지가 표시됩니다.

Output:
{ "acknowledged" : true }

이제 ELK 서버가 Filebeat 데이터를 수신할 준비가 되었으므로 각 클라이언트 서버에서 Filebeat 설정으로 이동하겠습니다.

Filebeat 설정(클라이언트 서버 추가)

ELK 서버에 로그를 보내려는 각 CentOS 또는 RHEL 7 서버에 대해 다음 단계를 수행하십시오. Debian 기반 Linux 배포판(예: Ubuntu, Debian 등)에 Filebeat를 설치하는 방법에 대한 지침은 이 자습서의 Ubuntu 변형에서 Filebeat 설정(클라이언트 서버 추가) 섹션을 참조하세요.

SSL 인증서 복사

ELK 서버에서 전제 조건 자습서에서 생성한 SSL 인증서를 클라이언트 서버에 복사합니다(클라이언트 서버의 주소와 자신의 로그인으로 대체).

  1. scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

로그인 자격 증명을 제공한 후 인증서 복사가 성공했는지 확인하십시오. 클라이언트 서버와 ELK 서버 간의 통신에 필요합니다.

이제 클라이언트 서버에서 ELK 서버의 SSL 인증서를 적절한 위치(/etc/pki/tls/certs)에 복사합니다.

  1. sudo mkdir -p /etc/pki/tls/certs
  2. sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

이제 Topbeat 패키지를 설치하겠습니다.

Filebeat 패키지 설치

클라이언트 서버에서 다음 명령을 실행하여 Elasticsearch 공개 GPG 키를 rpm으로 가져옵니다.

  1. sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

Filebeat용 새 yum 리포지토리 파일을 만들고 편집합니다.

  1. sudo vi /etc/yum.repos.d/elastic-beats.repo

다음 리포지토리 구성을 추가합니다.

  1. [beats]
  2. name=Elastic Beats Repository
  3. baseurl=https://packages.elastic.co/beats/yum/el/$basearch
  4. enabled=1
  5. gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
  6. gpgcheck=1

저장 및 종료.

다음 명령으로 Filebeat를 설치합니다.

  1. sudo yum -y install filebeat

Filebeat가 설치되었지만 아직 구성되지 않았습니다.

Filebeat 구성

이제 ELK 서버의 Logstash에 연결하도록 Filebeat를 구성합니다. 이 섹션에서는 Filebeat와 함께 제공되는 예제 구성 파일을 수정하는 과정을 안내합니다. 단계를 완료하면 다음과 같은 파일이 있어야 합니다.

클라이언트 서버에서 Filebeat 구성 파일을 만들고 편집합니다.

  1. sudo vi /etc/filebeat/filebeat.yml

참고: Filebeat의 구성 파일은 YAML 형식이므로 들여쓰기가 매우 중요합니다! 이 지침에 표시된 것과 동일한 수의 공백을 사용해야 합니다.

파일 상단 근처에 prospectors 섹션이 표시되며 여기에서 배송해야 하는 로그 파일과 처리 방법을 지정하는 Prospector를 정의할 수 있습니다. 각 탐사자는 - 문자로 표시됩니다.

securemessages 로그를 Logstash로 보내도록 기존 Prospector를 수정할 것입니다. paths에서 - /var/log/*.log 파일을 주석 처리합니다. 이렇게 하면 Filebeat가 해당 디렉터리의 모든 .log를 Logstash로 보내는 것을 방지할 수 있습니다. 그런 다음 syslogauth.log에 대한 새 항목을 추가합니다. 완료되면 다음과 같이 표시됩니다.

...
      paths:
        - /var/log/secure
        - /var/log/messages
#        - /var/log/*.log
...

그런 다음 document_type:을 지정하는 줄을 찾아 주석 처리를 제거하고 해당 값을 "syslog\로 변경합니다. 수정 후 다음과 같이 표시됩니다.

...
      document_type: syslog
...

이는 이 Prospector의 로그가 syslog 유형(Logstash 필터가 찾고 있는 유형)임을 지정합니다.

다른 파일을 ELK 서버로 보내거나 Filebeat가 로그를 처리하는 방식을 변경하려는 경우 Prospector 항목을 자유롭게 수정하거나 추가하십시오.

다음으로, output 섹션에서 elasticsearch:라는 줄을 찾습니다. 이 줄은 Elasticsearch 출력 섹션(우리가 사용하지 않을 것임)을 나타냅니다. 전체 Elasticsearch 출력 섹션을 삭제하거나 주석 처리합니다(logstash:라고 표시된 행까지).

#logstash: 줄로 표시된 주석 처리된 Logstash 출력 섹션을 찾아 앞의 #를 삭제하여 주석 처리를 해제합니다. 이 섹션에서 hosts: [\localhost:5044\] 행의 주석 처리를 제거하십시오. localhost를 ELK 서버의 개인 IP 주소(또는 해당 옵션을 선택한 경우 호스트 이름)로 변경합니다.

  ### Logstash as output
  logstash:
    # The Logstash hosts
    hosts: ["ELK_server_private_IP:5044"]

이렇게 하면 Filebeat가 포트 5044(이전에 입력을 지정한 포트)에서 ELK 서버의 Logstash에 연결하도록 구성됩니다.

hosts 항목 바로 아래에 동일한 들여쓰기로 다음 줄을 추가합니다.

    bulk_max_size: 1024

다음으로 tls 섹션을 찾아 주석 처리를 해제합니다. 그런 다음 certificate_authorities를 지정하는 줄의 주석을 해제하고 해당 값을 [\/etc/pki/tls/certs/logstash-forwarder.crt\]로 변경합니다. 다음과 같아야 합니다.

...
    tls:
      # List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

이렇게 하면 ELK 서버에서 생성한 SSL 인증서를 사용하도록 Filebeat가 구성됩니다.

저장하고 종료합니다.

이제 Filebeat를 시작하고 활성화하여 변경 사항을 적용합니다.

  1. sudo systemctl start filebeat
  2. sudo systemctl enable filebeat

다시 말하지만, Filebeat 구성이 올바른지 확실하지 않은 경우 이 Filebeat 구성 예제와 비교하십시오.

이제 Filebeat가 syslog messagessecure 파일을 ELK 서버로 전송합니다! 로그를 수집하려는 다른 모든 서버에 대해 이 섹션을 반복합니다.

Filebeat 설치 테스트

ELK 스택이 제대로 설정된 경우 Filebeat(클라이언트 서버에 있음)는 로그를 ELK 서버의 Logstash로 전달해야 합니다. Logstash는 Filebeat 데이터를 날짜 스탬프 인덱스 filebeat-YYYY.MM.DD의 Elasticsearch로 로드해야 합니다.

ELK 서버에서 다음 명령으로 Filebeat 인덱스를 쿼리하여 Elasticsearch가 실제로 데이터를 수신하는지 확인하십시오.

  1. curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

다음과 같은 출력이 표시됩니다.

Sample Output:
... { "_index" : "filebeat-2016.01.29", "_type" : "log", "_id" : "AVKO98yuaHvsHQLa53HE", "_score" : 1.0, "_source":{"message":"Feb 3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"} } ...

출력에 총 조회수가 0으로 표시되면 Elasticsearch가 검색한 인덱스 아래에 어떤 로그도 로드하지 않는 것이므로 오류 설정을 검토해야 합니다. 예상 출력을 받은 경우 다음 단계를 계속합니다.

키바나에 연결

로그를 수집하려는 모든 서버에서 Filebeat 설정을 마쳤으면 이전에 설치한 웹 인터페이스인 Kibana를 살펴보겠습니다.

웹 브라우저에서 ELK 서버의 FQDN 또는 공용 IP 주소로 이동합니다. "kibanaadmin” 자격 증명을 입력하면 기본 인덱스 패턴을 구성하라는 메시지가 표시되는 페이지가 표시됩니다.

계속해서 인덱스 패턴 메뉴(왼쪽)에서 [filebeat]-YYY.MM.DD를 선택한 다음 별(기본 인덱스로 설정) 버튼을 클릭하여 Filebeat 인덱스를 기본값으로 설정합니다.

이제 상단 탐색 모음에서 검색 링크를 클릭하십시오. 기본적으로 지난 15분 동안의 모든 로그 데이터가 표시됩니다. 아래의 로그 메시지와 함께 로그 이벤트가 포함된 히스토그램이 표시되어야 합니다.

지금 당장은 클라이언트 서버에서만 syslog를 수집하기 때문에 거기에 많은 것이 없을 것입니다. 여기에서 로그를 검색하고 찾아볼 수 있습니다. 대시보드를 사용자 지정할 수도 있습니다.

다음을 시도하십시오.

  • "루트\를 검색하여 서버에 루트로 로그인하려는 사람이 있는지 확인
  • 특정 호스트 이름 검색(host: \hostname\ 검색)
  • 히스토그램 또는 위 메뉴에서 영역을 선택하여 시간 프레임 변경
  • 히스토그램 아래의 메시지를 클릭하여 데이터가 어떻게 필터링되고 있는지 확인

Kibana에는 그래프 및 필터링과 같은 다른 많은 기능이 있으므로 자유롭게 살펴보십시오!

결론

이제 syslog가 Elasticsearch 및 Logstash를 통해 중앙 집중화되고 Kibana로 이를 시각화할 수 있으므로 모든 중요한 로그를 중앙 집중화하여 시작해야 합니다. 거의 모든 유형의 로그 또는 인덱싱된 데이터를 Logstash로 보낼 수 있지만 데이터가 grok로 구문 분석되고 구조화되면 훨씬 더 유용해집니다.

새로운 ELK 스택을 개선하려면 Logstash로 다른 로그를 수집 및 필터링하고 ELK 스택과 함께 Topbeat를 사용하여 시스템 메트릭을 수집해야 합니다. 이러한 모든 항목은 이 시리즈의 다른 자습서에서 다룹니다.

행운을 빌어요!