
로그 파일, 아직도 tail -f로 보고 계신가요?
서버 운영이나 백엔드 개발을 하다 보면 로그 파일을 들여다보는 시간이 정말 많아요. 뭔가 이상하면 일단 로그부터 확인하잖아요. 그런데 대부분은 tail -f, less, grep 조합으로 보거나, 잘해야 cat log.txt | grep ERROR 같은 방식을 쓰고 있을 거예요.
이게 나쁜 건 아닌데, 로그 파일이 수 기가바이트가 되거나 여러 서비스의 로그를 동시에 봐야 할 때는 한계가 분명하거든요. 이럴 때 lnav(Log File Navigator)라는 도구가 진짜 유용해요. 터미널 기반의 로그 파일 뷰어인데, 단순 뷰어가 아니라 로그 분석 도구에 가까운 수준의 기능을 갖추고 있어요.
lnav가 뭔데?
lnav는 오픈소스 터미널 로그 뷰어예요. "Log file Navigator"의 줄임말인데, 이름 그대로 로그 파일 안에서 네비게이션(탐색)하는 데 특화되어 있어요. macOS에서는 brew install lnav, Ubuntu에서는 apt install lnav로 간단히 설치할 수 있어요.
가장 먼저 눈에 띄는 특징은 자동 포맷 감지예요. syslog, Apache/Nginx 액세스 로그, JSON 형식 로그, Python 로그 등 일반적인 로그 포맷을 자동으로 인식해서 색상을 입혀주고 구조화해서 보여줘요. tail -f로 보면 그냥 텍스트 덩어리인 게, lnav으로 보면 타임스탬프·로그 레벨·메시지가 깔끔하게 구분되어 보이거든요.
어떤 기능이 있을까
여러 로그 파일 동시 보기: 이게 정말 킬러 기능이에요. lnav /var/log/syslog /var/log/auth.log 이렇게 여러 파일을 한번에 열면, 타임스탬프 기준으로 자동 정렬해서 하나의 타임라인으로 보여줘요. 마이크로서비스 환경에서 여러 서비스의 로그를 시간순으로 추적해야 할 때 엄청 편해요. A 서비스에서 요청을 보내고 B 서비스에서 받는 과정을 하나의 화면에서 볼 수 있으니까요.
SQL로 로그 쿼리하기: lnav는 내부적으로 SQLite를 사용해서, 로그 데이터에 SQL 쿼리를 날릴 수 있어요. 예를 들어 ;SELECT count(*) FROM syslog_log WHERE log_level = 'error' GROUP BY log_hostname처럼 쓰면 호스트별 에러 수를 바로 집계할 수 있어요. grep으로 하려면 파이프를 여러 개 연결해야 할 작업을 한 줄로 끝낼 수 있는 거죠.
시간 기반 탐색: 특정 시간대로 바로 점프할 수 있어요. "어제 오후 3시쯤 장애가 났는데" 하면, 해당 시간으로 바로 이동해서 그 전후 로그를 확인할 수 있거든요. 수만 줄짜리 로그에서 스크롤해가며 찾는 것보다 훨씬 빨라요.
필터링과 하이라이팅: 정규식 기반으로 특정 패턴을 하이라이트하거나, 관심 없는 로그 라인을 숨길 수 있어요. 인터랙티브하게 필터를 추가하고 제거할 수 있어서, 문제의 범위를 좁혀나가는 과정이 훨씬 매끄러워요.
실시간 모니터링: tail -f처럼 실시간으로 새로운 로그를 따라가는 기능도 당연히 있어요. 여기에 위의 필터링과 하이라이팅이 합쳐지면, 실시간 로그 모니터링의 경험이 완전히 달라져요.
기존 도구들과의 비교
터미널 로그 도구 생태계를 한번 정리해볼게요. less나 tail은 가장 기본적인 도구이고, multitail은 여러 파일을 동시에 볼 수 있지만 분석 기능은 약해요. 반대편에는 Elasticsearch + Kibana(ELK 스택)나 Grafana Loki 같은 풀스택 로그 관리 시스템이 있는데, 이건 인프라를 별도로 구축해야 해서 진입장벽이 높아요.
lnav는 딱 그 사이에 위치해요. 설치 한 줄이면 되고 별도 서버가 필요 없지만, 단순 텍스트 뷰어보다는 훨씬 강력한 분석 기능을 제공해요. 개발 서버에서 빠르게 문제를 추적하거나, 프로덕션 서버에 SSH로 접속해서 현장에서 바로 로그를 분석해야 할 때 가장 빛을 발하는 도구예요.
한국 개발자에게 추천하는 활용법
당장 써볼 수 있는 시나리오 몇 가지를 소개할게요.
개발 중인 애플리케이션의 로그와 DB 로그를 동시에 띄워놓고 디버깅하는 상황을 생각해보세요. lnav app.log db.log만 치면 두 로그가 시간순으로 합쳐져서 "앱에서 이 쿼리를 날렸을 때 DB에서 뭐가 일어났는지"를 바로 추적할 수 있어요.
또 장애 대응 상황에서 "최근 1시간 동안 ERROR 레벨 로그가 몇 건이고, 어떤 패턴인지" 빠르게 파악해야 할 때, SQL 쿼리 기능이 정말 유용해요. grep과 wc와 sort를 조합하는 것보다 훨씬 직관적이에요.
핵심 정리: lnav는 "터미널을 떠나지 않으면서도 로그를 제대로 분석하고 싶다"는 니즈를 딱 충족시켜주는 도구예요. 별도 인프라 없이 로컬에서 바로 쓸 수 있다는 점이 가장 큰 장점이에요.
평소 로그 분석할 때 어떤 도구를 주로 쓰시나요? lnav 말고도 숨겨진 터미널 꿀 도구가 있다면 공유해주세요!
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공