logstash 프로필 상세 설명

4556 단어 GeoIP2logback
배경
업무 목적 은 nginx 와 apache 가 매일 발생 하 는 로 그 를 분석 하고 url, ip, rest 인터페이스 등 정 보 를 모니터링 하 며 데 이 터 를 elasticsearch 서비스 에 보 내 는 것 이다.
config
입력
로그 파일 에서 정보 가 져 오기
file {
    path => "/home/keepgostudio/demo/logs/test.log"
    start_position => "beginning"
}       

여과
grok
현 재 는 logstash 에서 비 표준화 로그 데 이 터 를 표준화 하고 데 이 터 를 검색 할 수 있 는 가장 좋 은 방법 입 니 다.Logstash 는 기본적으로 자바 스 택 로그, apache 로 그 를 포함 한 120 가지 형식 을 분석 할 수 있 습 니 다.클릭 하여 보기
특별한 수요 가 없다 면 기본 apache 로그 형식 을 사용 하면 원 하 는 효 과 를 얻 을 수 있 습 니 다. 다음 과 같 습 니 다.
grok{       
    match => {"message" => ["%{COMBINEDAPACHELOG}"]}        
}

그러나 url 의 인자 와 같은 더 많은 정 보 를 감시 하려 면 기본 표현 식 은 우리 의 수 요 를 만족 시 킬 수 없습니다. 이 럴 때 우 리 는 업무 에 필요 한 표현 식 을 직접 작성 하고 logstash 에 게 특정한 기대 방식 으로 데이터 변환 을 하 라 고 알려 야 합 니 다.
우선, logstash 의 루트 디 렉 터 리 에 patterns 폴 더 를 만 듭 니 다. 이 폴 더 는 기본적으로 없습니다.
그 다음 patterns 폴 더 에 파일 test 만 들 기pattern (여 기 는 편 의 를 위해 pattern 의 기능 에 따라 파일 이름 을 짓 지 않 았 습 니 다. 실제 응용 에 서 는 기능 에 따라 파일 이름 을 짓 는 것 이 좋 습 니 다. 이 유 는 알 고 있 습 니 다)test 에서pattern 파일 에 서 는 grok 에서 사용 할 수 있 도록 '이름 정규 표현 식' 과 같은 형식 으로 정규 표현 식 을 정의 할 수 있 습 니 다.
마지막 으로 사용 할 때 patterndir 이 매개 변 수 를 가 져 옵 니 다. 그렇지 않 으 면 logstash 에서 사용자 정의 정규 표현 식 을 식별 할 수 없습니다.
grok {
    patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"]
    match => {
        "message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"]
    }
    remove_field => ["host", "timestamp", "httpversion", "@version"]
}

kv
데이터 원본 을 키 쌍 으로 변환 하고 상대 적 인 field 를 만 듭 니 다.예 를 들 어 'a = 111 & b = 2222 & c = 3333' 을 입력 하고 출력 할 때 a, b, c 는 세 개의 field 로 만들어 집 니 다. 이렇게 하 는 장점 은 특정한 인 자 를 조회 해 야 할 때 한 문자열 을 검색 해서 해석 하 는 것 이 아니 라 직접 조회 할 수 있 습 니 다.
kv {
    source => "field_name"
    field_split => "&?"
}

geoip
이것 은 말 그대로 그의 기능 을 알 수 있 고 ip 에 따라 해당 하 는 지리 정 보 를 찾 을 수 있다. 예 를 들 어 도시, 성, 국가, 경위도 등 이다.이 ip 정 보 는 logstash 의 데이터 원본 에서 검색 하 는 것 이지 인터넷 검색 을 하 는 것 이 아 닙 니 다.
geoip {
    source => "field_name"
    fields => ["country_name", "region_name", "city_name", "latitude", "longitude"]
    target => "location"
}

drop
drop 은 통계 하고 싶 지 않 은 로그 정 보 를 건 너 뛸 수 있 습 니 다. 로그 정보 가 if 규칙 에 맞 을 때 이 정 보 는 out 에 나타 나 지 않 습 니 다. logstash 는 다음 로 그 를 직접 분석 합 니 다.
if [field_name] == "value" {
    drop {}
}

출력
logstash 가 elasticsearch 에 출력 할 때 모든 기록 에 무 작위 로 id 를 생 성 합 니 다.처음 접촉 할 때 수 동 으로 입력 하 는 것 을 권장 합 니 다.이렇게 elasticsearch 의 서 비 스 를 결합 하면 전체 실현 절 차 를 이해 하기 쉽다.
elasticsearch {
    hosts => ["192.168.1.44:9200"]      
    index => "logstash-test-%{type}-%{host}"        
}

부록
test.config
input {
    stdin {}
}

filter {
    grok {
        patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"]
        match => {
            "message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"]
        }
        remove_field => ["host", "timestamp", "httpversion", "@version"]
    }

    kv {
        source => "params"
        field_split => "&?"
    }

    geoip {
        source => "ip"
        fields => ["country_name", "region_name", "city_name", "latitude", "longitude"]
        target => "location"
}

output {
    elasticsearch {
        hosts => ["192.168.1.44:9200"]      
        index => "logstash-test-%{type}-%{host}"        
    }

}

test_pattern
HTTP_URL \S+(?=\?)
HTTP_URL_WITH_PARAMS "(?:%{WORD:method} %{HTTP_URL:url}\?%{NOTSPACE:params}(?: HTTP/%{NUMBER:httpversion}))"
HTTP_URL_WITHOUT_PARAMS "(?:%{WORD:method} %{NOTSPACE:url}(?: HTTP/%{NUMBER:httpversion}))"
NO_PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITHOUT_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}
PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITH_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}

좋은 웹페이지 즐겨찾기