12 정규 표현식

원본 보기

12 정규 표현식

개요

Perl Compatible Regular Expressions (PCRE, PCRE2)는 Zabbix에서 지원됩니다.

Zabbix에서 정규 표현식을 사용하는 방법은 두 가지가 있습니다:

  • 정규 표현식을 수동으로 입력하기
  • Zabbix에서 생성된 전역 정규 표현식 사용하기

정규 표현식

지원되는 위치에서 정규 표현식을 수동으로 입력할 수 있습니다. @ 기호는 Zabbix에서 전역 정규 표현식을 참조하는 데 사용되므로 표현식은 @로 시작할 수 없습니다.

정규 표현식을 사용할 때 스택이 부족해질 수 있습니다. 자세한 정보는 pcrestack man 페이지를 참조하세요.

여러 줄 매칭에서 ^$ 앵커는 전체 문자열의 시작/끝이 아닌 각 줄의 시작/끝에 각각 일치한다는 점에 유의하세요.

다양한 컨텍스트에서의 올바른 이스케이핑 예제도 참조하세요.

전역 정규 표현식

Zabbix 프론트엔드에는 복잡한 정규 표현식을 생성하고 테스트할 수 있는 고급 편집기가 있습니다.

이런 방식으로 정규 표현식이 생성되면, 이름 앞에 @를 붙여서 참조함으로써 프론트엔드의 여러 위치에서 사용할 수 있습니다. 예를 들어, \@mycustomregexp.

전역 정규 표현식을 생성하려면:

  • 이동: Administration → General
  • 드롭다운에서 Regular expressions 선택
  • New regular expression 클릭

Expressions 탭에서는 정규 표현식 이름을 설정하고 하위 표현식을 추가할 수 있습니다.

모든 필수 입력 필드는 빨간 별표로 표시됩니다.

매개변수 설명
Name 정규 표현식 이름을 설정합니다. 모든 유니코드 문자가 허용됩니다.
Expressions Expressions 블록에서 Add를 클릭하여 새 하위 표현식을 추가합니다.
Expression type 표현식 유형을 선택합니다:
Character string included - 부분 문자열과 일치
Any character string included - 구분된 목록의 모든 부분 문자열과 일치. 구분된 목록에는 쉼표(,), 점(.) 또는 슬래시(/)가 포함됩니다.
Character string not included - 부분 문자열을 제외한 모든 문자열과 일치
Result is TRUE - 정규 표현식과 일치
Result is FALSE - 정규 표현식과 일치하지 않음
Expression 부분 문자열/정규 표현식을 입력합니다.
Delimiter 정규 표현식에서 텍스트 문자열을 구분하는 쉼표(,), 점(.) 또는 슬래시(/). 이 매개변수는 "Any character string included" 표현식 유형이 선택된 경우에만 활성화됩니다.
Case sensitive 정규 표현식이 대소문자를 구분하는지 여부를 지정하는 체크박스입니다.

표현식에서 슬래시(/)는 구분자가 아닌 문자 그대로 처리됩니다. 이런 방식으로 슬래시가 포함된 표현식을 오류 없이 저장할 수 있습니다.

Zabbix의 사용자 정의 정규 표현식 이름에는 쉼표, 공백 등이 포함될 수 있습니다. 참조할 때 잘못 해석될 수 있는 경우(예: 아이템 키의 매개변수에 쉼표가 있는 경우) 전체 참조를 다음과 같이 따옴표로 묶을 수 있습니다: "\@My custom regexp for purpose1, purpose2".
정규 표현식 이름은 다른 위치(예: LLD 규칙 속성)에서는 따옴표로 묶지 않아야 합니다.

Test 탭에서는 테스트 문자열을 제공하여 정규 표현식과 하위 표현식을 테스트할 수 있습니다.

결과는 각 하위 표현식의 상태와 전체 사용자 정의 표현식 상태를 보여줍니다.

전체 사용자 정의 표현식 상태는 Combined result로 정의됩니다. 여러 하위 표현식이 정의된 경우 Zabbix는 AND 논리 연산자를 사용하여 Combined result를 계산합니다. 즉, 하나라도 Result가 False인 경우 Combined result도 False 상태가 됩니다.

기본 전역 정규 표현식

Zabbix는 기본 데이터셋에 여러 전역 정규 표현식을 제공합니다.

