로그스태시Logstash는 인기 오픈소스 도구의 하나로 데이터를 수집, 가공하고 엘라스틱서치나 다른 저장소로 전송하는 데이터 처리 파이프라인입니다. 기본 기능 외에도 다양한 플러그인을 이용해 기능과 역할을 확장할 수 있습니다. 로그스태시의 파이프라인은 입력(Input), 필터(Filter), 출력(Output)으로 구성되며 각자의 역할이 명확하게 구별됩니다. 각 단계는 여러 플러그인의 조합으로 구성하며, 순차 실행됩니다. 예컨대 입력부에는 파일 플러그인을, 필터부에는 JSON 플러그인을, 출력부에는 엘라스틱서치 플러그인을 조합하면 파일로부터 데이터를 수집하고 수집된 데이터를 엘라스틱서치에 저장 가능한 필드와 값의 형태로 변환한 후 엘라스틱서치로 색인할 수 있습니다.
이 실습에서는 아파치 웹 서버의 로그 파일을 로그스태시로 수집 및 가공하여 엘라스틱서치로 색인합니다. 이렇게 엘라스틱서치로 색인 된 데이터들을 키바나를 통해 시각화하여 서버 상태를 손쉽게 확인할 수 있도록 합니다.
아파치 웹 서버의 로그는 잘 알려져 있는 로그 형식을 사용하기 때문에 Filebeat에서 모듈이라는 기능으로 간단하게 키바나에 대시보드를 생성할 수 있습니다. 이 실습에서는 모듈을 사용하여 대시보드를 생성합니다.
ElasticStack 설치 (based Docker)
로그스태시가 실행되지 않은 경우 아래 명령 실행
docker-compose up -d --no-deps --no-recreate logstash
필요한 파일 다운로드
wget -O ./apache.log <https://github.com/JAVACAFE-STUDY/elasticbooks/raw/master/project/elasticStack/pilot02/filebeat-apache-access.log>
다운로드 받은 파일들 컨테이너로 복사
docker cp ./apache.log logstash:/opt/
아파치 웹 로그 확인
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/"
키바나로 접속하여 DevTools 페이지 진입
다음 매핑 설정을 복사 & 붙여 넣기 후 실행
PUT _template/apache
{
"index_patterns": [
"apache*"
],
"mappings": {
"doc": {
"properties": {
"geoip": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
}
}
}
로그스태시 파이프라인 설정파일 열기
vi ~/stack-docker/config/logstash/pipeline/logstash.conf