23.8. Rsyslog를 사용한 구조화된 로깅


대량의 로그 데이터를 생성하는 시스템에서는 구조화된 형식으로 로그 메시지를 유지 관리하는 것이 편리합니다. 구조화된 메시지를 사용하면 특정 정보를 검색하고 통계를 생성하며 메시지 구조의 변경 사항 및 불일치에 대처하는 것이 더 쉬워집니다. rsyslog는 JSON (JavaScript Object Notation) 형식을 사용하여 로그 메시지에 대한 구조를 제공합니다.

다음 구조화되지 않은 로그 메시지를 비교합니다.

Oct 25 10:20:37 localhost anacron[1395]: Jobs will be executed sequentially
Copy to Clipboard Toggle word wrap

구조화된 것과 함께 다음을 수행합니다.

{"timestamp":"2013-10-25T10:20:37", "host":"localhost", "program":"anacron", "pid":"1395", "msg":"Jobs will be executed sequentially"}
Copy to Clipboard Toggle word wrap

키-값 쌍을 사용하여 구조화된 데이터를 검색하는 것이 정규식으로 텍스트 파일을 검색하는 것보다 빠르고 정확합니다. 또한 이 구조를 통해 다양한 애플리케이션에서 생성되는 메시지에서 동일한 항목을 검색할 수 있습니다. 또한 JSON 파일은 추가 성능 및 분석 기능을 제공하는 MongoDB와 같은 문서 데이터베이스에 저장할 수 있습니다. 반면 구조화된 메시지에는 구조화되지 않은 메시지보다 더 많은 디스크 공간이 필요합니다.

rsyslog 에서 메타 데이터가 있는 로그 메시지는 imjournal 모듈을 사용하여 journal 에서 가져옵니다. mmjsonparse 모듈을 사용하면 journal 에서 가져온 데이터를 구문 분석하고 다른 소스에서 데이터를 구문 분석하고 데이터베이스 출력과 같이 추가로 처리할 수 있습니다. 구문 분석 성공의 경우 mmjsonparseLumberjack 프로젝트에서 정의하는 방식으로 입력 메시지를 구조화해야 합니다.

Lumberjack 프로젝트는 이전 버전과 호환되는 방식으로 rsyslog 에 구조화된 로깅을 추가하는 것을 목표로 합니다. 구조화된 메시지를 식별하기 위해 Lumberjack 은 실제 JSON 구조 앞에 추가되는 @cee: 문자열을 지정합니다. 또한 Lumberjack 은 JSON 문자열의 엔터티에 사용해야 하는 표준 필드 이름 목록을 정의합니다. Lumberjack 에 대한 자세한 내용은 “온라인 문서” 를 참조하십시오.

다음은 lumberjack 형식의 메시지의 예입니다.

      @cee: {"pid":17055, "uid":1000, "gid":1000, "appname":"logger", "msg":"Message text."}
Copy to Clipboard Toggle word wrap

Rsyslog 내에서 이 구조를 빌드하려면 템플릿이 사용됩니다. 23.8.2절. “구조화된 메시지 필터링” 을 참조하십시오. 애플리케이션 및 서버는 libumberlog 라이브러리를 사용하여 lumberjack 호환 형식으로 메시지를 생성할 수 있습니다. libumberlog 에 대한 자세한 내용은 “온라인 문서” 을 참조하십시오.

23.8.1. journal에서 데이터 가져오기

imjournal 모듈은 기본적으로 저널 파일을 읽는 Rsyslog의 입력 모듈입니다( 23.7절. “Rsyslog 및 journal의 상호 작용”참조). 그런 다음 journal 메시지는 다른 rsyslog 메시지로 텍스트 형식으로 기록됩니다. 그러나 추가 처리에서는 journal에서 제공하는 메타 데이터를 구조화된 메시지로 변환할 수 있습니다.

journal 에서 Rsyslog 로 데이터를 가져오려면 /etc/journal.conf에서 다음 구성을 사용하십시오.

module(load=”imjournal”
  PersistStateInterval=”number_of_messages”
  StateFile=”path”
  ratelimit.interval=”seconds”
  ratelimit.burst=”burst_number”
  IgnorePreviousMessages=”off/on”)
Copy to Clipboard Toggle word wrap
  • number_of_message 를 사용하면 저널 데이터를 저장해야 하는 빈도를 지정할 수 있습니다. 이 문제는 지정된 수의 메시지에 도달할 때마다 발생합니다.
  • 경로를 상태 파일의 경로로 바꿉니다. 이 파일은 마지막 처리된 저널 항목을 추적합니다.
  • 단위로 제한 간격의 길이를 설정합니다. 이 간격 중에 처리되는 메시지 수는 burst_number 에 지정된 값을 초과할 수 없습니다. 기본 설정은 600초당 20,000개의 메시지입니다. rsyslog는 지정된 시간 내에 최대 버스트 뒤에 오는 메시지를 삭제합니다.
  • IgnorePreviousMessages 를 사용하면 현재 journal에 있는 메시지를 무시하고 상태 파일이 지정되지 않은 경우 사용되는 새 메시지만 가져올 수 있습니다. 기본 설정은 OFF 입니다. 이 설정이 꺼져 있고 상태 파일이 없는 경우 이전 rsyslog 세션에서 이미 처리되어도 저널의 모든 메시지가 처리됩니다.
