1. Filebeat란?
경량 로그 수집기로써 보안 장치, 클라우드, 컨테이터, 호스트 또는 OT에서 수집하든 상관없이 로그와 파일을 경량화된 방식으로 전달하고 중앙 집중화하여 작업을 보다 간편하게 만들어준다.
- Harvester
- 파일의 내용을 읽는 역할을 한다.
- 하나의 Harvester가 각각 하나의 파일을 담당하는 구조를 가진다.
- 파일을 열고 닫는것까지 담당하기 때문에 Harvester가 실행되고 있다는 것은 file descriptor가 남아있다는 것이다.
- Harvester는 각 파일을 한 줄씩 읽고 내용을 Output으로 보낸다.
- Prospector
- 읽어야할 소스를 식별 및 구분하는 역할을 한다.
- log, stdin 타입을 지원하며 Prospector당 2개 이상의 type 선언이 가능하며, 어디까지 읽었는지 meta data를 별도 디스크에 저장한다. (default: /var/lib/filebeat/registry)
- Spooler
- Harvester가 읽은 데이터를 집계하고 각각 설정한 output으로 전달한다.
2. ELK-WEB에 Apache 서버 구성
$ sudo yum -y install httpd
$ sudo vi /var/www/html/index.html
<html>
<body>
<h1> Web-server </h1>
</body>
</html>
$ sudo systemctl enable httpd
$ sudo systemctl start httpd
sudo tail -F /var/log/httpd/access_log
3. Filebeat 설치
3.1 Elasticsearch GPG key 가져오기
$ sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
3.2 Repository 구성 및 Filebeat 설치
$ sudo vi /etc/yum.repos.d/Elastic.repo
[elastic-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum -y install filebeat
3.3 Filebeat module list 확인
$ sudo filebeat modules list
4. Apache서버 log를 elasticsearch로 보내도록 설정
4.1 /etc/filebeat/filebeat.yml 설정
Inputs 설정
$ sudo vi /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- 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/httpd/access_log
#- c:\programdata\elasticsearch\logs\*
# Exclude lines. A list of regular expressions to match. It drops the lines that are
# matching any regular expression from the list.
#exclude_lines: ['^DBG']
# Include lines. A list of regular expressions to match. It exports the lines that are
# matching any regular expression from the list.
#include_lines: ['^ERR', '^WARN']
# Exclude files. A list of regular expressions to match. Filebeat drops the files that
# are matching any regular expression from the list. By default, no files are dropped.
#exclude_files: ['.gz$']
# Optional additional fields. These fields can be freely picked
# to add additional information to the crawled log files for filtering
fields:
server_name: elk-web
log_type: apache-access
#fields:
# level: debug
# review: 1
paths는 보낼 로그가 존재하는 경로를 적어준다.
fields는 output으로 보낼 때 추가한 필드를 포함하여 보낸다. 이후 Kibana에서 해당 필드 키워드를 사용하면 data를 컨트롤할 수 있다.
Outputs 설정
# ================================== Outputs ===================================
# Configure what output to use when sending the data collected by the beat.
# ---------------------------- 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: ["13.125.35.108: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"
hosts에는 여러 노드를 입력이 가능하다.
각각의 host에서 균등하게 data를 보내려면 loadbalance: true를 추가로 설정하면 된다.
4.2 Filebeat 설정 적용 및 실행
$ sudo systemctl restart filebeat
설정 적용을 위해 Filebeat를 재실행한다.
5. Logstash 파이프라인 설정
ELK-WEB에서 아래와 같이 설정한다.
$ sudo vi /etc/logstash/conf.d/filebeats.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:time}\t%{DATA:tag}\t{ % {DATA:data} }" }
}
mutate {
add_field => { "json_data" => "{ %{data}}" }
}
json {
source => "json_data"
}
alter {
remove_field => [ "data", "json_data" ]
}
date {
match => [ "time", "yyyy-MM-dd'T'HH:mm:ssZZ" ]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "%{[fields][log_type]}-%{+YYYY.MM.dd}"
}
}
6. logstash-filter-alter plugin 설치
$ cd /usr/share/logstash/bin/
$ sudo ./logstash-plugin install logstash-filter-alter
7. Logstash 실행
$ sudo sh /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/filebeats.conf
8. Elasticsearch index 생성 확인
$ curl localhost:9200/_cat/indices?v
'Monitoring' 카테고리의 다른 글
Prometheus와 Grafana를 활용한 모니터링(1) (0) | 2021.08.01 |
---|---|
프로메테우스(Prometheus) 알아보기 (1) | 2021.08.01 |
[ELK Stack] 1. ELK 구축 및 실행 (0) | 2021.07.30 |
ELK Stack이란? (0) | 2021.07.29 |
Datadog을 활용한 클라우드 통합 모니터링 (0) | 2021.07.06 |