웹사이트 검색

중앙 집중식 로깅을 개선하기 위해 Logstash 필터 추가


소개

Logstash는 로그를 중앙 집중화하고 분석하기 위한 강력한 도구로, 환경을 제공 및 개요하고 서버 문제를 식별하는 데 도움이 될 수 있습니다. ELK 스택(Elasticsearch, Logstash 및 Kibana) 설정의 효율성을 높이는 한 가지 방법은 중요한 애플리케이션 로그를 수집하고 필터를 사용하여 로그 데이터를 구조화하여 데이터를 쉽게 분석하고 쿼리할 수 있도록 하는 것입니다. 로그의 데이터를 유용한 정보로 파싱하는 "grok\ 패턴을 중심으로 필터를 구축할 것입니다.

이 가이드는 Ubuntu 14.04에 Elasticsearch, Logstash 및 Kibana 4를 설치하는 방법 튜토리얼의 속편이며 주로 다양한 일반 애플리케이션 로그에 대한 Logstash 필터 추가에 중점을 둡니다.

전제 조건

이 자습서를 따르려면 Filebeat와 같은 배송업체로부터 로그를 수신하는 작동 중인 Logstash 서버가 있어야 합니다. 로그를 수신하도록 Logstash를 설정하지 않은 경우 Ubuntu 14.04에 Elasticsearch, Logstash 및 Kibana 4를 설치하는 방법 튜토리얼을 참조하십시오.

ELK 서버 가정

  • Logstash는 /opt/logstash에 설치됩니다
  • Logstash 구성 파일은 /etc/logstash/conf.d
  • 에 있습니다.
  • 02-beats-input.conf
  • 라는 입력 파일이 있습니다.
  • 30-elasticsearch-output.conf
  • 라는 출력 파일이 있습니다.

Logstash 서버에서 다음 명령을 실행하여 patterns 디렉토리를 생성해야 할 수도 있습니다.

  1. sudo mkdir -p /opt/logstash/patterns
  2. sudo chown logstash: /opt/logstash/patterns

클라이언트 서버 가정

  • 각 애플리케이션 서버에서 Logstash 서버로 syslog/auth.log를 보내도록 Filebeat를 구성했습니다(전제 조건 튜토리얼의 Filebeat 설정 섹션 참조).

설정이 다른 경우 환경에 맞게 이 가이드를 조정하기만 하면 됩니다.

그록 소개

Grok는 텍스트 패턴을 구문 분석하고 정규식을 사용하여 식별자에 할당하는 방식으로 작동합니다.

grok 패턴의 구문은 %{PATTERN:IDENTIFIER}입니다. Logstash 필터에는 로그 메시지의 다양한 부분을 일치시키고 다양한 식별자에 할당하는 일련의 grok 패턴이 포함되어 있으며, 이는 로그에 구조가 부여되는 방식입니다.

grok에 대해 자세히 알아보려면 Logstash 기본 패턴 목록을 방문하세요.

이 가이드를 사용하는 방법

이 다음의 각 주요 섹션에는 지정된 애플리케이션에 대한 로그를 수집하고 필터링하는 데 필요한 추가 구성 세부 정보가 포함됩니다. 기록하고 필터링하려는 각 애플리케이션에 대해 클라이언트 서버(Filebeat)와 Logstash 서버 모두에서 일부 구성을 변경해야 합니다.

Logstash 패턴 하위 섹션

Logstash 패턴 하위 섹션이 있는 경우 Logstash 서버의 /opt/logstash/patterns에 있는 새 파일에 추가할 수 있는 grok 패턴이 포함됩니다. 이렇게 하면 Logstash 필터에서 새 패턴을 사용할 수 있습니다.

Logstash 필터 하위 섹션

Logstash 필터 하위 섹션에는 Logstash 서버의 /etc/logstash/conf.d에서 입력 및 출력 구성 파일 사이에 새 파일에 추가할 수 있는 필터가 포함됩니다. 필터는 Logstash 서버가 관련 로그 파일을 구문 분석하는 방법을 결정합니다. 변경 사항을 로드하려면 새 필터를 추가한 후 Logstash 서비스를 다시 시작해야 합니다.

Filebeat Prospector 하위 섹션

Filebeat Prospector는 Logstash로 보낼 로그를 지정하는 데 사용됩니다. 추가 Prospector 구성은 prospectors 섹션의 기존 Prospector 바로 뒤에 /etc/filebeat/filebeat.yml 파일에 추가해야 합니다.

