웹사이트 검색

CentOS 7에 Elasticsearch, Logstash 및 Kibana(Elastic Stack)를 설치하는 방법


작성자는 DOnations 프로그램에 쓰기를 선택했습니다.

소개

이전에 ELK Stack으로 알려졌던 Elastic Stack은 Elastic에서 제작한 오픈 소스 소프트웨어 모음으로, 모든 소스에서 어떤 형식으로든 생성된 로그를 검색, 분석 및 시각화할 수 있습니다. 중앙 로깅이라고 합니다. 중앙 집중식 로깅은 한 곳에서 모든 로그를 검색할 수 있으므로 서버 또는 애플리케이션의 문제를 식별하려고 시도할 때 매우 유용할 수 있습니다. 또한 특정 기간 동안 로그를 연관시켜 여러 서버에 걸쳐 있는 문제를 식별할 수 있기 때문에 유용합니다.

Elastic Stack에는 네 가지 주요 구성 요소가 있습니다.

  • 수집된 모든 데이터를 저장하는 RESTful 검색 엔진
  • Logstash: 수신 데이터를 Elasticsearch로 전송하는 Elastic Stack의 데이터 처리 구성 요소입니다.
  • Kibana: 로그 검색 및 시각화를 위한 웹 인터페이스
  • Beats: 수백 또는 수천 대의 컴퓨터에서 Logstash 또는 Elasticsearch로 데이터를 보낼 수 있는 경량의 단일 목적 데이터 수집기

이 튜토리얼에서는 웹 브라우저를 통해 액세스할 수 있도록 Nginx를 프록시로 설치합니다. 이 튜토리얼이 끝나면 Elastic Stack 서버라고 하는 단일 서버에 이러한 구성 요소를 모두 설치하게 됩니다.

