일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Java
- Kafka
- analyzer test
- ELASTIC
- docker
- MySQL
- licence delete curl
- API
- flask
- zip 파일 암호화
- springboot
- License
- aggregation
- token filter test
- Test
- 파이썬
- TensorFlow
- aggs
- Mac
- plugin
- high level client
- zip 암호화
- 900gle
- license delete
- matplotlib
- Elasticsearch
- sort
- 차트
- query
- Python
- Today
- Total
개발잡부
Elastic stack 을 활용한 로그 수집 본문
Elastic stack 7.6.1 활용한 로그수집
[elasticsearch 설치]
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.1-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-7.6.1-linux-x86_64.tar.gz
cd elasticsearch-7.6.1/
======================== Elasticsearch Configuration =========================
cluster.name: revu-logsystem
# ------------------------------------ Node ------------------------------------
# Use a descriptive name for the node:
node.name: log-node
# ---------------------------------- Network -----------------------------------
# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 0.0.0.0
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
discovery.seed_hosts: ["127.0.0.1"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["log-node"]
[kibana 설치]
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf kibana-7.6.1-linux-x86_64.tar.gz
cd kibana-7.6.1-linux-x86_64/config
vi kibana.yml
-------------------- kibana config ------------------
#kibanaserver host ip
#
server.host: "0.0.0.0"
#
elasticsearch.hosts: ["http://localhost:9200"]
---------------------------------------------------
nohup ./bin/kibana &
[logstash 설치]
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz
tar -xzvf logstash-7.6.1.tar.gz
logstash.conf 파일 작성
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }
remove_field => ["@version"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "access-log-%{+YYYY.MM.dd}"
# 인덱스 네임을 %{[fields][index_name]} 으로 넘겨받을수 있다 - 비츠로부터
#user => "elastic"
#password => "changeme"
}
}
실행은 다음과 같이 &연산자를 활용하여 background로 실행하게 한다.
$ bin/logstash -f config/beat-log.conf & |
logstash -r -f “/home/logstash/test.conf”
앞에서 설명한 -f 명령행 매개변수 외에 -r 플래그도 사용했습니다. 이렇게 하면 Logstash는 구성이 변경되었음을 식별할 때마다 자동으로 구성을 다시 로드합니다. 이것은 특히 개발 중 매우 유용합니다.
롤오버 인덱스 확인 필요함
[filebeat 설치]
https://www.elastic.co/kr/downloads/beats/filebeat
다운 → 압축해제 → 심볼릭링크
$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz
$ tar -zxvf filebeat-7.6.1-linux-x86_64.tar.gz
$ ln -s filebeat-7.6.1-linux-x86_64.tar.gz filebeat
filebeat가 실행될때의 설정파일을 작성해준다.
$ cd filebeat
$ vi access_log.yml
filebeat.inputs:
- type: log
enabled: true
#인덱스네임을 넘겨줄수 있다
fields:
index_name: "my_custom_file_index_name"
paths:
- /~~~/logs/apache/access.log.* # 실제 엑세스 파일의 경로
tail_files: true # filebeat 시작시점 기준 파일 끝에서부터 로깅을 읽기 시작
ignore_older: 1m # filebeat 시작시점 기준 1분전의 내용은 무시
close_inactive: 2m
clean_inactive: 15m
logging.level: info
logging.to_files: true
logging.files: # filebeat가 실행되면서 남기는 로깅파일 정보. 도큐먼트를 읽어보는것을 추천한다.
path: /~~~/logs/filebeat
name: filebeat-log
keepfiles: 7
rotateeverybytes: 524288000
output.logstash: # 최종적으로 output 할 logstash의 정보를 입력해준다.
hosts: ["@.@.@.@:5044"]
$ ./filebeat -c gc_log.yml -d publish &
filebeat를 서버에다 설치를 해보자
자바가 설치 되어있나 보까
java -version
java
apt-get install -y openjdk-9-jdk
염병 서버 ㅅㅂ 이것도 없네
sudo apt install -y openjdk-9-jre-headless
sudo mkdir /elastic
sudo chown ubuntu.ubuntu /elastic/ -R
cd /elastic
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.1-linux-x86_64.tar.gz
tar -zxvf filebeat-7.6.1-linux-x86_64.tar.gz
cd filebeat-7.6.1-linux-x86_64/
cp -af filebeat.yml access-log.yml
chmod go-w /elastic/filebeat-7.6.1-linux-x86_64/access-log.yml
./filebeat -c access-log.yml -d publish &
Exiting: error unpacking config data: more than one namespace configured accessing 'output' (source:'app-log.yml')
sudo apt-get update
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }
remove_field => ["@version","agent","input","tags","cloud","ecs","log"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[fields][index_name]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{IP:clientIp} (?:-|) (?:-|) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:httpMethod} %{URIPATH:uri} %{GREEDYDATA:protocol}(?: HTTP/%{NUMBER})?|-)\" %{NUMBER:responseCode} (?:-|%{NUMBER:num}) \"%{NOTSPACE:url}\" \"%{GREEDYDATA:user_agent}\"" }
remove_field => ["@version"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "access-log-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}