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

> Clean Markdown view of GeekNews topic #20480. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20480](https://news.hada.io/topic?id=20480)
- GeekNews Markdown: [https://news.hada.io/topic/20480.md](https://news.hada.io/topic/20480.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-04-23T09:15:04+09:00
- Updated: 2025-04-23T09:15:04+09:00
- Original source: [github.com/dimonomid](https://github.com/dimonomid/nerdlog)
- Points: 10
- Comments: 1

## Summary

이 도구는 **SSH 연결만으로 원격 로그 수집 및 분석**이 가능하며, **타임라인 히스토그램 시각화**를 통해 로그 흐름을 쉽게 파악할 수 있습니다. **중앙 서버 없이 작동**하며, **대용량 로그도 빠르게 처리**할 수 있도록 설계되었습니다. **설치와 유지보수 부담이 없는 경량화 대안 도구**로, 다양한 설정 파일과 UI 조작을 통해 확장성을 제공합니다. **Vim 사용자**나 CLI 도구를 선호하는 사용자에게 특히 적합한 로그 분석 도구입니다.

## Topic Body

- 중앙 서버 없이 **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`가 사용 가능함  
- 자세한 내용은 [요구 사항 및 제약](https://dmitryfrank.com/projects/nerdlog/article#requirements) 항목 참고  
  
### 마무리  
  
- Nerdlog는 설치 없이도 원격 로그를 빠르고 시각적으로 확인할 수 있는 효율적인 도구임  
- 복잡한 설정이 필요 없고, 네트워크 리소스를 절약하면서도 실시간 분석이 가능함  
- 특히 **Vim 사용자**나 CLI 도구 선호자에게 이상적인 로그 분석 도구임

## Comments



### Comment 37553

- Author: neo
- Created: 2025-04-23T09:15:04+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43750765) 
- 멋진 작업임. TUI가 정말 깔끔하고 상단의 히스토그램이 마음에 듦. 오늘 이걸로 놀아볼 예정임
- 오늘 배운 것: awk 패턴은 단순한 정규 표현식 이상이며, 불리언 연산자와 결합할 수 있음. awk를 조금 써봤지만 이 점을 몰랐음
- 정말 멋진 프로젝트임. 특히 타임라인 히스토그램과 원격 우선 설계의 단순함과 TUI 접근 방식을 좋아함
  - 여러 호스트의 로그를 처리할 때 비슷한 어려움을 겪었고, 그 결과 Logdy라는 도구를 만들게 되었음
  - Logdy는 웹 기반으로 실시간 테일링, 구조화된 로그 검색, 여러 소스에 대한 빠른 필터링에 중점을 둠. 중앙 서버가 필요하지 않음
  - 직접 비교하려는 것은 아니지만, 이 분야를 탐구 중이라면 보완적인 접근 방식이나 다른 시나리오에 유용할 수 있음
  - 여러 호스트에 대한 쿼리 기능 추가 작업이 필요함
  - 어쨌든 nerdlog에 찬사를 보냄. 여러 서비스를 실행할 필요 없는 간결한 도구를 보는 것은 항상 좋음
- 랜딩 페이지에서 journalctl이 한 번 언급되며, 로그가 구식 syslog에 평문으로 저장되어야 한다는 암시가 있음
  - 평문 로그를 저장하고 logrotate 같은 오래된 해결책을 사용하고 싶지 않음
  - journald 자체는 원격 호스트에서 로그를 수신하고 (--merge를 사용하여) 검색할 수 있는 내장 기능이 있음
- 나중에 꼭 이걸 가지고 놀아볼 예정임. [gzipped 로그 아카이브가 지원되지 않음](https://dmitryfrank.com/projects/nerdlog/article#depends_on_the_log_file_rotation_policy), 개인적으로 사용 사례를 최소화함
  - 사람들이 주목할 것이라고 생각하는 제한 사항으로 언급한 점은 충분히 고려한 것 같음. 결국 지원할 계획이 있는지 궁금함
- 보기 좋음. 더 많은 사용자를 원한다면 주요 리눅스 배포판에 패키징하기 위해 커뮤니티의 도움을 받을 수 있음
- 매우 좋음. 내 작은 로그 뷰어 목록에 추가했음 [https://github.com/dloss/klp#alternative-tools](https://github.com/dloss/klp#alternative-tools)
- 좋음. 몇 년 전에 필요했음. 라이선스 파일이 없음?
- 좋아 보임. 소스 코드를 변경하지 않고 RFC 3339 형식의 날짜/시간을 사용할 수 있는 방법이 있는지 궁금함
  - runit (Void Linux)와 함께 작동하는지 궁금함
- 훌륭함. 이런 것을 찾고 있었음
- AWS CloudWatch에서 로그를 볼 수 있는지 궁금함
