Logstash Range Filter

728x90

안녕하세요!

오늘은 로그스태시 Range 필터에 대하여 알아보겠습니다.

 

1. Range Filter

range 필터는 특정 필드가 예상 크기/길이 범위 내에 있는지 확인하는 데 사용됩니다. 숫자와 문자열이 지원되며, 숫자는 숫자 값 범위 내에 있는지 문자는 문자열의 길이 범위 내에 있는지 확인합니다. 동일한 필드에 두 개 이상의 범위를 지정할 수 있습니다. 필드 값이 지정된 범위 내에 있으면 이벤트 삭제, 태그 추가, 필드 추가 등의 작업이 수행됩니다.

 

 

 

1. range filter install

 /usr/share/logstash/bin/logstash-plugin install logstash-filter-range

 

 

2. options

negate

기본값은 false이며 유형은 bool 범위 일치 논리를 무효화 합니다.

range {
  negate => false (or true)
  ranges => [ "filedName" , 1000, 5000, "tag:anomaly"]
}

negate를 true로 설정 시 1000~5000의 범위 내의 값이 아니면 tag 추가합니다

 

 

ranges

값의 유형은 배열입니다.
배열은 필트, 최소값, 최대값, 액션 순서입니다.

filter {
  range {
    ranges => [ "message", 0, 10, "tag:short",
                "message", 11, 100, "tag:medium",
                "message", 101, 1000, "tag:long",
                "message", 1001, 1e1000, "drop",
                "duration", 0, 100, "field:latency:fast",
                "duration", 101, 200, "field:latency:normal",
                "duration", 201, 1000, "field:latency:slow",
                "duration", 1001, 1e1000, "field:latency:outlier",
                "requests", 0, 10, "tag:too_few_%{host}_requests" ]
  }
}

 

 

Common Options

  • add_field: 해시 형태로 지정하며, 필드 이름과 값을 추가합니다. 예를 들어, add_field => { "new_field" => "value" }는 "new_field"라는 이름으로 "value"를 추가합니다.
  • add_tag: 배열 형태로 지정하며, 이벤트에 태그를 추가합니다. 예: add_tag => ["tag1", "tag2"].
  • enable_metric: 메트릭 수집을 활성화(true) 또는 비활성화(false)합니다. 기본값은 true입니다.
  • id: 필터 플러그인의 고유 식별자입니다. 이를 사용하여 특정 플러그인을 구분할 수 있습니다.
  • periodic_flush: 주기적으로 플러그인을 플러시할지 여부를 지정합니다. 기본값은 false입니다. 일부 필터에서만 의미가 있습니다.
  • remove_field: 배열로 지정하며, 이벤트에서 특정 필드를 제거합니다. 예: remove_field => ["field1", "field2"].
  • remove_tag: 배열로 지정하며, 이벤트에서 특정 태그를 제거합니다. 예: remove_tag => ["tag1", "tag2"].



2. 적용

 range {
    # negate를 true로 설정하여 1000~5000 이외 값은 anomaly의 태그를 추가하도록 설정
    negate => true
    ranges => [
      "fgSysSesCount", 1000, 5000, "tag:anomaly",
    ]
  }


output {
# anomaly 태그가 있으면 별도의 로그 파일로 저장
 if "anomaly" in [tags] {
    file {
      path => "/root/anomaly/anomalies.log"
    }
  } else {
  elasticsearch {
    hosts => ["https://192.168.123.21:9200"]
    index => "snmp-firewalls-datastream"
    action => "create"
    user => "elastic"
    password => "elastic!"
    cacert => "/etc/logstash/elasticsearch.crt"
  }
  stdout { codec => rubydebug }
 }
}

 

3. 참고

값이 문자열일때

filter {
  mutate {
    convert => { "fgSysSesCount" => "integer" }
  }

  range {
    negate => true
    ranges => [
      ["fgSysSesCount", 1000, 5000, "tag:anomaly"]
    ]
  }
}

소수점도 가능

 range {
    ranges => [
      "fgSysSesCount", 10.023, 1000, "tag:anomaly",
      "fgSysSesCount", 5000, 8000, "tag:anomaly",
    ]
  }

이상입니다.

감사합니다!

 

 

 

 

천사불여일행(千思不如一行) : 천번 생각하는 것보다 한번 행동하는 것이 더 중요하다.

기기일약 불능십보 노마십가 공재불사(騏驥一躍 不能十步 駑馬十駕 功在不舍): 천리마가 한번 크게 뛴다고 하더라도 열 걸음을 나아갈 수 없고 노둔한 말일지라도 열흘 달리면 역시 거기에 미칠 수가 있다.
일의 성과는 멈추지 않고 계속하는 데 있다. (순자, 권학편)

728x90
반응형