본문 바로가기
  • ▒ 네모의 쉽게 배우는 네트워크 | 개발 ▒
네트워크 운영도구 개발/모니터링 시스템 개발

zabbix 서버에서 syslog 수집하기 -3 : Zabbix syslog intergration 설정

by 너l모 2022. 3. 29.
반응형

※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!


 ο 목차

     


    ※ 코드 보는 방법 참고

    ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력

    ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력

    ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력

    ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력


    ※ 이전 포스팅 참고 ※

    ㅇ zabbix 서버에서 syslog 수집하기 -1

    zabbix 서버에서 syslog 수집하기 -1 (tistory.com)

     

    zabbix 서버에서 syslog 수집하기 -1

    ※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자

    nem0.tistory.com

     

    ㅇ zabbix 서버에서 syslog 수집하기 -2 : Rsyslog 설정

    zabbix 서버에서 syslog 수집하기 -2 : Rsyslog 설정 (tistory.com)

     

    zabbix 서버에서 syslog 수집하기 -2 : Rsyslog 설정

    ※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자

    nem0.tistory.com


    ※ 아래 가이드는 Centos7 기준으로 작성된 내용으로, 우분투나 기타 OS를 사용하는 분들은 상세 명령어를 제외한 작업 흐름 정도만 참고 부탁드립니다. ※

    1. Zabbix syslog intergration 및 모듈 설치

    1) Zabbix syslog intergration 파일 다운로드 

    - 불안하면 아래 깃허브에서 zip 파일 다운로드

    https://github.com/v-zhuravlev/zabbix-syslog

     

    GitHub - v-zhuravlev/zabbix-syslog: Zabbix Syslog Integration (with rsyslog)

    Zabbix Syslog Integration (with rsyslog). Contribute to v-zhuravlev/zabbix-syslog development by creating an account on GitHub.

    github.com

    - 귀찮거나 어려우면 아래 파일 다운로드

    zabbix-syslog-master.zip
    0.02MB

     

    2) zip 파일 압축해제

    $ sudo unzip zip파일명(경로포함) -d zabbix-syslog-master

    * zip파일명(경로포함) 예시 = Download/zabbix-syslog-master.zip

     

    3) 기타 펄 모듈 설치

    - Zabbix syslog intergration은 펄 스크립트를 통해 동작을 구현하는 도구이기 때문에 필요한 펄 모듈 설치 필수

    - 필자는 아래 방법이 가장 오류없이 깔끔하게 진행되어서 cpanm을 활용해서 아래 *3개 모듈 설치

    * 필요 모듈 = LWP, JSON::XS, Config::General

    $ cpanm install LWP
    $ cpanm install JSON::XS
    $ cpanm install Config::General

     

    - LWP, JSON::XS, Config::General 모듈을 설치하는 다양한 방법이 있으므로 기타 방법이 궁금한 경우 아래 내용의 Setup 파트 참고 

    https://github.com/v-zhuravlev/zabbix-syslog#setup

     

    GitHub - v-zhuravlev/zabbix-syslog: Zabbix Syslog Integration (with rsyslog)

    Zabbix Syslog Integration (with rsyslog). Contribute to v-zhuravlev/zabbix-syslog development by creating an account on GitHub.

    github.com

     

    2. 작업 스크립트 복사

    - 아래 원본 참고

    https://github.com/v-zhuravlev/zabbix-syslog#copy-scripts

     

    GitHub - v-zhuravlev/zabbix-syslog: Zabbix Syslog Integration (with rsyslog)

    Zabbix Syslog Integration (with rsyslog). Contribute to v-zhuravlev/zabbix-syslog development by creating an account on GitHub.

    github.com

    1) 작업 상세 

    ※ 모든 작업은 압축해제된 zabbix-syslog-master 디렉토리로 이동하여 진행

    - /etc/zabbix/scripts 폴더 만들기(생성된 디렉토리가 실제 작업 디렉토리가 됨)

    $ mkdir -p /etc/zabbix/scripts

     

    - zabbix_syslog_create_urls.pl 파일을 /etc/zabbix/scripts 폴더로 복사

    $ cp zabbix_syslog_create_urls.pl /etc/zabbix/scripts/zabbix_syslog_create_urls.pl

     

    - 작업 후 파일들이 제대로 복사 되었는지 확인

    $ ls /etc/zabbix/scripts

     

    - 복사한 파일의 모든 소유자에 대해 실행 권한 추가

    $ chmod +x /etc/zabbix/scripts/zabbix_syslog_create_urls.pl

     

    - 작업 후  실행 권한이 정상적으로 추가 되었는지 확인

    $ ls /etc/zabbix/scripts -al

     

    - zabbix_syslog_lkp_host.pl 파일을 /etc/zabbix/scripts 폴더로 복사

    $ cp zabbix_syslog_lkp_host.pl /etc/zabbix/scripts/zabbix_syslog_lkp_host.pl

     

    - /etc/zabbix/scripts/lib 폴더 만들기

    $ mkdir /etc/zabbix/scripts/lib

     

    - lib 폴더 안에 ZabbixAPI.pm 파일 복사

    $ cp lib/ZabbixAPI.pm /etc/zabbix/scripts/lib

     

    - zabbix_syslog.cfg 파일을 /etc/zabbix 폴더에 복사

    $ cp zabbix_syslog.cfg /etc/zabbix/zabbix_syslog.cfg

     

    - 복사한 파일의 소유자 변경

    $ sudo chown zabbix:zabbix /etc/zabbix/zabbix_syslog.cfg

     

    - 복사한 파일의 소유자에 대한 권한 변경

    $ sudo chmod 700 /etc/zabbix/zabbix_syslog.cfg

     

    - 작업 후  소유자와 권한이 정상적으로 추가 되었는지 확인

    $ ls /etc/zabbix/scripts -al

     

    3. 파일 설정 변경

    1) zabbix_syslog.cfg 파일 수정

    - 파일 내용 중 user와 admin 부분을 syslog용 계정 정보로 수정

    user = syslog용계정
    password = syslog용계정패스워드

     

    4. crontab 설정하기

    - syslog 맵 링크 업데이트를 위한 crontab 설정하기(하루에 한번 수행)

    - 다운로드 받은 파일의 cron.d 디렉토리의 zabbix_syslog_create_urls 파일을 cron.d 디렉토리로 복사하기

    $ sudo cp cron.d/zabbix_syslog_create_urls /etc/cron.d
     

    5. Rsyslog 설정 변경

    1) rsyslog.d 디렉토리에 zabbix_rsyslog.conf 파일 추가 

    $ sudo touch /etc/rsyslog.d/zabbix_rsyslog.conf

     

    2) zabbix_rsyslog.conf 파일 수정

    - 아래 내용 참고하여 파일 내용 수정

    $ sudo vi /etc/rsyslog.d/zabbix_rsyslog.conf
    
    
    (아래 내용 zabbix_rsyslog.conf 파일에 복사&붙여넣기)
    # provides  UDP syslog reception
    $ModLoad imudp
    # $UDPServerRun 514
    
    #enables omrpog module
    $ModLoad omprog
    
    # template for remote host
    $template network-fmt, "%TIMESTAMP% %fromhost-ip% %pri-text% %syslogtag% %msg%\n"
    
    # Ruleset setting
    # $Ruleset remote
    # *.* ?network-fmt
    
    # Remote Logging
    $Ruleset network-fmt
    *.*                                                   /var/log/syslog.log;network-fmt
    
    
    
    ### Listeners ###
    $InputUDPServerBindRuleset network-fmt
    $UDPServerRun 514
    
    # exclude unwanted messages(examples):
    # :msg, contains, "Child connection from" stop
    # :msg, contains, "exit after auth (ubnt): Disconnect received" stop
    # :msg, contains, "password auth succeeded for 'ubnt' from" stop
    # :msg, contains, "exit before auth: Exited normally" stop
    
    if $fromhost-ip != '127.0.0.1' then {
            action(type="omprog" binary="/etc/zabbix/scripts/zabbix_syslog_lkp_host.pl" template="network-fmt")
            stop
    }

     

    3) zabbix_syslog_lkp_host.pl 파일 내용 수정

    - 아래 내용 참고하여 파일 내용 수정

    $ sudo vi /etc/zabbix/scripts/zabbix_syslog_lkp_host.pl
    
    ...(파일 내용 생략)...
    #rsyslog omprog loop
    #http://www.rsyslog.com/doc/master/configuration/modules/omprog.html
    while (defined(my $message = <>)) {
        chomp($message);
    
        #get ip from message
        my $ip;
        
        # 아래 내용을
        # if ( $message =~ / \[ ((?:$ipv4_octet[.]){3}${ipv4_octet}) \]/msx ) {
        # 아래 내용으로 수정
        if ( $message =~ /((?:$ipv4_octet[.]){3}${ipv4_octet})/msx ) {
            $ip = $1;
        }
        else {
            warn "No IP in square brackets found in '$message', cannot continue\n";
            next;
        }
    
        my $hostname = ${retrieve_from_store($ip)}->{'hostname'};
    ...(파일 내용 생략)...

     

     

    6. Syslog 템플릿 삽입

    - Zabbix 프론트엔드의 Configuration 메뉴 -> Templates 메뉴 선택 -> Import 버튼 선택

    - Browse 버튼 선택

    - 다운로드 파일 중  "Template_syslog.xml" 선택 후 Import

     

    7. Syslog용 계정 추가

    - 3.1) 에서 설정한 내용대로 syslog용 계정 추가

    - Zabbix 프론트엔드 -> Administration 메뉴 -> Users 메뉴 -> "Create User" 버튼 선택

    - 아래 내용 참고하여 계정 추가

     

    8. Syslog 동작 테스트

    1) 테스트용 호스트 생성하기

    - Configuration 메뉴 -> Hosts 메뉴 -> "Create host" 버튼 선택

    - 아래 내용과 같이 로컬 IP를 127.0.0.1 혹은 localhost 로 설정

    - Templates 메뉴 선택 -> "Template_syslog" 선택하기

     

    - 템플릿 적용 후 "Add" 버튼 선택하여 테스트 계정 추가

     

    2) syslog 수신 테스트하기

    - root 사용자로 아래 명령어 입력하여 syslog 수신 테스트

    # echo "2017-12-19T09:26:26.314936+03:00 [127.0.0.1] syslog.info SysLogTest[4616]Test syslog message" | /etc/zabbix/scripts/zabbix_syslog_lkp_host.pl

    - 성공적으로 syslog를 수신하는 경우 Problem 로그 발생

     

    9. 호스트에 템플릿 일괄 적용

    - Configuration 메뉴 -> Hosts 메뉴 -> 템플릿을 적용할 호스트 선택 -> 왼쪽 하단의 "Mass update" 버튼 선택

    - Templates 메뉴 선택 -> Link templates 네모 박스 체크 -> Select 선택

    - Template_syslog 선택

    - 템플릿 적용 확인 후 Update 선택

    - 호스트에 템플릿 적용 확인

    - 다른 호스트에서도 정상적으로 syslog를 수집하는지 확인


    하... 정리하다보니 내용이 너무 많아져서 중간중간 트러블슈팅이나 기본적인 내용들이 많이 생략되었습니다ㅠ

    혹시 하다가 안되거나 추가로 궁금한 점이 있으면 언제든 댓글 달아주세요.


    ※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다. 

     

     

    반응형

    댓글