이름 표현식 일치 항목
디스커버리용 파일 시스템 ^(btrfs|ext2|ext3|ext4|jfs|reiser|xfs|ffs|ufs|jfs|jfs2|vxfs|hfs|refs|apfs|ntfs|fat32|zfs)$ "btrfs" 또는 "ext2" 또는 "ext3" 또는 "ext4" 또는 "jfs" 또는 "reiser" 또는 "xfs" 또는 "ffs" 또는 "ufs" 또는 "jfs" 또는 "jfs2" 또는 "vxfs" 또는 "hfs" 또는 "refs" 또는 "apfs" 또는 "ntfs" 또는 "fat32" 또는 "zfs"
디스커버리용 네트워크 인터페이스 ^Software Loopback Interface "Software Loopback Interface"로 시작하는 문자열
^lo$ "lo"
^(In)?[Ll]oop[Bb]ack[0-9._]*$ 선택적으로 "In"으로 시작하고, "L" 또는 "l", "oop", "B" 또는 "b", "ack"가 오며, 이후 선택적으로 임의의 숫자, 점 또는 밑줄이 올 수 있는 문자열
^NULL[0-9.]*$ "NULL"로 시작하고 선택적으로 임의의 숫자 또는 점이 올 수 있는 문자열
^[Ll]o[0-9.]*$ "Lo" 또는 "lo"로 시작하고 선택적으로 임의의 숫자 또는 점이 올 수 있는 문자열
^[Ss]ystem$ "System" 또는 "system"
^Nu[0-9.]*$ "Nu"로 시작하고 선택적으로 임의의 숫자 또는 점이 올 수 있는 문자열
SNMP 디스커버리용 저장 장치 ^(Physical memory|Virtual memory|Memory buffers|Cached memory|Swap space)$ "Physical memory" 또는 "Virtual memory" 또는 "Memory buffers" 또는 "Cached memory" 또는 "Swap space"
디스커버리용 Windows 서비스 이름 ^(MMCSS|gupdate|SysmonLog|clr_optimization_v2.0.50727_32|clr_optimization_v4.0.30319_32)$ "MMCSS" 또는 "gupdate" 또는 "SysmonLog" 또는 "clr_optimization_v2.0.50727_32" 및 "clr_optimization_v4.0.30319_32"와 같은 문자열(점 대신 개행 문자를 제외한 모든 문자가 올 수 있음)
디스커버리용 Windows 서비스 시작 상태 ^(automatic|automatic delayed)$ "automatic" 또는 "automatic delayed"

예제

예제 1

특정 이름의 데이터베이스를 제외한 데이터베이스를 발견하기 위해 저수준 발견에서 다음 표현식을 사용:

^TESTDATABASE$

regexp\_expr\_2.png

선택된 Expression type: "Result is FALSE". "TESTDATABASE" 문자열이 포함된 이름과 일치하지 않습니다.

인라인 정규식 수정자 예제

문자 "error"와 일치시키기 위해 인라인 수정자 (?i)를 포함하는 다음 정규식의 사용:

(?i)error

regexp\_expr\_3a.png

선택된 Expression type: "Result is TRUE". 문자 "error"가 일치됩니다.

인라인 정규식 수정자를 사용한 또 다른 예제

특정 라인 이후의 문자들을 매치하기 위해 여러 인라인 수정자를 포함한 다음 정규식을 사용합니다:

(?<=match (?i)everything(?-i) after this line\n)(?sx).*# we add s modifier to allow . match newline characters

regexp\_expr\_4\_new.png

선택된 표현식 타입: "Result is TRUE". 특정 라인 이후의 문자들이 매치됩니다.

g 수정자는 인라인으로 지정할 수 없습니다. 사용 가능한 수정자 목록은 pcresyntax man page에서 확인할 수 있습니다. PCRE 구문에 대한 자세한 정보는 PCRE HTML documentation을 참고하세요.

위치별 정규표현식 지원

위치 정규표현식 전역 정규표현식 다중라인 매칭 설명
에이전트 아이템
eventlog[] regexp, severity, source, eventid 매개변수
eventlog.count[] regexp, severity, source, eventid 매개변수
log[] regexp 매개변수
log.count[]
logrt[] 예/아니오 regexp 매개변수는 둘 다 지원, file_regexp 매개변수는 비전역 표현식만 지원
logrt.count[]
proc.cpu.util[] 아니오 아니오 cmdline 매개변수
proc.get[]
proc.mem[]
proc.num[]
sensor[] Linux 2.4에서 devicesensor 매개변수
system.hw.macaddr[] interface 매개변수
system.sw.packages[] regexp 매개변수
system.sw.packages.get[] regexp 매개변수
vfs.dir.count[] regex_incl, regex_excl, regex_excl_dir 매개변수
vfs.dir.get[] regex_incl, regex_excl, regex_excl_dir 매개변수
vfs.dir.size[] regex_incl, regex_excl, regex_excl_dir 매개변수
vfs.file.regexp[] regexp 매개변수
vfs.file.regmatch[]
web.page.regexp[]
SNMP 트랩
snmptrap[] 아니오 regexp 매개변수
아이템 값 전처리 아니오 아니오 pattern 매개변수
트리거/계산 아이템 함수
count() operator 매개변수가 regexp 또는 iregexp인 경우 pattern 매개변수
countunique()
find()
logeventid() 아니오 pattern 매개변수
logsource()
로우레벨 디스커버리
필터 아니오 정규표현식 필드
재정의 아니오 작업 조건의 일치함, 일치하지 않음 옵션
액션 조건 아니오 아니오 호스트명호스트 메타데이터 자동등록 조건의 일치함, 일치하지 않음 옵션
스크립트 아니오 입력 유효성 검사 규칙 필드
웹 모니터링 아니오 regex: 접두사가 있는 변수
필수 문자열 필드
사용자 매크로 컨텍스트 아니오 아니오 regex: 접두사가 있는 매크로 컨텍스트
매크로 함수
regsub() 아니오 아니오 pattern 매개변수
iregsub()
아이콘 매핑 아니오 표현식 필드
값 매핑 아니오 아니오 매핑 타입이 regexp인 경우 필드

다음 단계는?