웹사이트 검색

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


Linux에서 시스템 로그 검사 및 분석을 담당했거나 과거에 담당했던 사람이라면 여러 서비스를 동시에 모니터링하는 경우 해당 작업이 얼마나 악몽이 될 수 있는지 알 것입니다.

과거에는 해당 작업을 대부분 수동으로 수행해야 했으며 각 로그 유형이 별도로 처리되었습니다. 다행스럽게도 클라이언트의 Filebeat와 함께 서버측의 Elasticsearch, Logstash, Kibana의 조합 한때 어려웠던 일이 오늘은 공원을 산책하는 것처럼 보이게 만듭니다.

처음 세 가지 구성 요소는 ELK 스택을 형성하며, 주요 목적은 동시에 여러 서버에서 로그를 수집하는 것입니다(중앙 집중식 로깅이라고도 함).

추천 자료: Linux용 좋은 오픈 소스 로그 모니터링 및 관리 도구 4가지

내장된 Java 기반 웹 인터페이스를 사용하면 로그를 한 눈에 빠르게 검사하여 보다 쉽게 비교하고 문제를 해결할 수 있습니다. 이러한 클라이언트 로그는 로그 전달 에이전트라고 할 수 있는 Filebeat에 의해 중앙 서버로 전송됩니다.

이 모든 조각이 어떻게 결합되는지 살펴보겠습니다. 테스트 환경은 다음 머신으로 구성됩니다.

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

여기에 제공된 RAM 값은 엄격한 전제 조건이 아니지만 중앙 서버에서 ELK 스택을 성공적으로 구현하기 위해 권장되는 값입니다. 클라이언트의 RAM이 적다고 해서 별 차이는 없습니다.

서버에 ELK 스택 설치

먼저 ELK 스택을 서버에 설치하고 각 구성 요소의 기능에 대한 간략한 설명을 살펴보겠습니다.

  1. Elasticsearch는 클라이언트가 보낸 로그를 저장합니다.
  2. Logstash는 해당 로그를 처리합니다.
  3. Kibana는 로그를 검사하고 분석하는 데 도움이 되는 웹 인터페이스를 제공합니다.

중앙 서버에 다음 패키지를 설치합니다. 먼저 종속성인 Java JDK 버전 8(업데이트 102, 이 글을 쓰는 시점의 최신 버전)을 설치합니다. ELK 구성요소 중 하나입니다.

먼저 여기의 Java 다운로드 페이지에서 사용 가능한 최신 업데이트가 있는지 확인하는 것이 좋습니다.

yum update
cd /opt
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/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

설치가 성공적으로 완료되었는지 확인하는 시간입니다.

java -version

Elasticsearch, LogstashKibana의 최신 버전을 설치하려면 yum에 대한 저장소를 수동으로 생성해야 합니다. 다음과 같이:

Elasticsearch 리포지토리 활성화

1. Elasticsearch 공개 GPG 키를 rpm 패키지 관리자로 가져옵니다.

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

2. 저장소 구성 파일 elasticsearch.repo에 다음 줄을 삽입합니다.

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Elasticsearch 패키지를 설치합니다.

yum install elasticsearch

설치가 완료되면 Elasticsearch를 시작하고 활성화하라는 메시지가 표시됩니다.

4. 서비스를 시작하고 활성화합니다.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. 방화벽에서 TCP 포트 9200을 통한 트래픽을 허용합니다.

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. ElasticsearchHTTP를 통한 간단한 요청에 응답하는지 확인하세요.

curl -X GET http://localhost:9200

위 명령의 출력은 다음과 유사해야 합니다.

위 단계를 완료했는지 확인한 후 Logstash를 진행하세요. LogstashKibana는 모두 Elasticsearch GPG 키를 공유하므로 패키지를 설치하기 전에 키를 다시 가져올 필요가 없습니다.

권장 읽기: CentOS 7에서 시스템 로그 관리(구성, 회전 및 데이터베이스로 가져오기)

Logstash 저장소 활성화

7. 저장소 구성 파일 logstash.repo에 다음 줄을 삽입합니다.

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Logstash 패키지를 설치합니다.

yum install logstash

9. [ v3_ca ] 섹션 아래의 다음 줄에 ELK 서버의 IP 주소를 기반으로 SSL 인증서를 추가합니다. >/etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. 365일 동안 유효한 자체 서명 인증서를 생성합니다.

cd /etc/pki/tls
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

11. Logstash 입력, 출력 및 필터 파일을 구성합니다.

입력: /etc/logstash/conf.d/input.conf를 생성하고 다음 줄을 삽입합니다. 이는 Logstash가 클라이언트로부터 오는 비트를 처리하는 방법을 "학습"하는 데 필요합니다. 인증서 및 키의 경로가 이전 단계에서 설명한 대로 올바른 경로와 일치하는지 확인하세요.

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

출력(/etc/logstash/conf.d/output.conf) 파일:


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

필터(/etc/logstash/conf.d/filter.conf) 파일. 단순화를 위해 syslog 메시지를 기록하겠습니다.


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Logstash 구성 파일을 확인합니다.

service logstash configtest

13. Logstash를 시작하고 활성화합니다.

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Logstash가 클라이언트에서 로그를 가져올 수 있도록 방화벽을 구성합니다(TCP 포트 5044).

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Kibana 저장소 활성화

