1. Logstash 소개

로그스태시Logstash는 인기 오픈소스 도구의 하나로 데이터를 수집, 가공하고 엘라스틱서치나 다른 저장소로 전송하는 데이터 처리 파이프라인입니다. 기본 기능 외에도 다양한 플러그인을 이용해 기능과 역할을 확장할 수 있습니다. 로그스태시의 파이프라인은 입력(Input), 필터(Filter), 출력(Output)으로 구성되며 각자의 역할이 명확하게 구별됩니다. 각 단계는 여러 플러그인의 조합으로 구성하며, 순차 실행됩니다. 예컨대 입력부에는 파일 플러그인을, 필터부에는 JSON 플러그인을, 출력부에는 엘라스틱서치 플러그인을 조합하면 파일로부터 데이터를 수집하고 수집된 데이터를 엘라스틱서치에 저장 가능한 필드와 값의 형태로 변환한 후 엘라스틱서치로 색인할 수 있습니다.

2. 실습 소개

이 실습에서는 아파치 웹 서버의 로그 파일을 로그스태시로 수집 및 가공하여 엘라스틱서치로 색인합니다. 이렇게 엘라스틱서치로 색인 된 데이터들을 키바나를 통해 시각화하여 서버 상태를 손쉽게 확인할 수 있도록 합니다.

아파치 웹 서버의 로그는 잘 알려져 있는 로그 형식을 사용하기 때문에 Filebeat에서 모듈이라는 기능으로 간단하게 키바나에 대시보드를 생성할 수 있습니다. 이 실습에서는 모듈을 사용하여 대시보드를 생성합니다.

3. 사전 준비

3.1 ElasticStack 설치

ElasticStack 설치 (based Docker)

3.2 Logstash 준비

  1. 로그스태시가 실행되지 않은 경우 아래 명령 실행

    docker-compose up -d --no-deps --no-recreate logstash
    
  2. 필요한 파일 다운로드

    wget -O ./apache.log <https://github.com/JAVACAFE-STUDY/elasticbooks/raw/master/project/elasticStack/pilot02/filebeat-apache-access.log>
    
  3. 다운로드 받은 파일들 컨테이너로 복사

    docker cp ./apache.log logstash:/opt/
    
  4. 아파치 웹 로그 확인

    docker exec -it -u logstash logstash tail /opt/apache.log
    
    66.249.73.135 - - [20/May/2015:21:05:11 +0000] "GET /blog/tags/xsendevent HTTP/1.1" 200 10049 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    198.46.149.143 - - [20/May/2015:21:05:29 +0000] "GET /blog/geekery/disabling-battery-in-ubuntu-vms.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1" 200 9316 "-" "Tiny Tiny RSS/1.11 (<http://tt-rss.org/>)"
    198.46.149.143 - - [20/May/2015:21:05:34 +0000] "GET /blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1" 200 10756 "-" "Tiny Tiny RSS/1.11 (<http://tt-rss.org/>)"
    82.165.139.53 - - [20/May/2015:21:05:15 +0000] "GET /projects/xdotool/ HTTP/1.0" 200 12292 "-" "-"
    100.43.83.137 - - [20/May/2015:21:05:01 +0000] "GET /blog/tags/standards HTTP/1.1" 200 13358 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
    63.140.98.80 - - [20/May/2015:21:05:28 +0000] "GET /blog/tags/puppet?flav=rss20 HTTP/1.1" 200 14872 "<http://www.semicomplete.com/blog/tags/puppet?flav=rss20>" "Tiny Tiny RSS/1.11 (<http://tt-rss.org/>)"
    63.140.98.80 - - [20/May/2015:21:05:50 +0000] "GET /blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1" 200 10756 "-" "Tiny Tiny RSS/1.11 (<http://tt-rss.org/>)"
    66.249.73.135 - - [20/May/2015:21:05:00 +0000] "GET /?flav=atom HTTP/1.1" 200 32352 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    180.76.6.56 - - [20/May/2015:21:05:56 +0000] "GET /robots.txt HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"
    46.105.14.53 - - [20/May/2015:21:05:15 +0000] "GET /blog/tags/puppet?flav=rss20 HTTP/1.1" 200 14872 "-" "UniversalFeedParser/4.2-pre-314-svn +http://feedparser.org/"
    

3.3 Elasticsearch 매핑 설정

  1. 키바나로 접속하여 DevTools 페이지 진입

  2. 다음 매핑 설정을 복사 & 붙여 넣기 후 실행

    PUT _template/apache
    {
      "index_patterns": [
        "apache*"
      ],
      "mappings": {
        "doc": {
          "properties": {
            "geoip": {
              "properties": {
                "location": {
                  "type": "geo_point"
                }
              }
            }
          }
        }
      }
    }
    

4. 로그스태시로 아파치 웹 로그 수집

  1. 로그스태시 파이프라인 설정파일 열기

    vi ~/stack-docker/config/logstash/pipeline/logstash.conf