Zabbix의 로그 감시에서 output 지정을 한 경우 regexp에는 엄밀하게 정규 표현식을 쓰는 것이 좋다는 이야기
4207 단어 zabbix
이 기사는?
Zabbix 로그 모니터링
로그 모니터링 모니터링 설정 형식
자세한 내용은 Zabbix3.4의 웹 매뉴얼을 참조하십시오.
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
or
logrt[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
매개변수
필수/선택
설정 내용
파일
필수
로그 감시의 파일명을 풀 패스로 지정.
regexp
선택
필터링하는 캐릭터 라인을 정규 표현으로 지정.
encoding
선택
문자 코드를 지정. Linux의 경우 iconv -l 결과에서 Windows의 경우 코드 페이지 식별자의 Identifier 또는 .NET Name을 지정합니다.
maxlines
선택
zabbix_agentd가 읽고 보내는 로그의 최대 행 수 제한. zabbix_agentd.conf의 MaxLinesPerSecond 값을 재정의합니다.
mode
선택
all 또는 skip을 지정하여 감시 데이터를 어디에서 읽을지 지정합니다. 기본값은 all.
output
선택
regexp에서 그룹화된 위치를\0,\1,\2 ..\9까지 구분하여 출력한다.
maxdelay
선택
대량으로 로그가 발생했을 경우 등에 로그 지연이 발생하는 것을 막기 위해, 최신 로그의 시간+지정 시간까지의 로그를 지연이 발생하지 않도록, 읽어내도록 하는 시간을 지정한다
output 지정으로 무엇을 할 수 있는지
🌸씨의 기사 Zabbix 3.0의 새로운 기능: 로그 파일에서 숫자를 가져옵니다. 하지만 소개되고 있듯이,
로그의 잘라내기나, 로그로부터 수치형 데이터의 취득·그래프화를 할 수 있게 되었습니다.
나는 BIND (DNS)의 로그 감시 등에 상당히 사용하고 있습니다.
그래서 정규식이 엄밀하지 않으면 어떻게 되는 거야?
예를 들어, 이러한 로그가 출력되면 ...
zabbix_agent.conf에서 EnableRemoteCommands와 LogRemoteCommands를 활성화 (1)하고,
zabbix_get에서 다음 system.run 항목을 가져옵니다.
$ zabbix_get -s ServerName -p 10050 -k "system.run[echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12,wait]"
그러면 zabbix_agentd.log에 다음과 같이 로깅됩니다.
3644:20170111:160652.658 Executing command 'echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12'
모니터링 설정을 수행하고 필터링하여 선택합니다.
필터 조건으로 "echo (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*)"설정을 시도합니다.
output을 지정하기 전 단계에서는 다음과 같이 얻을 수 있습니다.
가정에서는 ...?
다음과 같이 하려고 했습니다.
output
취득값
\0
echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12 '
\1
Msg01
\2
Msg02
\3
Msg03
\4
Msg04
\5
Msg05
\6
Msg06
\7
Msg07
\8
Msg08
\9
Msg09 Msg10 Msg11 Msg12
실제로 이렇게 되었다
결과를 돈.
output
취득값
\0
echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12 '
\1
Msg01 Msg02 Msg03
\2
Msg04
\3
Msg05
\4
Msg06
\5
Msg07
\6
Msg08
\7
Msg09
\8
Msg10
\9
Msg11
결과로
아무래도 전부터 퍼스 해 주고 있다고 생각했습니다만,
분명 Zabbix에서 사용하는 정규 표현 엔진은 뒤에서 퍼스하는 것 같고,
Msg01부터 차례로 구분해주지 않았다.
한 줄의 로그에서 여러 데이터를 얻고 싶다면,
"어느 정도 정규 표현을 엄밀하게 해, 원래 로그 데이터의 범위를 좁힌다"
"뒤에서 파스되는 것을 걱정하면서 그룹화한다"
라는 것을 머리의 한 구석에 두면 좋을지도 모른다.
이상
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
or
logrt[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>]
예를 들어, 이러한 로그가 출력되면 ...
zabbix_agent.conf에서 EnableRemoteCommands와 LogRemoteCommands를 활성화 (1)하고,
zabbix_get에서 다음 system.run 항목을 가져옵니다.
$ zabbix_get -s ServerName -p 10050 -k "system.run[echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12,wait]"
그러면 zabbix_agentd.log에 다음과 같이 로깅됩니다.
3644:20170111:160652.658 Executing command 'echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12'
모니터링 설정을 수행하고 필터링하여 선택합니다.
필터 조건으로 "echo (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*) (.*)"설정을 시도합니다.
output을 지정하기 전 단계에서는 다음과 같이 얻을 수 있습니다.
가정에서는 ...?
다음과 같이 하려고 했습니다.
output
취득값
\0
echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12 '
\1
Msg01
\2
Msg02
\3
Msg03
\4
Msg04
\5
Msg05
\6
Msg06
\7
Msg07
\8
Msg08
\9
Msg09 Msg10 Msg11 Msg12
실제로 이렇게 되었다
결과를 돈.
output
취득값
\0
echo Msg01 Msg02 Msg03 Msg04 Msg05 Msg06 Msg07 Msg08 Msg09 Msg10 Msg11 Msg12 '
\1
Msg01 Msg02 Msg03
\2
Msg04
\3
Msg05
\4
Msg06
\5
Msg07
\6
Msg08
\7
Msg09
\8
Msg10
\9
Msg11
결과로
아무래도 전부터 퍼스 해 주고 있다고 생각했습니다만,
분명 Zabbix에서 사용하는 정규 표현 엔진은 뒤에서 퍼스하는 것 같고,
Msg01부터 차례로 구분해주지 않았다.
한 줄의 로그에서 여러 데이터를 얻고 싶다면,
"어느 정도 정규 표현을 엄밀하게 해, 원래 로그 데이터의 범위를 좁힌다"
"뒤에서 파스되는 것을 걱정하면서 그룹화한다"
라는 것을 머리의 한 구석에 두면 좋을지도 모른다.
이상
Reference
이 문제에 관하여(Zabbix의 로그 감시에서 output 지정을 한 경우 regexp에는 엄밀하게 정규 표현식을 쓰는 것이 좋다는 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hiroki_lzh/items/5d4316cf052cc1c1657a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)