logstash (3): 필터 와 grok

6399 단어 logstash
logstash 에서 입력 데이터 흐름 을 설정 한 다음 에 데 이 터 를 분석 하 는 것 입 니 다. 가장 간단 한 방법 은 필터 (filter) 와 grok 의 조합 을 사용 하 는 것 입 니 다.
grok 에 서 는 정규 표현 식 으로 필요 한 정 보 를 추출 하 는 것 을 지원 합 니 다. 그 중에서 정규 표현 식 은 두 가지 로 나 뉘 는데 하 나 는 내 장 된 정규 표현 식 (대부분의 요 구 를 만족 시 킬 수 있 습 니 다) 이 고 하 나 는 사용자 정의 정규 표현 식 입 니 다. 형식 은 다음 과 같 습 니 다.
#           ,                IPsip
%{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 가 도 메 인 설정 을 열 었 는 지 자세히 확인 합 니 다.

좋은 웹페이지 즐겨찾기