filebeat:
  # List of prospectors to fetch data.
  prospectors:
    -
      - /var/log/secure
      - /var/log/messages
      document_type: syslog
    -
      paths:
        - /var/log/app/*.log
      document_type: app-access
...

위의 예에서 빨간색으로 강조 표시된 선은 /var/log/app/에 있는 모든 .log 파일을 앱과 함께 Logstash로 보내는 Prospector를 나타냅니다. -접속 유형. 변경 사항을 적용한 후 변경 사항을 적용하려면 Filebeat를 다시 로드해야 합니다.

이제 이 가이드를 사용하는 방법을 알았으므로 가이드의 나머지 부분에서는 애플리케이션 로그를 수집하고 필터링하는 방법을 보여줍니다!

응용 프로그램: Nginx

Logstash 패턴: Nginx

Nginx 로그 패턴은 Logstash의 기본 패턴에 포함되어 있지 않으므로 Nginx 패턴을 수동으로 추가합니다.

ELK 서버에서 nginx라는 새 패턴 파일을 만듭니다.

  1. sudo vi /opt/logstash/patterns/nginx

그런 다음 다음 줄을 삽입합니다.

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

저장 및 종료. NGINXACCESS 패턴은 데이터를 구문 분석하고 다양한 식별자(예: clientip, ident, auth 등)에 할당합니다. ).

다음으로 패턴 파일의 소유권을 logstash로 변경합니다.

  1. sudo chown logstash: /opt/logstash/patterns/nginx

Logstash 필터: Nginx

ELK 서버에서 11-nginx-filter.conf라는 새 필터 구성 파일을 만듭니다.

  1. sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

그런 다음 다음 필터를 추가합니다.

filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
  }
}

저장 및 종료. 이 필터는 nginx-access 유형의 메시지를 위에 정의된 NGINXACCESS 패턴과 일치시키려고 시도합니다.

이제 Logstash를 다시 시작하여 구성을 다시 로드합니다.

  1. sudo service logstash restart

Filebeat Prospector: Nginx

Nginx 서버에서 편집을 위해 filebeat.yml 구성 파일을 엽니다.

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

filebeat 섹션에 다음 Prospector를 추가하여 Logstash 서버에 nginx-access 유형으로 Nginx 액세스 로그를 보냅니다.

    -
      paths:
        - /var/log/nginx/access.log
      document_type: nginx-access

저장 및 종료. Filebeat를 다시 로드하여 변경 사항을 적용합니다.

  1. sudo service filebeat restart

이제 Nginx 로그가 수집되고 필터링됩니다!

애플리케이션: Apache HTTP 웹 서버

Apache의 로그 패턴은 기본 Logstash 패턴에 포함되어 있으므로 이에 대한 필터를 설정하기가 매우 쉽습니다.

참고: CentOS와 같은 RedHat 변형을 사용하는 경우 로그는 /var/log/apache2 대신 /var/log/httpd에 있습니다. 예제에 사용됨.

Logstash 필터: Apache

ELK 서버에서 12-apache.conf라는 새 필터 구성 파일을 만듭니다.

  1. sudo vi /etc/logstash/conf.d/12-apache.conf

그런 다음 다음 필터를 추가합니다.

filter {
  if [type] == "apache-access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}

저장 및 종료. 이 필터는 apache-access 유형의 메시지를 기본 Logstash 패턴 중 하나인 COMBINEDAPACHELOG 패턴과 일치시키려고 시도합니다.

이제 Logstash를 다시 시작하여 구성을 다시 로드합니다.

  1. sudo service logstash restart

Filebeat Prospector: 아파치

Apache 서버에서 편집을 위해 filebeat.yml 구성 파일을 엽니다.

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

filebeat 섹션에 다음 Prospector를 추가하여 Logstash 서버에 apache-access 유형으로 Apache 로그를 보냅니다.

    -
      paths:
        - /var/log/apache2/access.log
      document_type: apache-access

저장 및 종료. Filebeat를 다시 로드하여 변경 사항을 적용합니다.

  1. sudo service filebeat restart

이제 Apache 로그가 수집되고 필터링됩니다!

결론

거의 모든 유형의 로그를 수집하고 구문 분석할 수 있습니다. 다른 로그 파일에 대한 고유한 필터 및 패턴을 시도하고 작성하십시오.

보고싶은 필터나 나만의 패턴을 댓글로 남겨주세요!

Kibana 사용에 익숙하지 않은 경우 Kibana 시각화 및 대시보드 사용 방법 튜토리얼을 확인하십시오.