웹사이트 검색

Logstash 및 Kibana를 사용하여 Ubuntu 14.04에서 로그를 중앙 집중화하는 방법


참고: 이 튜토리얼은 최신 버전과 호환되지 않는 이전 버전의 ELK 스택용입니다. 이 튜토리얼의 최신 버전은 Ubuntu 14.04에 Elasticsearch, Logstash 및 Kibana(ELK 스택)를 설치하는 방법에서 사용할 수 있습니다.

소개

이 자습서에서는 Logstash 1.4.2 및 Kibana 3의 설치와 중앙 위치에서 시스템의 syslog를 수집하고 시각화하도록 구성하는 방법을 살펴보겠습니다. Logstash는 향후 사용을 위해 로그를 수집, 구문 분석 및 저장하기 위한 오픈 소스 도구입니다. Kibana 3는 Logstash가 인덱싱한 로그를 검색하고 보는 데 사용할 수 있는 웹 인터페이스입니다. 이 두 도구는 모두 Elasticsearch를 기반으로 합니다. Elasticsearch, Logstash 및 Kibana를 함께 사용하면 ELK 스택이라고 합니다.

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

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

우리의 목표

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

Logstash/Kibana 설정에는 네 가지 주요 구성 요소가 있습니다.

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

Logstash 서버라고 하는 단일 서버에 처음 세 가지 구성 요소를 설치합니다. Logstash Forwarder는 로그를 수집하려는 모든 서버에 설치되며, 이를 집합적으로 서버라고 합니다.

전제 조건

이 자습서를 완료하려면 Ubuntu 14.04 VPS에 대한 루트 액세스 권한이 필요합니다. 설정 지침은 여기(3단계 및 4단계)에서 찾을 수 있습니다. Ubuntu 14.04를 사용한 초기 서버 설정.

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

  • OS: 우분투 14.04
  • 램: 4GB
  • CPU: 2

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

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

자바 7 설치

Elasticsearch와 Logstash에는 Java 7이 필요하므로 지금 설치하겠습니다. Elasticsearch에서 권장하는 Oracle Java 7을 설치하겠습니다. 그러나 해당 경로로 이동하기로 결정한 경우 OpenJDK와 잘 작동합니다.

apt에 Oracle Java PPA를 추가합니다.

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

적절한 패키지 데이터베이스를 업데이트하십시오.

sudo apt-get update

다음 명령을 사용하여 안정적인 최신 버전의 Oracle Java 7을 설치하고 표시되는 라이선스 계약에 동의합니다.

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

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

Elasticsearch 설치

참고: Logstash 1.4.2는 Elasticsearch 1.1.1을 권장합니다.

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

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

Elasticsearch 소스 목록을 생성합니다.

echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.list

적절한 패키지 데이터베이스를 업데이트하십시오.

sudo apt-get update

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

sudo apt-get -y install elasticsearch=1.1.1

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

sudo vi /etc/elasticsearch/elasticsearch.yml

파일의 어딘가에 다음 줄을 추가하여 동적 스크립트를 비활성화합니다.

script.disable_dynamic: true

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

network.host: localhost

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

이제 Elasticsearch를 시작합니다.

sudo service elasticsearch restart

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

sudo update-rc.d elasticsearch defaults 95 10

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

키바나 설치

참고: Logstash 1.4.2는 Kibana 3.0.1을 권장합니다.

다음 명령을 사용하여 Kibana를 홈 디렉터리에 다운로드합니다.

cd ~; wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

tar로 Kibana 아카이브를 추출합니다.

tar xvf kibana-3.0.1.tar.gz

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

sudo vi ~/kibana-3.0.1/config.js

Kibana 구성 파일에서 elasticsearch를 지정하는 줄을 찾아 포트 번호(기본적으로 9200)를 80으로 바꿉니다.

   elasticsearch: "http://"+window.location.hostname+":80",

