Elastic Stack-05-Filebeat-Logstash-Elasticsearch
10642 단어 Elasticelasticsearch
이 문서 의 목적 은 앞의 몇 편 에서 말 한 지식 점 을 연결 시 켜 종합 적 으로 사용 하고 최종 적 으로 생산 에 사용 할 수 있 는 간단 한 배치 방안 이 라 고 부 르 는 것 이다.
Filebeat 를 사용 하여 Nginx 로 그 를 수집 하고 Logstash 로 출력 한 다음 Logstash 로 데 이 터 를 처리 한 후 Elasticsearch 로 출력 합 니 다.
2. 배치 절차
1 Elasticsearch
1 elasticsearch.yml
cluster.name: elk
node.name: ela1
node.data: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts:
- 192.168.122.6
- 192.168.122.106:9300
- 192.168.122.218
cluster.initial_master_nodes: ["ela1", "ela2", "ela3"]
2 elasticsearch.yml
cluster.name: elk
node.name: ela2
node.data: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts:
- 192.168.122.6
- 192.168.122.106:9300
- 192.168.122.218
cluster.initial_master_nodes: [ela1, ela2, ela3]
3 elasticsearch.yml
cluster.name: elk
node.name: ela3
node.data: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts:
- 192.168.122.6
- 192.168.122.106:9300
- 192.168.122.218
cluster.initial_master_nodes: [ela1, ela2, ela3]
2 Logstash
first-pipeline.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
remove_field => [ "message" ]
}
geoip {
source => "clientip"
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
# elasticsearch
hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
}
}
3 Filebeat
filebeat.yml
filebeat.inputs:
- type: log
enabled: false
paths:
- /var/log/*.log
- type: filestream
enabled: false
paths:
- /var/log/*.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.logstash:
hosts: ["localhost:5044"]
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
modules.d/nginx.yml
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log"]
error:
enabled: true
시동
1 Elasticsearch 그룹 시작 및 검증
클 러 스 터 의 모든 노드 는 다음 명령 을 수행 합 니 다.
./bin/elasticsearch -d -p /tmp/pid
임의의 노드 에서 클 러 스 터 상 태 를 검증 합 니 다.
군집 건강 상태
[root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/health"
1609235083 09:44:43 elk green 3 3 8 4 0 0 0 0 - 100.0%
클 러 스 터 노드 정보
[root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/nodes"
192.168.122.6 20 83 0 0.11 0.10 0.07 cdhilmrstw - ela1
192.168.122.218 12 88 0 0.02 0.02 0.05 cdhilmrstw - ela3
192.168.122.106 45 92 0 0.00 0.01 0.05 cdhilmrstw * ela2
2 Logstash 시작
시작 하지 않 았 거나 설정 파일 을 자동 으로 불 러 오지 않 았 다 면 다시 시작 해 야 합 니 다.
./bin/logstash -f first-pipeline.conf --config.reload.automatic
3 Filebeat 시작
시작 하지 않 았 다 면 다시 시작 해 야 합 니 다.
nohup ./filebeat &
검증
1 로그 파일 에 로그 메모 리 를 입력 하 는 것 을 받 았 습 니 다.
echo '10.9.29.211 - - [29/Dec/2020:17:43:09 +0800] "GET /35949/bundles/plugin/uptime/uptime.plugin.js HTTP/1.1" 200 5869 "http://10.9.12.250:8080/app/home" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat" "-"' >> /var/log/nginx/access.log
2 Logstash 터미널 보기
응용 에 상응하는 출력 이 있다
{
"fileset" => {
"name" => "access"
},
"log" => {
"offset" => 193560,
"file" => {
"path" => "/var/log/nginx/access.log"
}
},
"host" => {
"mac" => [
[ 0] "78:2b:cb:64:4e:25",
[ 1] "78:2b:cb:64:4e:27",
[ 2] "78:2b:cb:64:4e:29",
[ 3] "78:2b:cb:64:4e:2b"
],
"hostname" => "prod",
"name" => "prod",
"containerized" => false,
"os" => {
"codename" => "Core",
"name" => "CentOS Linux",
"family" => "redhat",
"version" => "7 (Core)",
"platform" => "centos",
"kernel" => "3.10.0-957.el7.x86_64"
},
"ip" => [
[ 0] "10.9.12.250",
[ 1] "fe80::7a2b:cbff:fe64:4e25",
[ 2] "192.168.122.1"
],
"id" => "e14bb5e04254411da829c0bc6beedbf3",
"architecture" => "x86_64"
},
"request" => "/35949/bundles/plugin/uptime/uptime.plugin.js",
"auth" => "-",
"ecs" => {
"version" => "1.5.0"
},
"@timestamp" => 2020-12-29T09:46:49.093Z,
"agent" => {
"hostname" => "prod",
"name" => "prod",
"version" => "7.10.0",
"type" => "filebeat",
"ephemeral_id" => "bfeb1d8f-d791-4706-9001-8ea26bd7557e",
"id" => "153bb637-ba53-4b3e-888d-7f60db4aa877"
},
"service" => {
"type" => "nginx"
},
"verb" => "GET",
"bytes" => "5869",
"referrer" => "\"http://10.9.12.250:8080/app/home\"",
"geoip" => {},
"ident" => "-",
"@version" => "1",
"timestamp" => "29/Dec/2020:17:43:09 +0800",
"response" => "200",
"tags" => [
[0] "beats_input_codec_plain_applied",
[1] "_geoip_lookup_failure"
],
"input" => {
"type" => "log"
},
"clientip" => "10.9.29.211",
"httpversion" => "1.1",
"event" => {
"dataset" => "nginx.access",
"module" => "nginx",
"timezone" => "+08:00"
}
}
3 Elasticsearch 가 색인 을 만 들 었 는 지 확인
[root@prod logstash]# curl -X GET "192.168.122.6:9200/_cat/indices"
green open logstash-2020.12.29-000001 IgYwIwXVTeSqc6f4SGAa3Q 1 1 2 0 118.4kb 59.2kb
현재
logstash-2020.12.29-000001
는 Elasticsearch 가 자동 으로 만 든 색인 입 니 다.5. 필요 한 색인 만 들 기
이전 검색 에서 알 수 있 듯 이 색인 은 Elasticsearch 가 자동 으로 만 들 어 졌 지만 생산 에서 원 하 는 것 이 아 닙 니 다.
비교적 좋 은 건 의 는:
access.log
의 내용 을 색인 에 따로 넣 습 니 다.error.log
의 내용 을 다른 색인 에 따로 넣 습 니 다.1 프로필 업데이트
프로필 업데이트 후의 모습:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
remove_field => [ "message" ]
}
geoip {
source => "clientip"
}
}
output {
stdout {
codec => rubydebug
}
if [event][dataset] == "nginx.access" {
elasticsearch {
# elasticsearch
hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
# , MySQL
index => "nginx-access-%{+YYYY.MM.dd}"
}
} else if [event][dataset] == "nginx.error" {
elasticsearch {
# elasticsearch
hosts => ["192.168.122.6:9200","192.168.122.106:9200","192.168.122.218:9200"]
# , MySQL
index => "nginx-error-%{+YYYY.MM.dd}"
}
}
}
2 관련 로그 파일 에 새 로그 내용 추가
각각 두 개의 테스트 로그 파일 에 새 로그 내용 을 추가 합 니 다.
asscess.log
echo '10.9.29.211 - - [29/Dec/2020:17:43:09 +0800] "GET /35949/bundles/plugin/uptime/uptime.plugin.js HTTP/1.1" 200 5869 "http://10.9.12.250:8080/app/home" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1301.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat" "-"' >> /var/log/nginx/access.log
error.log
echo '2020/12/29 15:25:10 [warn] 3380#3380: *161 an upstream response is buffered to a temporary file /var/cache/nginx/proxy_temp/5/00/0000000005 while reading upstream, client: 10.9.29.234, server: localhost, request: "GET /35949/bundles/plugin/data/data.plugin.js HTTP/1.1", upstream: "http://127.0.0.1:5601/35949/bundles/plugin/data/data.plugin.js", host: "10.9.12.250:8080", referrer: "http://10.9.12.250:8080/app/home"' >> /var/log/nginx/error.log
3 Elasticsearch 군집 의 색인 검증
[root@ela1 ~]# curl -X GET "192.168.122.6:9200/_cat/indices"
green open logstash-2020.12.29-000001 IgYwIwXVTeSqc6f4SGAa3Q 1 1 212 0 1.1mb 648.6kb
green open nginx-access-2020.12.29 ien9RLwPTM2w0P_Vebrr3w 1 1 1 0 66.6kb 33.3kb
green open nginx-error-2020.12.29 Bn0SV7i7STGVANn4x0mj4g 1 1 1 0 56.2kb 28.1kb
logstash-2020.12.29-000001
원래 거 예요.nginx-access-2020.12.29
와 nginx-error-2020.12.29
는 새로 설립 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Elasticsearch 베이스 04 - 매핑된 작업버전 정보 버전 Elasticsearch 버전 JAVA 의존 버전 Elasticsearch 7.x는 이전 버전과 상당히 큰 변화가 있기 때문에 본 편의 내용, 특히 JAVA 코드의 조작은 이전 버전을 사용하는 학우들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.