본문 바로가기

카테고리 없음

[ELK] Linux 내부 로그 가져오기

Data Flow

데이터 분석 흐름을 풀어 설명해보자면 ,

Filebeat로 log파일을 catch하여

전처리 log 파일을 Logstash로 data loading한다음

ElasticSearch로 data를 보내 분석한 후

Kibana를 통해 시각화 및 관리

 

터미널에서 실행하는 순서는 ( 순서 중요 )

elasticsearch 실행

kibana 실행

작성한 logstash conf파일 실행

filebeat 실행

 

 

구성 및 선결요건

elasticsearch-7.15.0

logstash-7.15.0

filebeat-7.15.0

kibana-7.15.0

 

elasticsearch 설정 및 실행

elasticsearch 설정

vi ~/prod/elk/elasticsearch-7.15.0/config/elasticsearch.yml
... 하단 추가(취소)
# xpack.security.enabled: true
...

elasticsearch 실행

cd ~/prod/elk/elasticsearch-7.15.0/bin

./elasticsearch

# elasticsearch 실행확인
curl localhost:9200
{
  "name" : "ubuntu",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zPtzZ_nzRUeCsj1haIy6AQ",
  "version" : {
    "number" : "7.15.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "79d65f6e357953a5b3cbcc5e2c7c21073d89aa29",
    "build_date" : "2021-09-16T03:05:29.143308416Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 

logstash 설정 및 실행

logstash.yml 및 pipeline.yml설정

### logstash 설정 수정
vi ~/prod/elk/logstash-7.15.0/config/logstash.yml
...
#logstash가 주기적으로 pipeline 설정파일을 다시 읽어와서 pipeline을 구축 함
config.reload.automatic: true

#logstash가 pipeline 설정파일을 읽어오는 주기를 설정(하기는 3초에 한번씩 읽어 옮)
config.reload.interval: 3s
...

### pipeline 설정 수정
vi ~/prod/elk/logstash-7.15.0/config/pipelines.yml
- pipeline.id: test
# pipeline conf파일을 지정.
# 하기는 위에서 정의한 logstash.conf파일로 지정했음.
# 여기서 root폴더는 logstash root임.
  path.config: "./config/logstash.conf"

# 제대로 안될 시 아래와 같은 에러 발생
## 에러1
ERROR: Pipelines YAML file is empty. Location: /home/hyper/prod/elk/logstash-7.15.0/config/pipelines.yml

## 에러2
[2022-03-26T08:37:16,850][INFO ][logstash.config.source.local.configpathloader] No config files found in path {:path=>"/home/hyper/prod/elk/logstash-7.15.0/bin/config/logstash.conf"}

logstash.conf 수정

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
}

# filter{
#   grok{
#     match => { "message"=> ["%{IPORHOST:clientip} (?:-|%{USER:ident})"]
#     }
#   }
# }

filter {
    date {
        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
        remove_field => "timestamp"
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

 

logstash 실행

cd ~/prod/elk/logstash-7.15.0/bin
./logstash -f ../config/logstash.conf # .conf파일을 명시해줘야 정상적으로 실행됨

# logstash 정상 실행 확인
netstat -nlp | grep 5044

 

키바나 실행

cd ~/prod/elk/kibana-7.15.0-linux-x86_64/bin
./kibana

 

filebeat 설정 및 실행

/var/log 하위 로그들중 secure, sulog만 수집

 

vi ~/prod/elk/filebeat-7.15.0-linux-x86_64/filebeat.yml
...
# ============================== Filebeat inputs ===============================

filebeat.inputs:
- type: log

  # Change to true to enable this input configuration.
  enabled: "true"

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/secure
    - /var/log/sulog

# ------------------------------ Logstash Output -------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["127.0.0.1:5044"]
  ...
# filebeat 실행
cd ~/prod/elk/filebeat-7.15.0-linux-x86_64
sudo filebeat setup -e

# filebeat 실행확인
systemctl status filebeat.service

# 실행 확인
elasticsearch API 인덱스 목록을 조회하여 확인해보면 filebeat- 를 확인 할 수 있다

 

키바나 접속

kibana 접속
xxx.xxx.xxx.xxx:5601로 kibana에 접속 한다

좌측 메뉴

Management -> Stack Management -> Index Patterns -> Create index pattern 선택

Index pattern name 부분에 filebeat* 입력 후 Next step 클릭

Time field 부분에 @timestamp 선택 후 Create index pattern 클릭

 

 

 

 

 

좌측 메뉴

Analytics -> Discover 을 선택

좌측 fileds를 선택하면 원하는 정보만 확인 가능 하다.