Logstash 및 Kibana를 사용하여 CentOS 6에서 로그를 중앙 집중화하는 방법
상태: 더 이상 사용되지 않음
이 문서에서는 더 이상 지원되지 않는 CentOS 버전에 대해 설명합니다. 현재 CentOS 6을 실행하는 서버를 운영 중인 경우 지원되는 CentOS 버전으로 업그레이드하거나 마이그레이션하는 것이 좋습니다.
이유:
대신 참조:
다음 DigitalOcean 자습서 시리즈는 CentOS 7 서버에서 Logstash 및 Kibana를 사용하여 로깅을 중앙 집중화하는 방법을 설명하므로 즉시 관심을 가질 수 있습니다.
- CentOS 7에서 Logstash 및 Kibana를 사용한 중앙 집중식 로깅
소개
이 자습서에서는 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는 로그를 수집하려는 모든 서버에 설치되며, 이를 집합적으로 서버라고 합니다.
전제 조건
이 튜토리얼을 완료하려면 CentOS 6.5 VPS에 대한 루트 액세스 권한이 필요합니다. 설정 방법은 여기에서 찾을 수 있습니다(3단계 및 4단계): CentOS 6을 사용한 초기 서버 설정.
Logstash 서버에 필요한 CPU, RAM 및 스토리지의 양은 수집하려는 로그의 양에 따라 다릅니다. 이 튜토리얼에서는 Logstash 서버에 대해 다음 사양의 VPS를 사용합니다.
- OS: CentOS 6.5
- 램: 2GB
- CPU: 2
Logstash 서버 외에도 로그를 수집할 몇 가지 다른 서버가 필요합니다.
Logstash 서버 설정을 시작하겠습니다!
자바 7 설치
Elasticsearch와 Logstash에는 Java 7이 필요하므로 지금 설치하겠습니다. OpenJDK 7을 설치하겠습니다.
다음 명령을 사용하여 안정적인 최신 버전의 OpenJDK 7을 설치합니다.
sudo yum -y install java-1.7.0-openjdk
이제 Java 7이 설치되었으므로 ElasticSearch를 설치하겠습니다.
Elasticsearch 설치
참고: Logstash 1.4.2는 Elasticsearch 1.1.1을 권장합니다.
다음 명령을 실행하여 Elasticsearch 공개 GPG 키를 rpm으로 가져옵니다.
sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Elasticsearch용 새 yum 리포지토리 파일을 만들고 편집합니다.
sudo vi /etc/yum.repos.d/elasticsearch.repo
다음 리포지토리 구성을 추가합니다.
[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
저장 및 종료.
다음 명령으로 Elasticsearch 1.1.1을 설치합니다.
sudo yum -y install elasticsearch-1.1.1
이제 Elasticsearch가 설치되었습니다. 구성을 편집해 보겠습니다.
sudo vi /etc/elasticsearch/elasticsearch.yml
파일의 어딘가에 다음 줄을 추가하여 동적 스크립트를 비활성화합니다.
script.disable_dynamic: true
또한 Elasticsearch 인스턴스에 대한 외부 액세스를 제한하여 외부인이 HTTP API를 통해 데이터를 읽거나 Elasticseach 클러스터를 종료할 수 없도록 해야 합니다. network.host
를 지정하는 줄을 찾아 다음과 같이 주석 처리를 제거합니다.
network.host: localhost
그런 다음 discovery.zen.ping.multicast.enabled
항목을 찾아 다음과 같이 주석 처리를 제거하여 멀티캐스트를 비활성화합니다.
discovery.zen.ping.multicast.enabled: false
elasticsearch.yml
을 저장하고 종료합니다.
이제 Elasticsearch를 시작합니다.
sudo service elasticsearch restart
그런 다음 다음 명령을 실행하여 부팅 시 Elasticsearch를 시작합니다.
sudo /sbin/chkconfig --add elasticsearch
이제 Elasticsearch가 실행 중이므로 Kibana를 설치해 보겠습니다.
키바나 설치
참고: Logstash 1.4.2는 Kibana 3.0.1을 권장합니다.
다음 명령을 사용하여 홈 디렉터리에 Kibana를 다운로드합니다.
cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
tar로 Kibana 아카이브를 추출합니다.
tar xvf kibana-3.0.1.tar.gz
편집을 위해 Kibana 구성 파일을 엽니다.
vi ~/kibana-3.0.1/config.js
Kibana 구성 파일에서 elasticsearch
서버 URL을 지정하는 줄을 찾아 포트 번호(기본적으로 9200)를 80
으로 바꿉니다.
elasticsearch: "http://"+window.location.hostname+":80",
이는 포트 80(예: http://logstash_server_public_ip/)에서 Kibana에 액세스할 계획이기 때문에 필요합니다.
Nginx를 사용하여 Kibana 설치를 제공할 것이므로 파일을 적절한 위치로 이동하겠습니다. 다음 명령을 사용하여 디렉터리를 만듭니다.
sudo mkdir -p /usr/share/nginx/kibana3
이제 Kibana 파일을 새로 만든 디렉터리에 복사합니다.
sudo cp -R ~/kibana-3.0.1/* /usr/share/nginx/kibana3/
Kibana 웹 인터페이스를 사용하려면 먼저 Nginx를 설치해야 합니다. 지금 해보자.
Nginx 설치
Nginx가 포함된 Yum 리포지토리를 추가합니다.
sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
Yum을 사용하여 Nginx를 설치합니다.
sudo yum -y install nginx
Kibana가 사용자와 Elasticsearch를 연결하는 방식 때문에(사용자가 Elasticsearch에 직접 액세스할 수 있어야 함) 포트 80 요청을 포트 9200(Elasticsearch가 기본적으로 수신 대기하는 포트)에 프록시하도록 Nginx를 구성해야 합니다. 다행히 Kibana는 이 대부분을 설정하는 샘플 Nginx 구성을 제공합니다.
Kibana의 github 저장소에서 홈 디렉터리로 샘플 Nginx 구성을 다운로드합니다.
cd ~; curl -OL https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf
편집을 위해 샘플 구성 파일을 엽니다.
vi nginx.conf
server_name
의 값을 찾아 FQDN(또는 도메인 이름을 사용하지 않는 경우 공용 IP 주소)으로 변경하고 root
를 Kibana를 설치한 위치로 변경합니다. 다음 항목과 같습니다.
server_name FQDN;
root /usr/share/nginx/kibana3;
저장 및 종료. 이제 다음 명령을 사용하여 Nginx 기본 서버 블록에 복사합니다.
sudo cp ~/nginx.conf /etc/nginx/conf.d/default.conf
이제 htpasswd
를 사용하여 사용자 이름과 암호 쌍을 생성할 수 있도록 apache2-utils
를 설치합니다.
sudo yum install httpd-tools-2.2.15
그런 다음 대시보드 저장 및 공유를 위해 Kibana에서 사용할 로그인을 생성합니다(자신의 사용자 이름으로 대체).
sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user
그런 다음 암호를 입력하고 확인하십시오. 방금 만든 htpasswd 파일은 최근에 구성한 Nginx 구성에서 참조됩니다.
이제 Nginx를 다시 시작하여 변경 사항을 적용합니다.
sudo service nginx restart
또한 Nginx가 부팅 시 시작되도록 구성합니다.
sudo chkconfig --levels 235 nginx on
Kibana는 이제 FQDN 또는 Logstash 서버의 공용 IP 주소(예: http://logstash_server_public_ip/)를 통해 액세스할 수 있습니다. 웹 브라우저에서 이 페이지로 이동하면 대시보드를 볼 수 있는 Kibana 시작 페이지가 표시되지만 Logstash가 아직 설정되지 않았기 때문에 볼 수 있는 로그가 없습니다. 지금 해보자.
로그스태시 설치
Logstash 패키지는 Elasticsearch와 동일한 GPG 키를 공유하며 이미 해당 공개 키를 설치했으므로 Logstash용 새 Yum 리포지토리 파일을 만들고 편집해 보겠습니다.
sudo vi /etc/yum.repos.d/logstash.repo
다음 리포지토리 구성을 추가합니다.
[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
저장 및 종료.
다음 명령으로 Logstash 1.4.2를 설치합니다.
sudo yum -y install logstash-1.4.2
Logstash가 설치되었지만 아직 구성되지 않았습니다.
SSL 인증서 생성
Logstash Forwarder를 사용하여 서버에서 Logstash 서버로 로그를 배송할 예정이므로 SSL 인증서와 키 쌍을 생성해야 합니다. 인증서는 Logstash Forwarder에서 Logstash 서버의 ID를 확인하는 데 사용됩니다.
이제 SSL 인증서를 생성하기 위한 두 가지 옵션이 있습니다. 클라이언트 서버가 Logstash 서버의 IP 주소를 확인할 수 있도록 하는 DNS 설정이 있는 경우 옵션 2를 사용하십시오. 그렇지 않으면 옵션 1을 사용하면 IP 주소를 사용할 수 있습니다.
옵션 1: IP 주소
Logstash 서버의 IP 주소를 확인하기 위해 로그를 수집할 서버를 허용하는 DNS 설정이 없는 경우 Logstash 서버의 사설 IP 주소를 subjectAltName에 추가해야 합니다.
(SAN) 생성하려는 SSL 인증서의 필드입니다. 이렇게 하려면 OpenSSL 구성 파일을 엽니다.
sudo vi /etc/pki/tls/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/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 설정이 있는 경우 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 서버로 보내려는 각 서버에 대해 다음 단계를 수행하십시오. Debian 기반 Linux 배포판(예: Ubuntu, Debian 등)에 Logstash Forwarder를 설치하는 방법에 대한 지침은 이 튜토리얼의 Ubuntu 변형에서 Logstash Forwarder 설정 섹션을 참조하세요.
SSL 인증서 및 Logstash 전달자 패키지 복사
Logstash 서버에서 SSL 인증서를 서버에 복사합니다(자신의 로그인으로 대체).
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
Logstash 전달자 패키지 설치
서버에서 Logstash Forwarder RPM을 홈 디렉터리에 다운로드합니다.
cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm
그런 다음 Logstash 전달자 패키지를 설치합니다.
sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm
다음으로 부팅 시 시작되도록 Logstash Forwarder 초기화 스크립트를 설치하려고 합니다. logstashbook.com에서 제공하는 초기화 스크립트를 사용합니다.
cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder
초기화 스크립트는 /etc/sysconfig/logstash-forwarder
라는 파일에 의존합니다. 샘플 파일을 다운로드할 수 있습니다.
sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig
편집을 위해 엽니다.
sudo vi /etc/sysconfig/logstash-forwarder
그리고 LOGSTASH_FORWARDER_OPTIONS
값을 다음과 같이 수정합니다.
LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"
저장하고 종료합니다.
이제 SSL 인증서를 적절한 위치(/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/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
]
}
저장하고 종료합니다. 이는 Logstash Forwarder가 포트 5000(이전에 입력을 지정한 포트)에서 Logstash 서버에 연결하도록 구성하고 이전에 생성한 SSL 인증서를 사용합니다. paths 섹션은 보낼 로그 파일을 지정하고(여기서는 messages 및 secure 지정) type 섹션은 이러한 로그가 \syslog* 유형(필터가 찾고 있는 유형)임을 지정합니다.
포트 5000의 Logstash에 다른 로그 파일에 대한 Logstash Forwarder를 구성하기 위해 더 많은 파일/유형을 추가하는 위치입니다.
이제 chkconfig를 사용하여 Logstash Forwarder 서비스를 추가하려고 합니다.
sudo chkconfig --add logstash-forwarder
이제 Logstash Forwarder를 시작하여 변경 사항을 적용합니다.
sudo service logstash-forwarder start
이제 Logstash Forwarder가 messages 및 auth.log를 Logstash 서버로 보내고 있습니다! 로그를 수집하려는 다른 모든 서버에 대해 이 프로세스를 반복합니다.
키바나에 연결
로그를 수집하려는 모든 서버에서 Logstash Forwarder 설정을 마쳤으면 이전에 설치한 웹 인터페이스인 Kibana를 살펴보겠습니다.
웹 브라우저에서 Logstash 서버의 FQDN 또는 공용 IP 주소로 이동합니다. Kibana 시작 페이지가 표시되어야 합니다.
미리 만들어진 대시보드로 이동하려면 Logstash 대시보드를 클릭하세요. 아래에 로그 메시지와 함께 로그 이벤트가 포함된 히스토그램이 표시되어야 합니다(이벤트나 메시지가 표시되지 않으면 4개의 Logstash 구성 요소 중 하나가 제대로 구성되지 않은 것입니다).
여기에서 로그를 검색하고 찾아볼 수 있습니다. 대시보드를 사용자 지정할 수도 있습니다. 다음은 Kibana 인스턴스의 모습을 보여주는 샘플입니다.

다음을 시도하십시오.
- "루트\를 검색하여 서버에 루트로 로그인하려는 사람이 있는지 확인
- 특정 호스트 이름 검색
- 히스토그램 또는 위 메뉴에서 영역을 선택하여 시간 프레임 변경
- 히스토그램 아래의 메시지를 클릭하여 데이터가 어떻게 필터링되고 있는지 확인
Kibana에는 그래프 및 필터링과 같은 다른 많은 기능이 있으므로 자유롭게 살펴보십시오!
결론
이제 syslog가 Logstash를 통해 중앙 집중화되고 Kibana로 이를 시각화할 수 있으므로 모든 중요한 로그를 중앙 집중화하여 시작해야 합니다. 거의 모든 유형의 로그를 Logstash로 보낼 수 있지만 데이터가 grok로 구문 분석되고 구조화되면 훨씬 더 유용해집니다.
Kibana 대시보드는 서버에 액세스할 수 있는 모든 사람이 액세스할 수 있으므로 htaccess와 같은 것으로 보호하는 것이 좋습니다.