ELK Stack (1) - filebeat

Jae Min·2023년 4월 22일
0

ELK STACK

목록 보기
1/5
post-thumbnail
post-custom-banner

정의

그럼 ELK Stack이란 뭘까요?
"ELK"는 Elasticsearch, Logstash 및 Kibana, 이 오픈 소스 프로젝트 세 개의 머리글자입니다. Elasticsearch는 검색 및 분석 엔진입니다. Logstash는 여러 소스에서 동시에 데이터를 수집하여 변환한 후 Elasticsearch 같은 “stash”로 전송하는 서버 사이드 데이터 처리 파이프라인입니다. Kibana는 사용자가 Elasticsearch에서 차트와 그래프를 이용해 데이터를 시각화할 수 있게 해줍니다.
elasticsearch 공식 문서

공식문서에서 설명해준 글이 너무나도 잘 설명되어 있다.
로그 및 각종 데이터들을 시각화 할 수 있도록 구축된 pipeline 이라고 생각하면 좋을 것 같다.

E(ElasticSearch)L(logstash)K(kibana) + Filebeat 를 흔히 ELK 라고 한다.

기존에 회사에서 로그를 수집하는데 있어서 시각화 및 통계 분석을 할 수 있는 부분이 없었기 때문에 새롭게 도입하게 되었다. 도입하면서 배운 내용을 정리한 글이다.

filebeat

filebeat 는 간단하게 말하자면, 데이터 수집기 이다. 로그 파일들이 저장되어 있는 곳을 실시간으로 Harvester 가 수집하여 libbeat 로 보내주면, libbeat 가 filebeat 의 output 과 연결된 대상들에게 데이터를 보내준다.
로그파일들을 실시간으로 수집해야 하기 때문에, 일반적으로 서버가 설치된 곳에 같이 설치가 된다.

how to install

  1. wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-x86_64.rpm
  2. rpm -Uvh filebeat-8.6.2-x86_64.rpm
  3. sudo systemctl daemon-reload
    sudo systemctl start filebeat.service
    sudo systemctl enable filebeat.service
    sudo systemctl status filebeat.service

config file

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

  • paths : 어떤 위치에서 로그파일들을 긁어올지를 뜻한다.
  • fields : 이건 추후에 logstash 에서 로그데이터를 가공하기 위해서 사용한다. 간단하게 설명하자면, 어떤 서버 인스턴스에서 긁어온 요청인지를 표시하기 위함이다. (현재 ec2 를 두대 사용하고 있는데, 다른 한쪽에서는 "instance_2" 로 표시된다.)
  • multiline : 로그파일에 수많이 쌓이는 로그들의 끝을 어떤 마크로 구분을 하는지에 대한 정보이다. 위 파일에서는 # 을 기준으로 짜르고 있고, # 가 있어야 끝나는 로그라는 것을 뜻한다.

Output

  • host : 수집한 데이터를 어디로 내보낼지를 뜻한다. 우리는 로그 데이터를 한번 가공하기 위해서 바로 elasticSearch 로 보내지 않고, logstash 로 보낸다. XX 는 logstash 가 설치 되어 있는 ec2 ip 이다.

그렇다면, /var/elk-log/*/*.log 여기에 로그가 어떻게 쌓이는지 다음글에서 확인해보자.


REF

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-overview.html
사진: UnsplashMaksym Kaharlytskyi

profile
자유로워지고 싶다면 기록하라.
post-custom-banner

0개의 댓글