그럼 ELK Stack이란 뭘까요?
"ELK"는 Elasticsearch, Logstash 및 Kibana, 이 오픈 소스 프로젝트 세 개의 머리글자입니다. Elasticsearch는 검색 및 분석 엔진입니다. Logstash는 여러 소스에서 동시에 데이터를 수집하여 변환한 후 Elasticsearch 같은 “stash”로 전송하는 서버 사이드 데이터 처리 파이프라인입니다. Kibana는 사용자가 Elasticsearch에서 차트와 그래프를 이용해 데이터를 시각화할 수 있게 해줍니다.
elasticsearch 공식 문서
공식문서에서 설명해준 글이 너무나도 잘 설명되어 있다.
로그 및 각종 데이터들을 시각화 할 수 있도록 구축된 pipeline
이라고 생각하면 좋을 것 같다.
E(ElasticSearch)L(logstash)K(kibana) + Filebeat 를 흔히 ELK 라고 한다.
filebeat 는 간단하게 말하자면, 데이터 수집기 이다. 로그 파일들이 저장되어 있는 곳을 실시간으로 Harvester 가 수집하여 libbeat 로 보내주면, libbeat 가 filebeat 의 output 과 연결된 대상들에게 데이터를 보내준다.
로그파일들을 실시간으로 수집해야 하기 때문에, 일반적으로 서버가 설치된 곳에 같이 설치가 된다.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-x86_64.rpm
rpm -Uvh filebeat-8.6.2-x86_64.rpm
sudo systemctl daemon-reload
sudo systemctl start filebeat.service
sudo systemctl enable filebeat.service
sudo systemctl status filebeat.service
filebeat 의 configuration file 은 일반적으로 /etc/filebeat/filebeat.yml
에 위치한다.
filebeat.inputs:
# filestream is an input for collecting log messages from files.
- type: log
# Unique ID among all inputs, an ID is required.
#id: my-filestream-id
# Change to true to enable this input configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/elk-log/*/*.log
#- c:\programdata\elasticsearch\logs\*
#
fields:
instance_name: "instance_1"
# multiline
# The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
multiline.pattern: '^#'
# Defines if the pattern set under pattern should be negated or not. Default is false.
multiline.negate: true
# Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
# that was (not) matched before or after or as long as a pattern is not matched based on negate.
# Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
multiline.match: after
중간 생략...
# ---------------------------- Elasticsearch Output ----------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"
# ------------------------------ Logstash Output -------------------------------
output.logstash:
# The Logstash hosts
hosts: ["XXX:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
파일을 보면...
Input
#
을 기준으로 짜르고 있고, #
가 있어야 끝나는 로그라는 것을 뜻한다. Output
그렇다면, /var/elk-log/*/*.log
여기에 로그가 어떻게 쌓이는지 다음글에서 확인해보자.
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
사진: Unsplash의Maksym Kaharlytskyi