14. 저장소 구성 파일 kibana.repo에 다음 줄을 삽입합니다.

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Kibana 패키지를 설치합니다.

yum install kibana

16. Kibana를 시작하고 활성화합니다.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. 다른 컴퓨터에서 Kibana의 웹 인터페이스에 액세스할 수 있는지 확인하십시오(TCP 포트 5601에서 트래픽 허용).

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Kibana(http://192.168.0.29:5601)를 실행하여 웹 인터페이스에 액세스할 수 있는지 확인합니다.

클라이언트에 Filebeat를 설치하고 구성한 후 여기로 돌아오겠습니다.

권장 자료: Linux의 "Log.io " 도구를 사용하여 실시간으로 서버 로그 모니터링

클라이언트 서버에 Filebeat 설치

클라이언트 #1에 대해 이 작업을 수행하는 방법을 보여드리겠습니다(나중에 클라이언트 #2에 대해 반복하고 배포에 해당하는 경우 경로를 변경).

1. SSL 인증서를 서버에서 클라이언트로 복사합니다.

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Elasticsearch 공개 GPG 키를 rpm 패키지 관리자로 가져옵니다.

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

3. CentOSFilebeat(/etc/yum.repos.d/filebeat.repo)용 저장소를 만듭니다. > 기반 분포:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Debian 및 그 파생 제품에 Filebeat를 설치하기 위한 소스를 구성합니다.

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Filebeat 패키지를 설치합니다.

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Filebeat 시작 및 활성화:

systemctl start filebeat
systemctl enable filebeat

Filebeat 구성

여기서 주의할 점이 있습니다. Filebeat 구성은 엄격한 들여쓰기가 필요한 YAML 파일에 저장됩니다. 다음과 같이 /etc/filebeat/filebeat.yml을 편집할 때 주의하세요.

  1. 경로 아래에서 ELK 서버에 "전달"되어야 하는 로그 파일을 지정합니다.
  2. 발견자 아래:
input_type: log
document_type: syslog
  1. 출력에서:

    1. logstash로 시작하는 줄의 주석 처리를 제거하세요.
    2. Logstash가 호스트에서 수신 대기하는 ELK 서버 및 포트의 IP 주소를 나타냅니다.
    3. 인증서 경로가 위의 I단계(Logstash 섹션)에서 생성한 실제 파일을 가리키는지 확인하세요.

위의 단계는 다음 이미지에 설명되어 있습니다.

변경 사항을 저장한 후 클라이언트에서 Filebeat를 다시 시작하세요.

systemctl restart filebeat

클라이언트에서 위 단계를 완료한 후 계속 진행하세요.

Filebeat 테스트

클라이언트의 로그가 성공적으로 전송 및 수신되는지 확인하려면 ELK 서버에서 다음 명령을 실행하세요.

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

출력은 다음과 유사해야 합니다(/var/log/messages/var/log/secure의 메시지가 client1에서 어떻게 수신되는지 확인). 및 클라이언트2):

그렇지 않으면 Filebeat 구성 파일에 오류가 있는지 확인하세요.

journalctl -xe

Filebeat를 다시 시작하려고 시도하면 문제가 있는 줄을 알려줄 것입니다.

Kibana 테스트

로그가 클라이언트에 의해 전달되고 서버에서 성공적으로 수신되었는지 확인한 후. Kibana에서 가장 먼저 해야 할 일은 인덱스 패턴을 구성하고 이를 기본값으로 설정하는 것입니다.

관계형 데이터베이스 컨텍스트에서는 인덱스를 전체 데이터베이스로 설명할 수 있습니다. filebeat-*를 사용하겠습니다(또는 공식 문서에 설명된 대로 보다 정확한 검색 기준을 사용할 수 있습니다).

색인 이름 또는 패턴 필드filebeat-*를 입력한 다음 만들기를 클릭합니다.

나중에 보다 세분화된 검색 기준을 입력할 수 있다는 점에 유의하세요. 그런 다음 녹색 직사각형 안의 별을 클릭하여 기본 인덱스 패턴으로 구성합니다.

마지막으로 검색 메뉴에는 로그 시각화 보고서에 추가할 여러 필드가 있습니다. 마우스를 해당 항목 위에 놓고 추가를 클릭하세요.

결과는 위와 같이 화면 중앙 영역에 표시됩니다. Kibana에 익숙해지기 위해 자유롭게 실험해 보세요(로그 보고서에서 필드 추가 및 제거).

기본적으로 Kibana는 지난 15분 동안 처리된 기록을 표시하지만(오른쪽 상단 참조) 다른 기간을 선택하여 해당 동작을 변경할 수 있습니다.

요약

이 기사에서는 CentOS 7 및 Debian 8 시스템이라는 두 클라이언트에서 보낸 시스템 로그를 수집하기 위해 ELK 스택을 설정하는 방법을 설명했습니다.

이제 공식 Elasticsearch 문서를 참조하고 이 설정을 사용하여 로그를 보다 효율적으로 검사하고 분석하는 방법에 대한 자세한 내용을 찾아볼 수 있습니다.

궁금한 점이 있으면 주저하지 말고 문의하세요. 우리는 귀하의 의견을 기다리겠습니다.