참고: Elastic Stack을 설치할 때 전체 스택에서 동일한 버전을 사용해야 합니다. 이 튜토리얼은 각 구성 요소의 최신 버전을 사용하며, 이 작성 시점에는 Elasticsearch 6.5.2, Kibana 6.5.2, Logstash 6.5.2 및 Filebeat 6.5.2입니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • 다음 방화벽으로 설정된 CentOS 7 서버 1대. Elastic Stack 서버에 필요한 CPU, RAM 및 스토리지의 양은 수집하려는 로그의 양에 따라 다릅니다. 이 튜토리얼에서는 Elastic Stack 서버에 대해 다음 사양의 VPS를 사용합니다.\n
    • OS: CentOS 7.5
    • 램: 4GB
    • CPU: 2

    Elasticsearch 및 Logstash에 필요한 Java 8이 서버에 설치되어 있습니다. Java 9는 지원되지 않습니다. 이를 설치하려면 CentOS에 Java를 설치하는 방법에 대한 가이드의 "OpenJDK 8 JRE 설치\ 섹션을 따르세요.

    Nginx가 서버에 설치되어 있으며 이 안내서의 뒷부분에서 Kibana용 리버스 프록시로 구성할 것입니다. 이를 설정하려면 CentOS 7에 Nginx를 설치하는 방법 가이드를 따르세요.

    또한 Elastic Stack은 승인되지 않은 사용자가 액세스하는 것을 원하지 않는 서버에 대한 중요한 정보에 액세스하는 데 사용되기 때문에 TLS/SSL 인증서를 설치하여 서버를 안전하게 유지하는 것이 중요합니다. 이는 선택 사항이지만 강력하게 권장됩니다. 궁극적으로 이 가이드를 진행하는 동안 Nginx 서버 블록을 변경하게 되므로 이 가이드의 두 번째 단계 직후 CentOS 7에서 Let's Encrypt 가이드를 완료하여 이 보안을 적용하는 것이 좋습니다.

    서버에서 Let’s Encrypt를 구성할 계획이라면 그렇게 하기 전에 다음이 필요합니다.

    • 정규화된 도메인 이름(FQDN). 이 자습서에서는 전체적으로 example.com을 사용합니다. Freenom에서 도메인 이름을 구입하거나 선택한 도메인 등록 기관을 사용할 수 있습니다.\n
    • 다음 DNS 레코드는 모두 서버에 대해 설정됩니다. 추가 방법에 대한 자세한 내용은 이 DigitalOcean DNS 소개를 참조하세요.\n
      • 서버의 공용 IP 주소를 가리키는 example.com이 있는 A 레코드
      • 서버의 공용 IP 주소를 가리키는 www.example.com이 있는 A 레코드

      1단계 - Elasticsearch 설치 및 구성

      Elastic Stack 구성 요소는 기본적으로 패키지 관리자를 통해 사용할 수 없지만 Elastic의 패키지 저장소를 추가하여 yum으로 설치할 수 있습니다.

      Elastic Stack의 모든 패키지는 패키지 스푸핑으로부터 시스템을 보호하기 위해 Elasticsearch 서명 키로 서명됩니다. 키를 사용하여 인증된 패키지는 패키지 관리자가 신뢰할 수 있는 것으로 간주됩니다. 이 단계에서는 Elasticsearch를 설치하기 위해 Elasticsearch 공개 GPG 키를 가져오고 Elastic 저장소를 추가합니다.

      다음 명령을 실행하여 Elasticsearch 공개 서명 키를 다운로드하고 설치합니다.

      1. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

      다음으로 Elastic 리포지토리를 추가합니다. 선호하는 텍스트 편집기를 사용하여 /etc/yum.repos.d/ 디렉터리에 elasticsearch.repo 파일을 만듭니다. 여기서는 vi 텍스트 편집기를 사용합니다.

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

      Elastic Stack의 구성 요소를 다운로드하고 설치하는 데 필요한 정보를 yum에 제공하려면 i를 눌러 삽입 모드로 들어가 파일에 다음 줄을 추가합니다.

      [elasticsearch-6.x]
      name=Elasticsearch repository for 6.x packages
      baseurl=https://artifacts.elastic.co/packages/6.x/yum
      gpgcheck=1
      gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
      enabled=1
      autorefresh=1
      type=rpm-md
      

      여기에 사람이 읽을 수 있는 리포지토리의 이름, 리포지토리 데이터 디렉터리의 baseurl 및 Elastic 패키지를 확인하는 데 필요한 gpgkey가 포함되었습니다. .

      완료되면 ESC를 눌러 삽입 모드를 종료한 다음 :wqENTER를 눌러 파일을 저장하고 종료합니다. 텍스트 편집기 vi와 그 후속 버전인 vim에 대해 자세히 알아보려면 클라우드 서버에서 Vim 텍스트 편집기 설치 및 사용 자습서를 확인하십시오.

      리포지토리가 추가되었으므로 이제 Elastic Stack을 설치할 수 있습니다. 공식 문서에 따르면 다른 구성 요소보다 먼저 Elasticsearch를 설치해야 합니다. 이 순서대로 설치하면 각 제품이 의존하는 구성 요소가 올바르게 배치됩니다.

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

      1. sudo yum install elasticsearch

      Elasticsearch 설치가 완료되면 기본 구성 파일 elasticsearch.yml을 편집기에서 엽니다.

      sudo vi /etc/elasticsearch/elasticsearch.yml
      

      참고: Elasticsearch의 구성 파일은 YAML 형식이므로 들여쓰기가 매우 중요합니다! 이 파일을 편집할 때 여분의 공백을 추가하지 않도록 하십시오.

      Elasticsearch는 포트 9200에서 모든 곳의 트래픽을 수신 대기합니다. 외부인이 데이터를 읽거나 REST API를 통해 Elasticsearch 클러스터를 종료하지 못하도록 Elasticsearch 인스턴스에 대한 외부 액세스를 제한할 수 있습니다. network.host를 지정하는 줄을 찾아서 주석을 제거하고 해당 값을 localhost로 바꾸면 다음과 같습니다.

      . . .
      network.host: localhost
      . . .
      

      elasticsearch.yml을 저장하고 닫습니다. 그런 다음 systemctl로 Elasticsearch 서비스를 시작합니다.

      1. sudo systemctl start elasticsearch

      그런 다음 다음 명령을 실행하여 서버가 부팅될 때마다 Elasticsearch가 시작되도록 합니다.

      1. sudo systemctl enable elasticsearch

      HTTP 요청을 전송하여 Elasticsearch 서비스가 실행 중인지 테스트할 수 있습니다.

      1. curl -X GET "localhost:9200"

      다음과 같이 로컬 노드에 대한 몇 가지 기본 정보를 보여주는 응답이 표시됩니다.

      Output
      { "name" : "8oSCBFJ", "cluster_name" : "elasticsearch", "cluster_uuid" : "1Nf9ZymBQaOWKpMRBfisog", "version" : { "number" : "6.5.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "9434bed", "build_date" : "2018-11-29T23:58:20.891072Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }

      이제 Elasticsearch가 실행 중이므로 Elastic Stack의 다음 구성 요소인 Kibana를 설치해 보겠습니다.

      2단계 - Kibana 대시보드 설치 및 구성

      공식 문서의 설치 순서에 따라 Elasticsearch 다음에 Kibana를 다음 구성 요소로 설치해야 합니다. Kibana를 설정한 후 인터페이스를 사용하여 Elasticsearch가 저장하는 데이터를 검색하고 시각화할 수 있습니다.

      이전 단계에서 Elastic 리포지토리를 이미 추가했으므로 yum을 사용하여 Elastic Stack의 나머지 구성 요소를 설치할 수 있습니다.

      1. sudo yum install kibana

      그런 다음 Kibana 서비스를 활성화하고 시작합니다.

      1. sudo systemctl enable kibana
      2. sudo systemctl start kibana

      Kibana는 localhost에서만 수신 대기하도록 구성되어 있으므로 외부 액세스를 허용하도록 역방향 프록시를 설정해야 합니다. 이를 위해 서버에 이미 설치되어 있는 Nginx를 사용합니다.

      먼저 openssl 명령을 사용하여 Kibana 웹 인터페이스에 액세스하는 데 사용할 관리 Kibana 사용자를 생성합니다. 예를 들어 이 계정의 이름을 kibanaadmin로 지정하지만 보안을 강화하기 위해 사용자에 대해 추측하기 어려운 비표준 이름을 선택하는 것이 좋습니다.

      다음 명령은 관리 Kibana 사용자 및 비밀번호를 생성하고 htpasswd.users 파일에 저장합니다. 이 사용자 이름과 암호를 요구하도록 Nginx를 구성하고 잠시 이 파일을 읽습니다.

      1. echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

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

      다음으로 Nginx 서버 블록 파일을 생성합니다. 예를 들어, 우리는 이 파일을 example.com.conf로 참조할 것입니다. 하지만 더 설명적인 이름을 지정하는 것이 도움이 될 수 있습니다. 예를 들어 이 서버에 대해 FQDN 및 DNS 레코드를 설정한 경우 FQDN 다음에 이 파일의 이름을 지정할 수 있습니다.

      1. sudo vi /etc/nginx/conf.d/example.com.conf

      파일에 다음 코드 블록을 추가하고 example.comwww.example.com을 업데이트해야 합니다. 서버의 FQDN 또는 공용 IP 주소와 일치하도록 합니다. 이 코드는 서버의 HTTP 트래픽을 localhost:5601에서 수신 대기 중인 Kibana 애플리케이션으로 보내도록 Nginx를 구성합니다. 또한 htpasswd.users 파일을 읽고 기본 인증을 요구하도록 Nginx를 구성합니다.

      전제 조건인 Nginx 자습서를 끝까지 따랐다면 이미 이 파일을 만들고 일부 콘텐츠로 채웠을 수 있습니다. 이 경우 다음을 추가하기 전에 파일의 모든 기존 콘텐츠를 삭제하십시오.

      server {
          listen 80;
      
          server_name example.com www.example.com;
      
          auth_basic "Restricted Access";
          auth_basic_user_file /etc/nginx/htpasswd.users;
      
          location / {
              proxy_pass http://localhost:5601;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection 'upgrade';
              proxy_set_header Host $host;
              proxy_cache_bypass $http_upgrade;
          }
      }
      

      완료되면 파일을 저장하고 닫습니다.

      그런 다음 구문 오류에 대한 구성을 확인합니다.

      1. sudo nginx -t

      출력에 오류가 보고되면 돌아가서 구성 파일에 배치한 콘텐츠가 올바르게 추가되었는지 다시 확인하십시오. 출력에 syntax is ok가 표시되면 Nginx 서비스를 다시 시작합니다.

      1. sudo systemctl restart nginx

      기본적으로 SELinux 보안 정책이 적용되도록 설정됩니다. Nginx가 프록시 서비스에 액세스할 수 있도록 다음 명령을 실행합니다.

      1. sudo setsebool httpd_can_network_connect 1 -P

      CentOS 7의 SELinux 소개 자습서에서 SELinux에 대해 자세히 알아볼 수 있습니다.

      Kibana는 이제 FQDN 또는 Elastic Stack 서버의 퍼블릭 IP 주소를 통해 액세스할 수 있습니다. 다음 주소로 이동하고 메시지가 표시되면 로그인 자격 증명을 입력하여 Kibana 서버의 상태 페이지를 확인할 수 있습니다.

      http://your_server_ip/status
      

      이 상태 페이지는 서버의 리소스 사용량에 대한 정보를 표시하고 설치된 플러그인을 나열합니다.

      참고: 전제 조건 섹션에서 언급한 대로 서버에서 SSL/TLS를 활성화하는 것이 좋습니다. 지금 이 튜토리얼을 따라 CentOS 7의 Nginx용 무료 SSL 인증서를 얻을 수 있습니다. SSL/TLS 인증서를 얻은 후 돌아와서 이 튜토리얼을 완료할 수 있습니다.

      이제 Kibana 대시보드가 구성되었으므로 다음 구성 요소인 Logstash를 설치하겠습니다.

      3단계 - Logstash 설치 및 구성

      Beats가 데이터를 Elasticsearch 데이터베이스로 직접 보낼 수 있지만 Logstash를 사용하여 먼저 데이터를 처리하는 것이 좋습니다. 이를 통해 다양한 소스에서 데이터를 수집하고 공통 형식으로 변환하고 다른 데이터베이스로 내보낼 수 있습니다.

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

      1. sudo yum install logstash

      Logstash를 설치한 후 구성으로 이동할 수 있습니다. Logstash의 구성 파일은 JSON 형식으로 작성되며 /etc/logstash/conf.d 디렉터리에 있습니다. Logstash를 구성할 때 한쪽 끝에서 데이터를 가져와서 처리하고 대상(이 경우 대상은 Elasticsearch임)으로 보내는 파이프라인으로 Logstash를 생각하면 도움이 됩니다. Logstash 파이프라인에는 두 개의 필수 요소 inputoutput과 하나의 선택적 요소인 filter가 있습니다. 입력 플러그인은 소스의 데이터를 사용하고 필터 플러그인은 데이터를 처리하며 출력 플러그인은 데이터를 대상에 씁니다.

      Filebeat 입력을 설정할 02-beats-input.conf라는 구성 파일을 만듭니다.

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

      다음 입력 구성을 삽입합니다. TCP 포트 5044에서 수신할 beats 입력을 지정합니다.

      input {
        beats {
          port => 5044
        }
      }
      

      파일을 저장하고 닫습니다. 다음으로 syslogs라고도 하는 시스템 로그에 대한 필터를 추가하는 10-syslog-filter.conf라는 구성 파일을 만듭니다.

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

      다음 syslog 필터 구성을 삽입합니다. 이 예제 시스템 로그 구성은 공식 Elastic 문서에서 가져왔습니다. 이 필터는 들어오는 시스템 로그를 구문 분석하여 미리 정의된 Kibana 대시보드에서 구조화하고 사용할 수 있도록 만드는 데 사용됩니다.

      filter {
        if [fileset][module] == "system" {
          if [fileset][name] == "auth" {
            grok {
              match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                        "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
              pattern_definitions => {
                "GREEDYMULTILINE"=> "(.|\n)*"
              }
              remove_field => "message"
            }
            date {
              match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
            }
            geoip {
              source => "[system][auth][ssh][ip]"
              target => "[system][auth][ssh][geoip]"
            }
          }
          else if [fileset][name] == "syslog" {
            grok {
              match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
              pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
              remove_field => "message"
            }
            date {
              match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
            }
          }
        }
      }
      

      완료되면 파일을 저장하고 닫습니다.

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

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

      다음 출력 구성을 삽입합니다. 이 출력은 localhost:9200에서 실행 중인 Elasticsearch의 Beats 데이터를 사용된 Beat의 이름을 딴 인덱스에 저장하도록 Logstash를 구성합니다. 이 튜토리얼에서 사용되는 비트는 Filebeat입니다.

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

      파일을 저장하고 닫습니다.

      Filebeat 입력을 사용하는 다른 응용 프로그램에 대한 필터를 추가하려면 파일 이름을 입력 구성과 출력 구성 간에 정렬되도록 지정해야 합니다. 즉, 파일 이름은 0230.

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

      1. sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

      구문 오류가 없으면 몇 초 후에 출력에 Configruation OK가 표시됩니다. 출력에 이것이 표시되지 않으면 출력에 나타나는 오류를 확인하고 구성을 업데이트하여 수정하십시오.

      구성 테스트가 성공하면 Logstash를 시작하고 활성화하여 구성 변경 사항을 적용합니다.

      1. sudo systemctl start logstash
      2. sudo systemctl enable logstash

      이제 Logstash가 올바르게 실행되고 완전히 구성되었으므로 Filebeat를 설치하겠습니다.

      4단계 - Filebeat 설치 및 구성

      Elastic Stack은 Beats라는 여러 경량 데이터 수집기를 사용하여 다양한 소스에서 데이터를 수집하고 이를 Logstash 또는 Elasticsearch로 전송합니다. 현재 Elastic에서 사용할 수 있는 Beats는 다음과 같습니다.

      • Filebeat: 로그 파일을 수집하고 배송합니다.
      • Metricbeat: 시스템 및 서비스에서 메트릭을 수집합니다.
      • Packetbeat: 네트워크 데이터를 수집하고 분석합니다.
      • Winlogbeat: Windows 이벤트 로그를 수집합니다.
      • Auditbeat: Linux 감사 프레임워크 데이터를 수집하고 파일 무결성을 모니터링합니다.
      • 하트비트: 활성 검색을 통해 서비스의 가용성을 모니터링합니다.

      이 튜토리얼에서는 Filebeat를 사용하여 로컬 로그를 Elastic Stack으로 전달합니다.

      yum을 사용하여 Filebeat를 설치합니다.

      1. sudo yum install filebeat

      그런 다음 Logstash에 연결하도록 Filebeat를 구성합니다. 여기서는 Filebeat와 함께 제공되는 예제 구성 파일을 수정합니다.

      Filebeat 구성 파일을 엽니다.

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

      참고: Elasticsearch와 마찬가지로 Filebeat의 구성 파일은 YAML 형식입니다. 즉, 적절한 들여쓰기가 중요하므로 이 지침에 표시된 것과 동일한 수의 공백을 사용해야 합니다.

      Filebeat는 다양한 출력을 지원하지만 일반적으로 추가 처리를 위해 이벤트를 Elasticsearch나 Logstash로만 직접 보냅니다. 이 자습서에서는 Logstash를 사용하여 Filebeat에서 수집한 데이터에 대한 추가 처리를 수행합니다. Filebeat는 데이터를 Elasticsearch로 직접 보낼 필요가 없으므로 해당 출력을 비활성화하겠습니다. 이렇게 하려면 output.elasticsearch 섹션을 찾고 #를 앞에 붙여 다음 줄을 주석 처리합니다.

      ...
      #output.elasticsearch:
        # Array of hosts to connect to.
        #hosts: ["localhost:9200"]
      ...
      

      그런 다음 output.logstash 섹션을 구성합니다. #를 제거하여 output.logstash:hosts: [\localhost:5044\] 줄의 주석 처리를 제거합니다. 이렇게 하면 이전에 Logstash 입력을 지정한 포트인 포트 5044에서 Elastic Stack 서버의 Logstash에 연결하도록 Filebeat가 구성됩니다.

      output.logstash:
        # The Logstash hosts
        hosts: ["localhost:5044"]
      

      파일을 저장하고 닫습니다.

      이제 일반적인 Linux 배포판의 시스템 로깅 서비스에서 생성된 로그를 수집하고 구문 분석하는 시스템 모듈로 Filebeat의 기능을 확장할 수 있습니다.

      활성화합시다:

      1. sudo filebeat modules enable system

      다음을 실행하여 활성화 및 비활성화된 모듈 목록을 볼 수 있습니다.

      1. sudo filebeat modules list

      다음과 유사한 목록이 표시됩니다.

      Output
      Enabled: system Disabled: apache2 auditd elasticsearch haproxy icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis suricata traefik

      기본적으로 Filebeat는 syslog 및 인증 로그에 기본 경로를 사용하도록 구성됩니다. 이 자습서의 경우 구성에서 아무 것도 변경할 필요가 없습니다. /etc/filebeat/modules.d/system.yml 구성 파일에서 모듈의 매개변수를 볼 수 있습니다.

      다음으로 인덱스 템플릿을 Elasticsearch에 로드합니다. Elasticsearch 인덱스는 유사한 특성을 가진 문서 모음입니다. 인덱스는 인덱스 내에서 다양한 작업을 수행할 때 인덱스를 참조하는 데 사용되는 이름으로 식별됩니다. 인덱스 템플릿은 새 인덱스가 생성될 때 자동으로 적용됩니다.

      템플릿을 로드하려면 다음 명령을 사용합니다.

      1. sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

      그러면 다음과 같은 결과가 나타납니다.

      Output
      Loaded index template

      Filebeat는 Kibana에서 Filebeat 데이터를 시각화할 수 있는 샘플 Kibana 대시보드와 함께 제공됩니다. 대시보드를 사용하려면 인덱스 패턴을 생성하고 대시보드를 Kibana에 로드해야 합니다.

      대시보드가 로드되면 Filebeat는 Elasticsearch에 연결하여 버전 정보를 확인합니다. Logstash가 활성화된 상태에서 대시보드를 로드하려면 수동으로 Logstash 출력을 비활성화하고 Elasticsearch 출력을 활성화해야 합니다.

      1. sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

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

      Output
      . . . 2018-12-05T21:23:33.806Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:23:33.811Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:23:33.815Z INFO template/load.go:129 Template already exists and will not be overwritten. Loaded index template Loading dashboards (Kibana must be running and reachable) 2018-12-05T21:23:33.816Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:23:33.819Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:23:33.819Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-12-05T21:24:03.981Z INFO instance/beat.go:717 Kibana dashboards successfully loaded. Loaded dashboards 2018-12-05T21:24:03.982Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:24:03.984Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:24:03.984Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-12-05T21:24:04.043Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled 2018-12-05T21:24:04.080Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled Loaded machine learning job configurations

      이제 Filebeat를 시작하고 활성화할 수 있습니다.

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

      Elastic Stack을 올바르게 설정한 경우 Filebeat는 syslog 및 권한 부여 로그를 Logstash로 전송하기 시작하고 Logstash는 해당 데이터를 Elasticsearch로 로드합니다.

      Elasticsearch가 실제로 이 데이터를 수신하는지 확인하려면 다음 명령을 사용하여 Filebeat 인덱스를 쿼리합니다.

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

      다음과 유사한 출력이 표시됩니다.

      Output
      { "took" : 1, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3225, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-6.5.2-2018.12.05", "_type" : "doc", "_id" : "vf5GgGcB_g3p-PRo_QOw", "_score" : 1.0, "_source" : { "@timestamp" : "2018-12-05T19:00:34.000Z", "source" : "/var/log/secure", "meta" : { "cloud" : { . . .

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

      5단계 - Kibana 대시보드 탐색

      앞서 설치한 웹 인터페이스인 Kibana를 살펴보겠습니다.

      웹 브라우저에서 Elastic Stack 서버의 FQDN 또는 퍼블릭 IP 주소로 이동합니다. 2단계에서 정의한 로그인 자격 증명을 입력하면 Kibana 홈페이지가 표시됩니다.

      왼쪽 탐색 모음에서 검색 링크를 클릭합니다. 검색 페이지에서 미리 정의된 filebeat-* 인덱스 패턴을 선택하여 Filebeat 데이터를 확인합니다. 기본적으로 지난 15분 동안의 모든 로그 데이터가 표시됩니다. 로그 이벤트가 포함된 히스토그램과 아래의 일부 로그 메시지가 표시됩니다.

      여기에서 로그를 검색하고 찾아볼 수 있으며 대시보드를 사용자 지정할 수도 있습니다. 하지만 이 시점에서는 Elastic Stack 서버에서만 syslog를 수집하기 때문에 거기에 많은 것이 없을 것입니다.

      왼쪽 패널을 사용하여 대시보드 페이지로 이동하고 Filebeat System 대시보드를 검색합니다. 여기에서 Filebeat의 system 모듈과 함께 제공되는 샘플 대시보드를 검색할 수 있습니다.

      예를 들어 syslog 메시지를 기반으로 자세한 통계를 볼 수 있습니다.

      sudo 명령을 사용한 사용자와 시기를 볼 수도 있습니다.

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

      결론

      이 튜토리얼에서는 Elastic Stack을 설치하고 구성하여 시스템 로그를 수집하고 분석했습니다. Beats를 사용하여 거의 모든 유형의 로그 또는 인덱싱된 데이터를 Logstash로 보낼 수 있지만 Logstash 필터로 데이터를 구문 분석하고 구조화하면 데이터를 읽을 수 있는 일관된 형식으로 변환하므로 데이터가 훨씬 더 유용해집니다. Elasticsearch로 쉽게.