logstash (3): 필터 와 grok
6399 단어 logstash
grok 에 서 는 정규 표현 식 으로 필요 한 정 보 를 추출 하 는 것 을 지원 합 니 다. 그 중에서 정규 표현 식 은 두 가지 로 나 뉘 는데 하 나 는 내 장 된 정규 표현 식 (대부분의 요 구 를 만족 시 킬 수 있 습 니 다) 이 고 하 나 는 사용자 정의 정규 표현 식 입 니 다. 형식 은 다음 과 같 습 니 다.
# , IP , sip
%{IP:sip}
# , (? ?), , , log_type
(?<log_type>[^,]+?)
구체 적 인 예 를 들 어 grok 용법 을 설명 하고 분석 해 야 할 메시지 내용 샘플 은 다음 과 같다 고 가정 합 니 다.
: , IP:192.168.101.251, :63726, IP:124.127.48.41, :1390, : , : , : , URL:-\n
우리 의 정규 표현 식 이 정확 한 지 빠르게 판단 하기 위해 서 는 온라인 테스트 를 진행 하 는 것 이 좋 습 니 다. 주 소 는 (온라인 테스트 주소) [입 니 다.http://grokdebug.herokuapp.com/], 마지막 결 과 는:
^ :(?<log_type>[^,]+?), IP:%{IP:sip}, :%{NUMBER:sport:int}, IP:%{IP:dip}, :%{NUMBER:dport:int}, :(?<att_type>[^,]+?), :(?<slevel>[^,]{1,}?), :(?<sys_act>[^,]{1,}?), URL:(?<url>.+)$
위의 표현 식 에서 정규 표현 식 의 해석 효율 을 높이 기 위해 서 는 전체 줄 이 일치 해 야 합 니 다. 그래서 정규 표현 식 의 시작 과 끝 문자 '^ $' 를 추 가 했 습 니 다. 또한 통계 와 분석 에 편리 하도록 관련 유형 을 변환 해 야 합 니 다. 예 를 들 어 우리 가 필요 로 하 는 포트 는 정수 이 고 표현 식 은% 입 니 다.{NUMBER: dport: int}. 주의해 야 할 것 은 grok 도 두 가지 데이터 형식 변환 을 지원 합 니 다. 각각 float 와 int 입 니 다.
완전한 logstash 설정 파일 은 다음 과 같 습 니 다.
input {
# syslog
syslog {
port => "514"
}
}
filter {
grok {
match => {
"message" => [
"^ :(?[^,]+?), IP:%{IP:sip}, :%{NUMBER:sport:int}, IP:%{IP:dip}, :%{NUMBER:dport:int}, :(?[^,]+?), :(?[^,]{1,}?), :(?[^,]{1,}?), URL:(?.+)$" ,
"^ :(?[^,]+?), :(?[^,]+?), / :%{IP:sport}, \(KB\):%{NUMBER:sflow:int}, \(KB\):%{NUMBER:dflow:int}, \(KB\):%{NUMBER:all_flow:int}$"
]
}
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
# elasticsearch
hosts => ["192.168.101.204"]
index => "logstash-%{+YYYY.MM.dd}"
ssl => false
}
}
조작 과정 에서 관련 문제 의 해결 방법:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
파일 수량 제한 해결 방법:
#
sysctl -w vm.max_map_count=999999
#
ulimit -n 999999
연결 할 수 없 는 오류 정보:
[2017-08-08T02:32:08,035][ERROR][logstash.outputs.elasticsearch]
Attempted to send a bulk request to elasticsearch,
but no there are no living connections in the connection pool.
Perhaps Elasticsearch is unreachable or down?
{:error_message=>"No Available connections", :class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError", :will_retry_in_seconds=>32}
해결 방법: 1. 설정 파일 의 elasticsearch 서비스 주 소 를 자세히 검사 합 니 다. 2. elasticsearch 가 도 메 인 설정 을 열 었 는 지 자세히 확인 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
logstash:grok 대신dissect로 성능을 향상시킵니다.파이프의 성능을 향상시키는 간단한 방법은 다른 필터로 대체할 수 있는지 확인하는 것이다grok.내가 계속 grok 로 대체하고 있는 필터는 dissect 필터다.grok과dissect 사이의 주요 차이점은 disse...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.