본문 바로가기
  • ▒ 네모의 쉽게 배우는 네트워크 | 개발 ▒
리눅스(Redhat)/유용한 명령어

로그파일에서 특정 호스트, 특정 시간대 로그만 출력하기(sed, grep 활용)

by 너l모 2022. 2. 24.
반응형

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


 ο 목차

     


    ※ 코드 보는 방법 참고

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

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

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

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


    저는 zabbix 모니터링 시스템에 로그 서버 기능을 추가해서 통합적으로 사용 중인데,,

    벤더에서 문제 해결을 위해 특정 호스트에 특정 시간대(약 1시간 정도)의 로그를 따로 뽑아줄 수 있겠냐는 요청이 왔습니다. 

     

    제가 커스터마이징한 zabbix 관리 페이지는 호스트별, 시간대별로 시스템 로그를 볼 수는 있지만 별도로 파일 출력 기능은 제공하지 않기 때문에... 모든 장비의 로그가 모이는 syslog 파일에서 특정 호스트와 특정 시간대 로그를 별도로 뽑아낼 필요가 있었습니다. 

     

    이것저것 찾아본 내용을 나중에 까먹을까봐 정리해둡니당  

    혹시 로그 파일에서 특정 키워드를 포함한, 특정 시간대 로그가 필요하신 분들이 있다면 내용 참고하면 좋을 것 같습니다. 

     

     

    1.  특정 키워드 포함, 특정 시간대 로그 검색 및 파일 저장 

    1) 사용 명령어

    $ sed -n '/시작시작/,/종료시간/p' 로그파일명 | grep "포함할키워드" > 출력할파일명

     

    시작시간 :  검색할 로그 시작 시간,  시간 형태는 수집된 로그의 포맷에 따라 기입

        예시)  "Feb 24 14:08:22 1.1.1.1 local7.notice %~~"  형태의 로그인 경우 시작 시간을 Feb 24 14: 로 기입하여 검색

        검색할 시간대의 첫 로그가 찍힌 시간을 정확히 아는 경우 Feb 24 14:08:22 와 같이 초까지 기입해도 무관함(더 정확한 검색을 위해)

    종료시간 : 검색할 로그의 종료 시간, 시작시간과 같이 시간 형태는 수집된 로그의 포맷에 따라 기입

        예시) 위의 예시를 기준으로 14시부터 15시까지의 로그를 검색하는 경우 로그의 종료 시간은 Feb 24 15: 로 기입

    ㅇ 로그파일명 : 모든 장비의 로그가 모여있는 로그 파일, 확장자명까지 입력

    포함할키워드 : 장비별로 검색시 키워드는 장비를 구분할 수 있는 IP나 호스트명이 되며 로그 파일에 출력된 정보를 기반으로 선택

        예시) 위의 예시에서는 호스트가 1.1.1.1 이므로 포함할 키워드를 "1.1.1.1"로 입력하면 1.1.1.1 호스트로부터 온 시스로그만 별도로 검색 가능

    출력할파일명 : 검색한 로그 내용을 출력할 파일 이름. 예를 들어 1111_syslog.log 이런 식으로 기입 

     

    2. 동작 원리 이해

    1) sed 명령어

      - 기본적으로 원본 파일을 변경하지 않고 파일 검색 및 편집 기능을 처리하는 명령어

    2) 사용된 sed 명령어 동작 이해

    $ sed -n '/시작시작/,/종료시간/p' 로그파일명

      - sed를 n 옵션과 사용하게 되면 파일을 한줄씩 읽어와 처리

      - / 구분자로 문자열을 검색

      - 로그파일명 파일의 처음부터 한줄씩 읽어 내려가며 파일 내용 중 "시작시간"이라는 문자열을 가진 첫번째 로그부터 "종료시간"이라는 문자열을 포함한 가장 첫번째 로그까지 검색하게 됨.

     

    3) grep 명령어

      - 출력할 내용의 필터 역할을 하는 명령어

     

    4) 사용된 grep 명령어 동작 이해

    grep "포함할키워드"

      - sed를 통해 검색된 문자열 중 "포함할키워드"를 포함하는 경우만 출력하고, "포함할키워드"가 없는 경우 출력하지 않음

      - 2개 이상의 키워드에 대한 검색을 할 경우

        OR 검색은 grep "검색할키워드1\|검색할키워드2" 로 사용

        AND 검색은 grep "검색할키워드1" | grep "검색할키워드2" 로 사용

     

    5) 파일 출력 명령어

      - ">" 은 명령어의 결과로 출력되는 내용을 파일 형태로 저장할 때 사용

      - "> 출력할파일명" 은 sed 와 grep를 통해 필터링한 로그 내용을 "출력할파일명" 이라는 파일로 저장함

     

     

    ※ 키워드를 기반으로 로그를 출력하다보니 깔끔하게 출력되지 않을 수 있음. 출력된 파일을 확인 후 관련없는 로그가 함께 섞여 있다면 정리를 한번 하는 것을 추천함. 


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

     

     

    반응형

    댓글