10 पॉइंट द्वारा GN⁺ 2025-04-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • बिना किसी केंद्रीय सर्वर के, सिर्फ SSH कनेक्शन से remote logs को collect और analyze करने वाला तेज़ और resource-efficient TUI multi-host log viewer
  • टाइमलाइन हिस्टोग्राम visualization और time filtering की मदद से log flow को आसानी से समझा जा सकता है
  • बुनियादी awk, tail, head संयोजन का उपयोग करके high-speed processing और आसान setup को सपोर्ट करता है
  • log queries को local download के बिना remote पर process किया जाता है, जिससे network उपयोग कम होता है और बड़े logs को संभालने के लिए optimization मिलता है
  • मूल रूप से सरल, लेकिन विभिन्न config files, SSH config, और UI controls के माध्यम से extensibility उपलब्ध

Nerdlog परिचय

  • Nerdlog एक text-based UI log viewer है जो बिना केंद्रीय सर्वर के काम करता है
  • यह Graylog/Kibana की तरह logs का analysis कर सकता है, लेकिन installation और maintenance के झंझट के बिना एक lightweight alternative tool है
    • शुरुआती development motivation धीमे और inefficient Splunk से निराशा से शुरू हुई
  • कई remote servers के logs को एक साथ filter और visualize करने के लिए optimized है
  • मुख्य रूप से system logs (/var/log/messages, /var/log/syslog) को process करने के लिए design किया गया है, लेकिन दूसरे formats भी support करता है
  • 1GB से बड़े logs भी तेज़ी से process किए जा सकते हैं
  • मुख्य लक्ष्य multi-node log lookup की speed और efficiency को maximize करना है

डिज़ाइन विशेषताएँ

  • बिना केंद्रीय सर्वर के काम करता है, और हर node के लिए ssh connection बनाकर उसे idle state में बनाए रखता है
  • पूरे logs download किए बिना, हर query पर अधिकतम 250 log messages और histogram data ही भेजा जाता है
  • सभी responses को merge करके एक unified view प्रदान किया जाता है
  • transfer के समय Gzip compression का उपयोग करके network cost कम की जाती है

प्रोजेक्ट की स्थिति और इतिहास

  • 2022 में एक personal hackathon के दौरान धीमे Splunk के विकल्प के रूप में बनाया गया, और 2025 में open source के रूप में जारी किया गया
  • तेज़ implementation के कारण spaghetti code मौजूद है और test coverage कम है
  • वास्तविक उपयोग परीक्षण केवल Linux environment में किया गया है
  • यह अभी proof-of-concept चरण में है, लेकिन वास्तविक उपयोग के लिए पर्याप्त तेज़ और stable है

उपयोग का संक्षेप

  • app चलाने पर query input window दिखाई देती है
  • logstream का मतलब ssh से accessible server के लगातार log files से है
  • ssh port या log file path को सीधे specify किया जा सकता है, या ssh config और अलग config file का उपयोग किया जा सकता है
  • Select field expression में UI पर दिखाने वाले fields को SQL-style में specify किया जाता है

उदाहरण:

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

उदाहरण config file (~/.config/nerdlog/logstreams.yaml):

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

UI संरचना

  • Awk pattern input filter: /foo/, ( /bar/ || /baz/ ) && !/qux/ आदि supported
  • Edit button: पूरी query input window खोलता है
  • Menu button: back, forward, query copy आदि सुविधाएँ देता है
  • Histogram: समय के अनुसार log density की visualization और time range selection संभव
  • Log table: सबसे नए logs नीचे दिखते हैं, और दाईं ओर scroll करके detailed fields देखे जा सकते हैं
  • Status bar:
    • हरा: connected और waiting logstreams की संख्या
    • नारंगी: अभी query हो रहे logstreams की संख्या
    • लाल: connect हो रहे logstreams की संख्या
    • दाईं ओर के नंबर: कुल matching logs / अभी loaded logs / cursor position
  • Command line: : key से access किया जा सकता है और Vim-style commands input किए जा सकते हैं

नेविगेशन के तरीके

  • सामान्य keys: Tab, Shift+Tab, Enter, Esc, PgUp, PgDn आदि
  • Vim-style keys: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a आदि
  • input field के अंदर Up, Down, Ctrl+P, Ctrl+N से history navigation
  • Ctrl+K, Ctrl+J: पूरी query history में आगे-पीछे जाना

