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"
}
}
}
]
}