elk 학습
관련 리소스:
설치 패키지:
elasticsearch 다운로드:https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.2.0/elasticsearch-2.2.0.tar.gz
logstash 다운로드:https://download.elastic.co/logstash/logstash/logstash-2.2.1.tar.gz
kibana 다운로드:https://download.elastic.co/kibana/kibana/kibana-4.4.1-linux-x64.tar.gz
홈 주소:
grok debugger 검증 grok 표현식:https://grokdebug.herokuapp.com/
es 중국어 문서:http://wiki.jikexueyuan.com/project/elasticsearch-definitive-guide-cn/
Elk 중국어 문서:http://kibana.logstash.es/
kibaba 검색 구문:https://segmentfault.com/a/1190000002972420
es 구성:https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html
es 공식 권장 구성:
테스트 명령:
curl localhost:9200/_nodes/stats/process?pretty
시스템 구성:
1. JAVA_ 수정OPTS 스택 크기 지정
2. ulimit-n 65535 이상
3. sysctl -w vm.max_map_count=262144
4. swap 또는 swappiness를 0으로 설정 닫기
5. bootstrap을 설정합니다.mlockall:true, 지정한 tmp 디렉터리를 시작합니다./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir
filebeat 구성:
filebeat:
registry_file: "/usr/local/filebeat/.filebeat"
prospectors:
-
paths:
- /usr/local/nginx/logs/access.log
document_type: type1
-
paths:
- /usr/local/nginx/logs/error.log
document_type: type2
-
paths:
- /usr/local/nginx/logs/other.log
document_type: type3
output:
logstash:
hosts: ["192.168.241.130:5044"]
worker: 1
logstash 구성:
input {
beats {
port => 5044
# ssl => false
# ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
# ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
filter {
if [type] == "type1" {
grok {
patterns_dir => "./patterns"
match => { "message" => "%{NGINXLOG}" }
}
geoip {
source => "remote_addr"
target => "geoip"
database =>"/usr/local/logstash/geoip/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
# , 。
date {
locale => "en"
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate {
remove_field => "timestamp"
}
}
else if [type] == "type2" {
# json, json 。
grok {
patterns_dir => "./patterns/"
match => {"message" => "%{DATETIME:timestamp} \[%{WORD:level}\] %{GREEDYDATA:jsonmessage}"}
}
json {
source => "jsonmessage"
remove_field => ["jsonmessage"]
}
}
else if [type] == "type3" {
#
multiline {
pattern => "^\d{4}\/\d{2}\/\d{2} \d{2}\:\d{2}\:\d{2}"
negate => true
what => previous
}
grok {
patterns_dir => "./patterns/"
match => {"message" => "%{LUALOG}"}
}
#
if "_grokparsefailure" in [tags] {
grok {
patterns_dir => "./patterns"
match => { "message" => "%{NGINX_ERROR_LOG}"}
}
date {
locale => "en"
match => [ "timestamp", "yyyy/MM/dd HH:mm:ss" ]
}
mutate {
remove_field => "timestamp"
}
geoip {
source => "client"
target => "geoip"
database =>"/usr/local/logstash/geoip/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
}
}
}
output {
elasticsearch { hosts => "192.168.241.130"
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
workers => 2
flush_size => 20000
idle_flush_time => 10
}
}
logstash patterns 구성:
# COMMON
DATETIME (?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})
# FOR NGINX
DATETIME (?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})
NGINX_ERROR_DATE_TIME %{YEAR}\/%{MONTHNUM}\/%{MONTHDAY} %{TIME}
NGINXLOG \[%{HTTPDATE:timestamp}\] %{NUMBER:request_time} %{IPORHOST:remote_addr} %{INT:status} %{INT:body_bytes_sent} "%{WORD:method} %{URIPATH:path}(?:%{URIPARAM:param})? HTTP/%{NUMBER:httpversion}" %{QS:http_referer} %{QS:http_user_agent} %{QS:cookie}
NGINX_ERROR_LOG (?<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[%{DATA:err_severity}\] (%{NUMBER:pid:int}#%{NUMBER}: \*%{NUMBER}|\*%{NUMBER}) %{DATA:err_message}(?:, client: (?<client_ip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: %{QS:request})?(?:, host: %{QS:client_ip})?(?:, referrer: \"%{URI:referrer})?
# FOR JAVA
JAVACLASS (?:[a-zA-Z0-9-]+\.)+[A-Za-z0-9$]+
JAVALOGMESSAGE (.*)
CATALINA_EXEC %{WORD}-%{WORD}-%{WORD}
TOMCAT_DATESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})
TOMCAT_ERROR %{TOMCAT_DATESTAMP:timestamp} \[%{CATALINA_EXEC:catalina_exec}\] %{LOGLEVEL:level} %{JAVACLASS:class} - %{JAVALOGMESSAGE_NONGREEDY:logmessage}
%{JAVALOGMESSAGE_NONGREEDY:logmessage}
\t%{GREEDYDATA:fulllogmessge}
# FOR openresty lua
(?<timestamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage}
(?<traceback>\S+ \S+):
(?<coroutine>\S+ \d):\s+(?<function>\[C]: in function 'require')?\s+?(?<func-errmsg>.*>), (client: (?<client_ip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:server})(?:, request: %{QS:request})(?:, host: %{QS:client_ip})
error 형식이 고정되지 않아서 처리하기 어렵고 위의 방법도 개별적인 errorlog만 처리할 수 있습니다.
es 구성:
cluster.name: my-application
bootstrap.mlockall: true
network.host: 192.168.241.130
http.port: 9200
security.manager.enabled: false # hadoop, false
kibana 구성:
elasticsearch.url: "http://192.168.241.130:9200"
일반 명령:
elasticsearch 만료 데이터 정리:
curl -XDELETE 'http://192.168.241.130:9200/logstash-2016.02.24'
구덩이:
1.vim로 감시된 파일을 수정하지 마세요. 저장된 후에 이전에 존재했던 내용도logstash에 전송됩니다.
2. 현재 Filebeat ssl 검증에 문제가 있는 것 같습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.