이는 포트 80(예: http://logstash_server_public_ip/)에서 Kibana에 액세스할 계획이기 때문에 필요합니다.

Nginx를 사용하여 Kibana 설치를 제공할 것이므로 파일을 적절한 위치로 이동하겠습니다. 다음 명령을 사용하여 디렉터리를 만듭니다.

sudo mkdir -p /var/www/kibana3

이제 Kibana 파일을 새로 만든 디렉터리에 복사합니다.

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/

Kibana 웹 인터페이스를 사용하려면 먼저 Nginx를 설치해야 합니다. 지금 해보자.

Nginx 설치

apt를 사용하여 Nginx를 설치합니다.

sudo apt-get install nginx

Kibana가 사용자와 Elasticsearch를 연결하는 방식 때문에(사용자가 Elasticsearch에 직접 액세스할 수 있어야 함) 포트 80 요청을 포트 9200(Elasticsearch가 기본적으로 수신 대기하는 포트)에 프록시하도록 Nginx를 구성해야 합니다. 다행히 Kibana는 이 대부분을 설정하는 샘플 Nginx 구성을 제공합니다.

Kibana의 github 저장소에서 홈 디렉터리로 샘플 Nginx 구성을 다운로드합니다.

cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

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

vi nginx.conf

server_name의 값을 찾아 FQDN(또는 도메인 이름을 사용하지 않는 경우 localhost)으로 변경하고 root를 Kibana를 설치한 위치로 변경합니다. 다음 항목:

  server_name FQDN;
  root /var/www/kibana3;

저장 및 종료. 이제 다음 명령을 사용하여 Nginx 기본 서버 블록에 복사합니다.

sudo cp nginx.conf /etc/nginx/sites-available/default

이제 htpasswd를 사용하여 사용자 이름과 암호 쌍을 생성할 수 있도록 apache2-utils를 설치합니다.

sudo apt-get install apache2-utils

그런 다음 대시보드 저장 및 공유를 위해 Kibana에서 사용할 로그인을 생성합니다(자신의 사용자 이름으로 대체).

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

그런 다음 암호를 입력하고 확인하십시오. 방금 만든 htpasswd 파일은 최근에 구성한 Nginx 구성에서 참조됩니다.

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

sudo service nginx restart

Kibana는 이제 FQDN 또는 Logstash 서버의 공용 IP 주소(예: http://logstash_server_public_ip/)를 통해 액세스할 수 있습니다. 웹 브라우저에서 이 페이지로 이동하면 대시보드를 볼 수 있는 Kibana 시작 페이지가 표시되지만 Logstash가 아직 설정되지 않았기 때문에 볼 수 있는 로그가 없습니다. 지금 해보자.

로그스태시 설치

Logstash 패키지는 Elasticsearch와 동일한 리포지토리에서 사용할 수 있으며 이미 해당 공개 키를 설치했으므로 Logstash 소스 목록을 생성해 보겠습니다.

echo 'deb http://packages.elasticsearch.org/logstash/1.4/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

적절한 패키지 데이터베이스를 업데이트하십시오.

sudo apt-get update

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

sudo apt-get install logstash=1.4.2-1-2c0f5a1

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

SSL 인증서 생성

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

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

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

옵션 1: IP 주소

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

sudo vi /etc/ssl/openssl.cnf

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

subjectAltName = IP: logstash_server_private_ip

저장 및 종료.

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

cd /etc/pki/tls
sudo openssl req -config /etc/ssl/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 설정이 있는 경우 Logstash 서버의 사설 IP 주소가 포함된 A 레코드를 생성해야 합니다. 이 도메인 이름은 다음 명령에서 SSL 인증서를 생성하는 데 사용됩니다. 또는 서버의 공용 IP 주소를 가리키는 레코드를 사용할 수 있습니다. 서버(로그를 수집할 서버)가 도메인 이름을 Logstash 서버로 확인할 수 있는지 확인하십시오.

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

cd /etc/pki/tls; sudo openssl req -subj '/CN=logstash_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에 있습니다. 구성은 입력, 필터 및 출력의 세 섹션으로 구성됩니다.

01-lumberjack-input.conf라는 구성 파일을 생성하고 "lumberjack\ 입력(Logstash Forwarder가 사용하는 프로토콜)을 설정해 보겠습니다.

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

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

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

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

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

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

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

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}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

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

마지막으로 30-lumberjack-output.conf라는 구성 파일을 만듭니다.

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

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

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

저장 및 종료. 이 출력은 기본적으로 Elasticsearch에 로그를 저장하도록 Logstash를 구성합니다.

이 구성을 사용하면 Logstash는 필터와 일치하지 않는 로그도 허용하지만 데이터는 구조화되지 않습니다(예: 필터링되지 않은 Nginx 또는 Apache 로그는 HTTP 응답 코드, 소스 IP 주소, 제공된 파일로 메시지를 분류하는 대신 일반 메시지로 표시됨). , 등.).

