NerdLog - 타임라인 히스토그램을 갖춘 빠른 ​​다중 호스트 TUI 로그 뷰어

6 days ago 7

  • 중앙 서버 없이 SSH 연결만으로 원격 로그 수집 및 분석이 가능한, 빠르고 리소스 효율적인 TUI 멀티 호스트 로그 뷰어
  • 타임라인 히스토그램 시각화와 시간 필터링으로 로그 흐름 파악이 용이함
  • 기본적인 awk, tail, head 조합을 사용하여 고속 처리 및 간편한 구축 지원
  • 로그 쿼리는 로컬 다운로드 없이 원격에서 처리, 네트워크 사용 최소화 및 대용량 로그 처리 최적화
  • 기본은 단순하지만 다양한 설정 파일, SSH config, UI 조작을 통한 확장성 보유

Nerdlog 소개

  • Nerdlog는 중앙 서버 없이 작동하는 텍스트 기반 UI 로그 뷰어
  • Graylog/Kibana처럼 로그를 분석할 수 있지만, 설치와 유지보수 부담이 없는 경량화 대안 도구
    • 초기 개발 동기는 느리고 비효율적인 Splunk에 대한 실망에서 시작
  • 여러 원격 서버의 로그를 동시에 필터링 및 시각화하는 데 최적화되어 있음
  • 주로 시스템 로그(/var/log/messages, /var/log/syslog)를 처리하도록 설계되었지만, 다른 포맷도 지원함
  • 1GB 이상의 대용량 로그도 빠르게 처리 가능
  • 핵심 목표는 멀티 노드 로그 조회의 속도와 효율성 극대화

설계 특징

  • 중앙 서버 없이 동작하며, 각 노드에 대해 ssh 연결을 생성하고 대기 상태 유지
  • 전체 로그를 다운로드하지 않고, 질문당 최대 250개의 로그 메시지와 히스토그램 데이터만 전송
  • 모든 응답을 병합하여 통합된 뷰를 제공
  • 전송 시 Gzip 압축을 사용하여 네트워크 비용 절감

프로젝트 상태 및 역사

  • 2022년 개인 해커톤으로 느린 Splunk 대체용으로 제작되었으며, 2025년 오픈소스로 공개됨
  • 빠르게 구현되어 스파게티 코드가 존재하며 테스트 커버리지 부족
  • Linux 환경에서만 실제 사용 테스트 되었음
  • Proof-of-concept 단계지만, 실제 사용에 충분할 정도로 빠르고 안정적

사용법 요약

  • 앱을 실행하면 쿼리 입력창이 나타남
  • 로그스트림은 ssh로 접근 가능한 서버의 연속된 로그 파일들 의미
  • ssh 포트나 로그 파일 경로 등을 명시하거나, ssh config 및 별도 설정 파일 사용 가능
  • Select field expression은 UI에 표시할 필드를 SQL 스타일로 지정

예시:

myuser@myserver.com myuser@myserver.com:1234:/some/other/logfile

예시 설정 파일 (~/.config/nerdlog/logstreams.yaml):

log_streams: myhost-01: hostname: actualhost1.com port: 1234 user: myuser log_files: - /some/custom/logfile

UI 구성

  • Awk 패턴 입력 필터: /foo/, ( /bar/ || /baz/ ) && !/qux/ 등 지원
  • Edit 버튼: 전체 쿼리 입력 창 열기
  • Menu 버튼: 뒤로가기, 앞으로가기, 쿼리 복사 등 기능 제공
  • 히스토그램: 시간대별 로그 밀도 시각화 및 시간 범위 선택 가능
  • 로그 테이블: 최신 로그는 하단에 위치, 우측 스크롤로 상세 필드 확인 가능
  • 상태줄:
    • 초록: 연결 및 대기 중인 로그스트림 수
    • 주황: 현재 쿼리 중인 로그스트림 수
    • 빨강: 연결 중인 로그스트림 수
    • 우측 숫자: 전체 매칭 로그 수 / 현재 로딩된 로그 수 / 커서 위치
  • 명령줄: : 키로 접근하며 Vim 스타일 명령어 입력 가능

탐색 방법

  • 일반 키: Tab, Shift+Tab, Enter, Esc, PgUp, PgDn 등
  • Vim 스타일 키: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a 등
  • 입력 필드 내에서는 Up, Down, Ctrl+P, Ctrl+N으로 히스토리 탐색
  • Ctrl+K, Ctrl+J: 전체 쿼리 히스토리 순회

주요 명령어

  • :xc 또는 :xclip: 현재 쿼리 상태를 명령어 문자열로 클립보드에 복사 nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'
  • :back, :fwd: 브라우저처럼 이전/다음 쿼리로 이동
  • :edit: 쿼리 편집 창 열기
  • :write [filename]: 현재 로딩된 로그를 파일로 저장
  • :reconnect, :disconnect: 로그스트림 재연결 / 연결 해제
  • :set 옵션=값: 설정 변경 (numlines, timezone 등 지원)
  • :q: 프로그램 종료

요구 사항

  • 원격 호스트에 대한 SSH 접근 권한 필요
  • 로컬에서 SSH agent가 실행 중이어야 함
  • 호스트에는 gawk가 설치되어야 하며, mawk는 지원되지 않음
  • rsyslog 등의 시스템 로그 기록 서비스가 실행 중이어야 /var/log/syslog가 사용 가능함
  • 자세한 내용은 요구 사항 및 제약 항목 참고

마무리

  • Nerdlog는 설치 없이도 원격 로그를 빠르고 시각적으로 확인할 수 있는 효율적인 도구임
  • 복잡한 설정이 필요 없고, 네트워크 리소스를 절약하면서도 실시간 분석이 가능함
  • 특히 Vim 사용자나 CLI 도구 선호자에게 이상적인 로그 분석 도구임

Read Entire Article