2022년 4월 10일 일요일

엘라스틱의 해시 변환

method

  • This is a required setting.
  • Value can be any of: SHA1SHA256SHA384SHA512MD5MURMUR3IPV4_NETWORKUUIDPUNCTUATION
  • Default value is "SHA1"
로그스태시 fingerprint 필터가 지원하는 해시 함수 중 SHA와 MD5를 이용한 해시값은 모두 16진수.
filter {
 mutate {
  remove_field => ["@version", "@timestamp", "path", "host"]
 }

 fingerprint {}
}
[2022-04-10T18:41:34,125][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
    "fingerprint" => "8fbd8e994261eca5615206e1874503a2813e59e1",
        "message" => "test!@\r"
}

그런데 MURMUR3은 해시값을 숫자로 제공한다.
filter {
 mutate {
  remove_field => ["@version", "@timestamp", "path", "host"]
 }

 fingerprint {
  method => "MURMUR3"
 }
}
[2022-04-10T18:42:07,103][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
    "fingerprint" => 3212681722,
        "message" => "test!@\r"
}

Beats 역시 fingerprint 프로세서를 제공한다

method
(Optional) Algorithm to use for computing the fingerprint. Must be one of: md5sha1sha256sha384sha512xxhash. Default is sha256.
processors:
  - drop_fields:
      fields: [ "log", "input", "ecs", "host", "agent" ]
  - fingerprint:
      fields: "message"
{
  "@timestamp": "2022-04-10T09:47:07.229Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.1.0"
  },
  "message": "test!@",
  "fingerprint": "a12813f5c5d23638655f15b27404f66b3577f0d9272470565f60c5260da37922"
}

그런데 MURMUR3은 지원하지 않음. 하지만 언제나 방법은 있다. 자바스크립트의 진수 변환 기능 활용.
processors:
  - drop_fields:
      fields: [ "log", "input", "ecs", "host", "agent" ]
  - fingerprint:
      fields: "message"
  - script:
      lang: javascript
      source: >
        function process(hash2num) {
          hash2num.Put("hash2num", parseInt(hash2num.Get("fingerprint"), 16))
        }
{
  "@timestamp": "2022-04-10T09:49:12.441Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.1.0"
  },
  "hash2num": 7.289318026369755e+76,
  "message": "test!@",
  "fingerprint": "a12813f5c5d23638655f15b27404f66b3577f0d9272470565f60c5260da37922"
}

해시값을 숫자로 바꾸면 뭐가 좋을까? 데이터 분석은 통계 분석이며, 통계 분석은 정량적인 수치화를 통해 데이터의 상태를 파악하는 방법이다. 그래서 보고 싶은 데이터의 상태가 무엇인지, 그 상태를 숫자로 바꿀 수 있는지에 대한 답을 구할 수 있으면 데이터 분석이 쉬워진다.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스