Logstash Forwarder 입력을 사용하는 다른 애플리케이션에 대한 필터를 추가하려는 경우 입력 구성과 출력 구성 간에 정렬되도록 파일 이름을 지정해야 합니다(예: 01에서 30 사이).

구성 변경 사항을 적용하려면 Logstash를 다시 시작하십시오.

sudo service logstash restart

이제 Logstash 서버가 준비되었으므로 Logstash Forwarder 설정으로 이동하겠습니다.

Logstash 전달자 설정

참고: 로그를 Logstash 서버로 보내려는 각 서버에 대해 다음 단계를 수행하십시오. Red Hat 기반 Linux 배포판(예: RHEL, CentOS 등)에 Logstash Forwarder를 설치하는 방법에 대한 지침은 이 튜토리얼의 CentOS 변형에서 Logstash Forwarder 빌드 및 패키지 섹션을 참조하세요.

SSL 인증서 및 Logstash 전달자 패키지 복사

Logstash 서버에서 SSL 인증서를 서버에 복사합니다(자신의 로그인으로 대체).

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

Logstash 전달자 패키지 설치

서버에서 Logstash Forwarder 소스 목록을 생성합니다.

echo 'deb http://packages.elasticsearch.org/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

또한 다음 명령으로 설치할 수 있는 Elasticsearch와 동일한 GPG 키를 사용합니다.

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

그런 다음 Logstash Forwarder 패키지를 설치합니다.

sudo apt-get update
sudo apt-get install logstash-forwarder

참고: 32비트 Ubuntu 릴리스를 사용 중이고 "Unable to locate package logstash-forwarder” 오류가 발생하는 경우 Logstash Forwarder를 수동으로 설치해야 합니다.

wget https://assets.linux-console.net/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb

다음으로 부팅 시 시작되도록 Logstash Forwarder 초기화 스크립트를 설치하려고 합니다.

cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

이제 SSL 인증서를 적절한 위치(/etc/pki/tls/certs)에 복사합니다.

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

Logstash 전달자 구성

서버에서 JSON 형식의 Logstash Forwarder 구성 파일을 만들고 편집합니다.

sudo vi /etc/logstash-forwarder

이제 logstash_server_private_IP를 Logstash 서버의 사설 IP 주소로 대체하여 파일에 다음 줄을 추가합니다.

{
  "network": {
    "servers": [ "logstash_server_private_IP:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }
   ]
}

저장하고 종료합니다. 이는 Logstash Forwarder가 포트 5000(이전에 입력을 지정한 포트)에서 Logstash 서버에 연결하도록 구성하고 이전에 생성한 SSL 인증서를 사용합니다. paths 섹션은 보낼 로그 파일을 지정하고(여기서는 syslog 및 auth.log를 지정함) type 섹션은 이러한 로그가 \syslog*\ 유형임을 지정합니다. 필터가 찾고 있는 유형입니다).

포트 5000의 Logstash에 다른 로그 파일에 대한 Logstash Forwarder를 구성하기 위해 더 많은 파일/유형을 추가하는 위치입니다.

이제 Logstash Forwarder를 다시 시작하여 변경 사항을 적용합니다.

sudo service logstash-forwarder restart

이제 Logstash Forwarder가 syslog 및 auth.log를 Logstash 서버로 전송합니다! 로그를 수집하려는 다른 모든 서버에 대해 이 프로세스를 반복합니다.

키바나에 연결

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

웹 브라우저에서 Logstash 서버의 FQDN 또는 공용 IP 주소로 이동합니다. Kibana 시작 페이지가 표시되어야 합니다.

미리 만들어진 대시보드로 이동하려면 Logstash 대시보드를 클릭하세요. 아래에 로그 메시지와 함께 로그 이벤트가 포함된 히스토그램이 표시되어야 합니다(이벤트나 메시지가 표시되지 않으면 4개의 Logstash 구성 요소 중 하나가 제대로 구성되지 않은 것입니다).

여기에서 로그를 검색하고 찾아볼 수 있습니다. 대시보드를 사용자 지정할 수도 있습니다. 다음은 Kibana 인스턴스의 모습을 보여주는 샘플입니다.

다음을 시도하십시오.

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

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

결론

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

Kibana 대시보드는 서버에 액세스할 수 있는 모든 사람이 액세스할 수 있으므로 htaccess와 같은 것으로 보호하는 것이 좋습니다.