Zabbix의 로그 감시에서 output 지정을 한 경우 regexp에는 엄밀하게 정규 표현식을 쓰는 것이 좋다는 이야기

4207 단어 zabbix

이 기사는?


  • Zabbix의 로그 모니터링은 정규식을 사용하여 필터링 할 수 있습니다.
  • Zabbix 2.2 에서는 필터링한 로그로부터 한층 더 출력 데이터를 추출할 수 있게 되었다.
  • 하지만이 정규식이 모호했기 때문에 생각대로 움직이지 않을 수 있으므로 공유합니다.

    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부터 차례로 구분해주지 않았다.
    한 줄의 로그에서 여러 데이터를 얻고 싶다면,
    "어느 정도 정규 표현을 엄밀하게 해, 원래 로그 데이터의 범위를 좁힌다"
    "뒤에서 파스되는 것을 걱정하면서 그룹화한다"
    라는 것을 머리의 한 구석에 두면 좋을지도 모른다.

    이상
  • 좋은 웹페이지 즐겨찾기