본문 바로가기
WIKI 기술 지식 베이스

Regex conditionals

원문 보기 위키 갱신

출처: 문서

본문

정규식 조건문

수집 파이프라인은 Painless 스크립팅 언어와 함께 정규식(regex)을 사용하여 조건부 로직을 지원해요. 자세한 내용은 Painless 스크립팅 언어를 참조하세요. 이를 통해 텍스트 필드의 구조와 내용에 따라 처리할 문서를 세밀하게 제어할 수 있어요. if 매개변수 내에서 정규식을 사용하여 문자열 패턴을 평가할 수 있어요. 이는 IP 형식 일치, 이메일 주소 유효성 검사, UUID 식별 또는 특정 키워드가 포함된 로그 처리에 특히 유용해요.

예시: 이메일 도메인 필터링

다음 파이프라인은 정규식을 사용하여 @example.com 이메일 도메인의 사용자를 식별하고 해당 문서에 태그를 지정해요:

PUT _ingest/pipeline/tag_example_com_users
{
  "processors": [
    {
      "set": {
        "field": "user_domain",
        "value": "example.com",
        "if": "ctx.email != null && ctx.email =~ /@example.com$/"
      }
    }
  ]
}

{% include copy-curl.html %}

다음 요청을 사용하여 파이프라인을 시뮬레이션해 보세요:

POST _ingest/pipeline/tag_example_com_users/_simulate
{
  "docs": [
    { "_source": { "email": "[email protected]" } },
    { "_source": { "email": "[email protected]" } }
  ]
}

{% include copy-curl.html %}

첫 번째 문서에만 user_domain이 추가돼요:

{
  "docs": [
    {
      "doc": {
        "_source": {
          "email": "[email protected]",
          "user_domain": "example.com"
        }
      }
    },
    {
      "doc": {
        "_source": {
          "email": "[email protected]"
        }
      }
    }
  ]
}

예시: IPv6 주소 감지

다음 파이프라인은 정규식을 사용하여 IPv6 형식의 주소를 식별하고 표시해요:

PUT _ingest/pipeline/ipv6_flagger
{
  "processors": [
    {
      "set": {
        "field": "ip_type",
        "value": "IPv6",
        "if": "ctx.ip != null && ctx.ip =~ /^[a-fA-F0-9:]+$/ && ctx.ip.contains(':')"
      }
    }
  ]
}

{% include copy-curl.html %}

다음 요청을 사용하여 파이프라인을 시뮬레이션해 보세요:

POST _ingest/pipeline/ipv6_flagger/_simulate
{
  "docs": [
    { "_source": { "ip": "2001:0db8:85a3:0000:0000:8a2e:0370:7334" } },
    { "_source": { "ip": "192.168.0.1" } }
  ]
}

{% include copy-curl.html %}

첫 번째 문서에는 IPv6로 설정된 ip_type 필드가 추가돼요:

{
  "docs": [
    {
      "doc": {
        "_source": {
          "ip": "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
          "ip_type": "IPv6"
        }
      }
    },
    {
      "doc": {
        "_source": {
          "ip": "192.168.0.1"
        }
      }
    }
  ]
}

예시: UUID 문자열 검증

다음 파이프라인은 정규식을 사용하여 session_id 필드에 유효한 UUID가 포함되어 있는지 확인해요:

PUT _ingest/pipeline/uuid_checker
{
  "processors": [
    {
      "set": {
        "field": "valid_uuid",
        "value": true,
        "if": "ctx.session_id != null && ctx.session_id =~ /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/"
      }
    }
  ]
}

{% include copy-curl.html %}

다음 요청을 사용하여 파이프라인을 시뮬레이션해 보세요:

POST _ingest/pipeline/uuid_checker/_simulate
{
  "docs": [
    { "_source": { "session_id": "550e8400-e29b-41d4-a716-446655440000" } },
    { "_source": { "session_id": "invalid-uuid-1234" } }
  ]
}

{% include copy-curl.html %}

첫 번째 문서에는 새로운 valid_uuid 필드가 태그로 지정돼요:

{
  "docs": [
    {
      "doc": {
        "_source": {
          "session_id": "550e8400-e29b-41d4-a716-446655440000",
          "valid_uuid": true
        }
      }
    },
    {
      "doc": {
        "_source": {
          "session_id": "invalid-uuid-1234"
        }
      }
    }
  ]
}

더 알아보기 (Learn more)