मुख्य commands

  • :xc या :xclip: मौजूदा query state को command string के रूप में clipboard में copy करता है
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back, :fwd: browser की तरह पिछली/अगली query पर जाना
  • :edit: query edit window खोलना
  • :write [filename]: अभी loaded logs को file में save करना
  • :reconnect, :disconnect: logstream को फिर से connect करना / disconnect करना
  • :set विकल्प=मान: settings बदलना (numlines, timezone आदि supported)
  • :q: program बंद करना

आवश्यकताएँ

  • remote hosts के लिए SSH access permissions चाहिए
  • local में SSH agent चल रहा होना चाहिए
  • hosts पर gawk installed होना चाहिए, mawk supported नहीं है
  • /var/log/syslog उपयोग करने के लिए rsyslog जैसी system log recording service चल रही होनी चाहिए
  • अधिक जानकारी के लिए आवश्यकताएँ और सीमाएँ देखें

समापन

  • Nerdlog बिना installation के भी remote logs को तेज़ और visual तरीके से देखने का एक efficient tool है
  • इसमें complex setup की ज़रूरत नहीं होती, और network resources बचाते हुए real-time analysis संभव है
  • खास तौर पर Vim users या CLI tools पसंद करने वालों के लिए यह एक आदर्श log analysis tool है

1 टिप्पणियां

 
GN⁺ 2025-04-23
Hacker News टिप्पणियाँ
  • शानदार काम है। TUI सच में काफ़ी साफ़-सुथरा है और ऊपर का histogram मुझे पसंद आया। आज इसे आज़माने वाला हूँ
  • आज सीखा: awk pattern सिर्फ़ साधारण regular expression से बढ़कर हैं, और इन्हें boolean operator के साथ जोड़ा जा सकता है। मैंने awk थोड़ा इस्तेमाल किया है, लेकिन यह बात नहीं पता थी
  • वाकई शानदार प्रोजेक्ट है। खासकर timeline histogram, remote-first design की सादगी, और TUI approach पसंद आई
    • कई hosts के logs संभालते समय मुझे भी ऐसी ही दिक्कतें आई थीं, और उसी के नतीजे में मैंने Logdy नाम का टूल बनाया
    • Logdy web-based है और real-time tailing, structured log search, और कई sources पर तेज filtering पर फ़ोकस करता है। किसी central server की ज़रूरत नहीं पड़ती
    • सीधी तुलना करने की कोशिश नहीं है, लेकिन अगर आप इस क्षेत्र को देख रहे हैं, तो यह complementary approach या अलग scenarios में उपयोगी हो सकता है
    • कई hosts के लिए query functionality जोड़ने पर काम करना अभी बाकी है
    • खैर, nerdlog को सलाम। ऐसा संक्षिप्त टूल देखना हमेशा अच्छा लगता है जिसमें कई services चलानी न पड़ें
  • landing page पर journalctl का एक बार ज़िक्र है, और इससे ऐसा संकेत मिलता है कि logs को पुराने syslog में plain text के रूप में स्टोर होना चाहिए
    • मैं plain text logs स्टोर नहीं करना चाहता और logrotate जैसे पुराने समाधान इस्तेमाल नहीं करना चाहता
    • journald में खुद ही built-in capability है कि वह remote hosts से logs receive कर सके और (--merge का इस्तेमाल करके) उन्हें search कर सके
  • बाद में इसे ज़रूर आज़माऊँगा। gzipped log archive support नहीं है, जो मेरे हिसाब से इसके use cases को काफ़ी सीमित कर देता है
    • मुझे लगता है कि इसे एक ऐसी limitation के रूप में बताया गया है जिस पर लोग ध्यान देंगे, तो इस पर पर्याप्त विचार किया गया होगा। आख़िरकार इसे support करने की योजना है या नहीं, यह जानना चाहूँगा
  • अच्छा दिखता है। अगर आप ज़्यादा users चाहते हैं, तो major Linux distributions के लिए packaging में community की मदद ली जा सकती है
  • बहुत बढ़िया। मैंने इसे अपने छोटे log viewer सूची में जोड़ लिया है https://github.com/dloss/klp#alternative-tools
  • अच्छा है। कुछ साल पहले इसकी ज़रूरत थी। license file नहीं है?
  • अच्छा लग रहा है। सोच रहा हूँ कि source code बदले बिना RFC 3339 format की date/time इस्तेमाल करने का कोई तरीका है क्या
    • सोच रहा हूँ कि क्या यह runit (Void Linux) के साथ काम करता है
  • शानदार। मैं ऐसी ही किसी चीज़ की तलाश में था
  • सोच रहा हूँ कि क्या इससे AWS CloudWatch के logs देखे जा सकते हैं