참고

기존 시스템 로그 입력인 imuxsock 모듈과 동시에 imjournal 을 사용할 수 있습니다. 그러나 메시지 중복을 방지하려면 imuxsock 에서 journal의 시스템 소켓을 읽지 못하도록 해야 합니다. 이를 위해 SysSock.Use 지시문을 사용합니다.

module(load”imjournal”)
module(load”imuxsock”
  SysSock.Use=”off”
  Socket="/run/systemd/journal/syslog")
Copy to Clipboard Toggle word wrap

journal에서 저장한 모든 데이터와 메타 데이터를 구조화된 메시지로 변환할 수 있습니다. 이러한 메타 데이터 항목 중 일부는 예 23.19. “자세한 journalctl 출력” 에 나열되며 저널 필드의 전체 목록은 systemd.journal-fields(7) 매뉴얼 페이지를 참조하십시오. 예를 들어 커널에서 시작되는 메시지에서 사용하는 커널 저널 필드에 중점을 둘 수 있습니다.

23.8.2. 구조화된 메시지 필터링

rsyslog의 구문 분석 모듈에 필요한 lumberjack 형식의 메시지를 생성하려면 다음 템플릿을 사용합니다.

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n")
Copy to Clipboard Toggle word wrap

이 템플릿은 @cee: 문자열을 JSON 문자열 앞에 추가하고, 예를 들어 omfile 모듈을 사용하여 출력 파일을 생성할 때 적용할 수 있습니다. JSON 필드 이름에 액세스하려면 $! 접두사를 사용합니다. 예를 들어 다음 필터 조건은 특정 호스트 이름UID 가 있는 메시지를 검색합니다.

($!hostname == "hostname" && $!UID== "UID")
Copy to Clipboard Toggle word wrap

23.8.3. JSON 구문 분석

mmjsonparse 모듈은 구조화된 메시지를 구문 분석하는 데 사용됩니다.

이러한 메시지는 journal 또는 다른 입력 소스에서 가져올 수 있으며 Lumberjack 프로젝트에서 정의한 방식으로 포맷해야 합니다. 이러한 메시지는 @cee: 문자열이 있는 것으로 식별됩니다. 그런 다음 mmjsonparse 는 JSON 구조가 유효한지 확인하고 메시지가 구문 분석됩니다.

mmjsonparse 를 사용하여 lumberjack 형식의 JSON 메시지를 구문 분석하려면 /etc/journal.conf에서 다음 구성을 사용하십시오.

module(load”mmjsonparse”)

. :mmjsonparse:
Copy to Clipboard Toggle word wrap

이 예제에서는 첫 번째 줄에 mmjsonparse 모듈이 로드되면 모든 메시지가 전달됩니다. 현재 mmjsonparse 에 사용할 수 있는 구성 매개변수가 없습니다.

23.8.4. MongoDB에 메시지 저장

rsyslog는 ommongodb 출력 모듈을 통해 MongoDB 문서 데이터베이스에 JSON 로그를 저장할 수 있습니다.

로그 메시지를 MongoDB로 전달하려면 /etc/journal.conf 에서 다음 구문을 사용하십시오( ommongodb 의 구성 매개 변수는 새 구성 형식으로만 사용 가능) 23.3절. “새 구성 형식 사용”를 참조하십시오.

module(load”ommongodb”)

. action(type="ommongodb" server="DB_server" serverport="port" db="DB_name" collection="collection_name" uid="UID" pwd="password")
Copy to Clipboard Toggle word wrap
  • DB_server 를 MongoDB 서버의 이름 또는 주소로 바꿉니다. MongoDB 서버에서 비표준 포트를 선택하려면 포트를 지정합니다. 기본 포트 값은 0 이며 일반적으로 이 매개 변수를 변경할 필요가 없습니다.
  • DB_name 을 사용하면 출력을 전달할 MongoDB 서버의 데이터베이스를 식별할 수 있습니다. collection_name 을 이 데이터베이스의 컬렉션 이름으로 바꿉니다. MongoDB에서 collection은 RDBMS 테이블에 해당하는 문서 그룹입니다.
  • UID암호 를 교체하여 로그인 세부 정보를 설정할 수 있습니다.

최종 데이터베이스 출력 형식을 템플릿을 사용하여 셰이핑할 수 있습니다. 기본적으로 rsyslog 는 표준 lumberjack 필드 이름을 기반으로 하는 템플릿을 사용합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat