MQTT 브로커 로그 레벨과 포맷 최적화
MQTT 브로커의 로그 레벨과 포맷을 효율적으로 설계하고 운영하는 방법, 성능 영향과 모니터링 연동을 포함한 실무 중심의 설정 자료
목차
개요
브로커 로그는 운영 안정성과 문제 해결의 출발점이다. 로그가 지나치게 자세하면 성능에 부담을 주고, 너무 검약하면 원인 추적이 어려워진다. 이 글은 mqtt 로그 포맷 설정과 브로커 로깅 최적화 관점에서 실무에 바로 적용할 수 있는 원칙과 예시를 정리한다. 초보자도 이해하기 쉬운 단계로 설명한다.
로그 최적화의 기본 원칙
목적에 맞는 로그 수준 설계
로그 수준은 목적별로 구분한다. 운영 환경에서는 INFO나 WARNING을 기본으로 하고, 장애 조사 시 DEBUG를 잠시 활성화한다. 너무 긴 시간 DEBUG를 유지하면 디스크와 I/O가 급격히 소모된다.
구조화된 로그 포맷 사용
사람이 읽기 쉬운 텍스트 로그는 편리하지만, 검색과 집계를 위해 JSON 같은 구조화 포맷을 사용하는 것이 바람직하다. 구조화된 로그는 ELK, Grafana Loki, Cloud Logging 등과 연동하기 쉽다.
Mosquitto 예시 설정
mosquitto는 대표적인 MQTT 브로커다. 기본 로그 설정은 mosquitto.conf에 정의한다. 아래 예시는 운영용 권장 설정 형태다.
# mosquitto.conf 예시
log_type error
log_type warning
log_type notice
log_dest syslog
# 클라이언트 연결/해제/구독 로그는 필요한 경우로 제한
allow_duplicate_messages false
위 설정은 에러와 경고 중심으로 로그를 남기고, syslog로 전송하도록 한다. 상세한 연결 정보가 필요하면 notice나 info를 추가한다.
JSON 포맷으로 구조화하기
rsyslog나 syslog-ng를 사용해 mosquitto 로그를 수집한다면, 중앙 수집기에서 JSON 템플릿으로 변환해 저장하는 방법이 현실적이다. 예시는 rsyslog 설정의 템플릿이다.
# /etc/rsyslog.d/30-mosquitto.conf
module(load="imuxsock")
module(load="imklog")
template(name="mosq_json" type="list"){
constant(value="{")
constant(value='"@timestamp":"') property(name="timereported" dateFormat="rfc3339") constant(value='"')
constant(value=',"host":"') property(name="hostname") constant(value='"')
constant(value=',"program":"') property(name="programname") constant(value='"')
constant(value=',"msg":"') property(name="msg" format="json") constant(value='"}')
}
if $programname == 'mosquitto' then { action(type="omfwd" target="elasticsearch.example" template="mosq_json") }
이렇게 하면 브로커 로그가 타임스탬프, 호스트, 프로그램, 메시지 필드로 분리되어 검색·집계가 쉬워진다.
로그 레벨과 퍼포먼스 고려사항
- DEBUG는 단기간만 사용한다. 디스크, 네트워크, CPU 사용량이 상승한다.
- 로그 전송은 버퍼링과 배치 전송을 설정해 I/O 부하를 줄인다.
- 중요 이벤트만 남기는 필터링을 적용해 저장 비용을 절감한다.
- 로그 파일 회전(logrotate)과 보존 기간을 정책화한다.
운영 체크리스트
- 기본 레벨: 운영은 INFO 또는 NOTICE, 심각 오류는 ERROR/WARNING 유지
- 장애 조사 시 DEBUG 임시 활성화 및 자동 복구 규칙 적용
- 구조화 포맷(예: JSON)으로 중앙 수집기 연동
- 로그 회전과 보관 정책 수립
- 알림 임계값 설정: 특정 오류 빈도 초과 시 경보 발생
모니터링·분석 통합
로그는 단독으로 보면 한계가 있다. 메트릭과 트레이스와 결합해야 전반적인 상태를 파악할 수 있다. 예를 들어 라운드트립 지연, 재전송 비율 등 메트릭과 연결해 로그의 원인 분석을 자동화하면 운영 효율이 높아진다.
권장 설정 예시 요약
- 운영: log_type notice, warning, error + syslog 전송
- 장애 시: 일시적으로 log_type debug 활성화, 24시간 후 자동 비활성화
- 수집: rsyslog 템플릿으로 JSON 변환 후 ELK/FLUENT로 전달
- 보안: 로그에 민감정보가 포함되지 않도록 필터 적용
마무리
mqtt 로그 포맷 설정과 브로커 로깅 최적화는 단순한 설정 변경을 넘는다. 목적에 맞는 로그 수준, 구조화된 포맷, 중앙 수집과 분석 체계, 그리고 보존 정책이 함께 어우러져야 실질적인 운영 개선을 이룰 수 있다. mosquitto 로그 레벨 설정은 상황에 따라 유연하게 조절하되, 자동화된 복구 규칙과 모니터링 통합을 병행하면 안정성이 크게 향상된다.