Show HN: Piping logs, visualizing in a web app – just suffix "| npx logscreen"
github.com
github.com
https://github.com/soorajshankar/logScreen/blob/f8b29aaef428...
So this will be sharing your logs with the world if you run this outside of a trusted network. (And personally I avoid trusting any networks)
Or I can even make a flag to configure this :thinking
Typically, services allow you set the host address by configuration. This way you can set it to `127.0.0.1` so that it is only available locally.
[0]: https://nodejs.org/api/net.html#serverlistenport-host-backlo...
Instead http://expressjs.com/en/4x/api.html#app.listen sends you to https://nodejs.org/api/http.html#http_server_listen which also won't give the answer but sends you to https://nodejs.org/api/net.html#serverlisten which at some points finally documents that default is 0.0.0.0.
Welcome to the JavaScript ecosystem :/
> app.listen([port[, host[, backlog]]][, callback])
You literally just have to run:
app.listen(3000, '127.0.0.1')
If you don't trust the network you're on you should just be explicit about which IP address you'd like to listen on.How does your tool handle semi-permanent usage or very long logs? For instance, I would run this to view logs from an ssh server that's been up for 6 months, when systemd has rotated the log file etc.
Do you filter them? What does the system you are watching do?
on an hpc cluster, I want to want logs from the slurmctld forever essentially without having to login and grep through the logs.
there's a bunch of online services for this, there's ELK stack, there's grep, and few things sit in between. hence my question
There’s a new era, but one in which you will be even more powerful. LLMs will improve in pumping out code embodiments… but it was your human creativity borne out of operations frustrations, coupled with your care to do something about it, that manifested your product.
Having something like the log explorer in DataDog for local development is so insanely useful
What terminal-based tools are you thinking of when you say this? Just tail/grep/less?
command | vim -
?I love doing that, because then I get all the power of Vim to look at the output. Search, regex search, sorting, bookmarks, counting, macros ...
I started to write output that is indented, so I can use Vim's folding to comfortably look at complex data.
For example if you have entries like this:
2023-04-12 17:22 Sighted and UFO
Location: 27.1742424 12.137234
Temperature: 24°C
Observer: Joe
Actually it turned out to be a dove.
And you press zM in Vim, they all turn into: 2023-04-12 17:22 Sighted and UFO
+ 4 lines
So you have a nice overview and can open individual entries by putting the curser on them and hit zo.And while folded, you still have all the power of Vim to search within them. Regex search. Count by any measure you like etc etc. Actually, you can do anything, as Vim allows you to execute arbitrary vim commands, vim macros or shell commands on your buffer.
Wanna know how many doves typically get mistaken for UFOs around New York grouped by month? Write a script for it and it will be forever at your fingertips.
Then with:
command | vimlive
You get vim with the current state of the data and you can update it with :e :set autoread | au CursorHold * checktime | call feedkeys("G")
So if it's already a file, just open it with vim; if it's a STDOUT/STDERR stream, redirect/`tee` to a file and open that. vim filename
lmaoThis is exactly why you would show logs in the browser though— this is not a nice to have, it is THE core feature. The browser is perfect for building the complex UI necessary for filtering and making sense of log streams.
Any chance you could share a link to the ChatGPT conversation, or a copy of the prompt you used?
I build little tools like this with ChatGPT all the time, it's one of my favourite use-cases for it. I often have an idea for a tool that wouldn't justify an hour of development work but is absolutely worth spending 5 minutes iterating on with ChatGPT.
There is a similar tool that I've been using for years: https://github.com/mthenw/frontail/
I use VSCode CoPilot constantly as simple augmentation and typing-saving — not for wholesale creation of code. I’ve seen my pre-novice daughter use ChatGPT and the results were mixed (good in some ways, horrible in others).
Can you elaborate more on your ChatGPT/LLM working style for this?
^ asked Chat GPT to generate this from my earlier prompts :)
Some other notes, I am a developer who love to make usable products, and these years I learned the usability is most important especially when you are developing in the early stages of a product. So I fed some ideas, asked suggestions, gave some tech stacks (for example, I asked chatGPT to not go with webpack, instead simply load React from CDN for quick iteration. and suggested memoisation on React to render things faster). So process wise similar to any other product development, but it's like having someone listen to your feedback and instructions and do the work- I would like to call collaboration!
One thing I've always wanted was simple filters on log lines in a GUI that let me collapse tags in the log line. I created a proof of concept that showed logs as a tree.
Or I can say I want logs from the point where key=value and until method x.
A bit like a debugger but for logs. Show logs that are between these facts.
Yes, that is exactly what I want as well - a tree-like structure where you can trace events across multiple layers of abstraction as well as across systems (so both horizontal and vertical relations of events, so to speak).
Some infra systems output syslog loglines and there's no changing that, and I still want to capture and relate these log messages to other events (incl. high-level business transactions / processes).
Any way you could share your PoC? :) very interested.
I don't have the code anymore might have been called "logtree", it was a HTML file and very small, it would parse dot "." separated lines such as (user.connected) and arrange them in a tree with indentation, if you clicked the dot syntax it would highlight in yellow other instances of that bucket of entries later in the log file.
I think you want elegant navigation between linear sequences (next, previous) of log lines that are apart in time, but related.
You might want to see all events of the internals of two different components in the tree structure.
Need to process log lines into a graph and then provide quick navigation for them.
It is indeed horizontal and vertical.
This would be very useful to anti-abuse measures if you could trace to the cause of something and cancel all thing caused by it.
> You might want to see all events of the internals of two different components in the tree structure.
> Need to process log lines into a graph and then provide quick navigation for them.
Yes, looks like it, indeed. Yeah.
If interested, this is how I'd hastily summarise my problem statement - it is I think a rather generic recurring problem and analysis pattern, not unique to any company (context: goal is to drive through this initiative as part of overall software architecture improvement needs, and bringing business maturity (as per CMM model) up in our particular case):
- need to introduce and enforce structured event hierarchy (think: each high level business transaction (e.g. user signs document) is a parent which retains all related child events across all layers of abstraction (ideally down to DB connection and file handles, internal API endpoints hit, block storage i/o errors, etc.)
- problem: while for own software Backend-generated events we can enforce and manage this, some infra pieces emit raw text syslog (sometimes even syslog message portion (log format) cannot be fully controlled) and do not contain cross-component technical identifiers for determining relations to events
- there are solutions including ML solutions (of course)
- there exist interesting papers to lose productivity and/or conduct deeper research
- what do, how to balance, how to incrementally define, introduce into culture, incrementally realistically establish this (etc.)
Some interesting papers for approaching the complicated part (assuming defining event ontology and hierarchy and overall semantics is the easy part) - the "relating unstructured logs to events and embedding them into graphs, and aligning and training everyone to analyse and work with "event trees" across multiple teams (but yes, ops, integration support, etc. - I mean is that not the dream, right...) do exist[1][2][3][4][5], and some interesting thoughts and many lofty ambitious questions[6]. Trying to gain insight into best practices here. Meanwhile, maybe links will look interesting :) (e.g. that 1849-2023 IEEE standard - just found it today...)
[1] LogTree: A Framework for Generating System Events from Raw Textual Logs https://www.researchgate.net/publication/220766390_LogTree_A... (https://ltangt.github.io/papers/icdm2010-logtree.pdf)
[2] Structural Event Detection from Log Messages https://faculty.ist.psu.edu/jessieli/Publications/2017-KDD-l... (this one may look bewildering at first but the math eqs are actually ~legible / straightforward from quick glance, even; also, has nice coverage of related work) (overall nice, might look smarter than appears, but not sure; see MCMC approach etc. in section 5.)
[3] golang package https://pkg.go.dev/source.monogon.dev/metropolis/pkg/logtree - why i mention - see KLogParser func (https://pkg.go.dev/source.monogon.dev/metropolis/pkg/logtree...) (but also see limitations) (did not review in detail, maybe nothing useful)
[4] 1849-2023 - IEEE Standard for eXtensible Event Stream (XES) for Achieving Interoperability in Event Logs and Event Streams https://www.xes-standard.org/
[5] related to above (supports standard) https://pm4py.fit.fraunhofer.de/documentation -> see example of ontology: Object-Centric Event Logs
[6] a structural approach to the problem of structure... use existing frameworks and languages like BPML to create or use existing event type ontologies from BPMN models; use a proper structured thought-through ontology for this, and then sort out that pesky "relating low level infra raw syslogs with none/few TIDs to some node on a graph" problem
Anyway, thanks for making through my rant! Writing it in part because on the off chance someone bites and has insight - I'd be very interested to hear more; and partially just to share those links above because those may tickle your (Sam's fancy) :) thanks for reading!
How is it handled when I want to view logs that are too large to fit in memory?
Newer versions of `npx` (last few years) will prompt the user before installing a package. Older versions did not. Note that installing the package can run arbitrary scripts as a side effect with at least the level of permission of the current user, so there is implicit trust required of the author, and the authors of all transitive dependencies.
All you need to know.
Suppose that answers it.
Definitely this can be made better with proper packaging and tooling! As I mentioned, more than the idea, implementation was an experiment on the ability of collaborative iterations with GPTs- it was fun!
For those of us not in the know, what does that mean?
I reckon that some people are either critical of LLMs due to the data that they're trained on (concerns about the legality of using the outputs, or the ethics of taking open source projects with a variety of licenses and how transformative or not the output might be), or question the quality of the code that they might output. Oh, also there's hype cycles and right now people at large might overestimate the capabilities of what LLMs can or cannot do well, which can be tiring, as seeing constant posts about crypto was (where we had a solution in search of a problem).
In my eyes, they can be used in conjunction with something like IntelliSense and IDEs to solve select problems (ones with solutions that already exist out there) more quickly, as well as save time on some boilerplate, as long as you still validate the outputs and actually check if everything works. Nowadays I'm using GitHub Copilot and the user experience is mostly okay, I'd say it actually lets me write code faster, at the expense of occasionally getting things pretty wrong, but is still a net positive, other considerations aside.
> Please don't fulminate. Please don't sneer, including at the rest of the community.
<div className="flex items-start border-b border-gray-300 py-2 hover:bg-blue-100 cursor-pointer transition-all"
I'm not saying that humans never come up with this kind of crap, but it feels like it's going to be a LOT more common the more we resort to AI. I wonder if "... and make the code easy-to-read so that it's maintainable in future" is ever included in prompts for LLM-generated code. Web-Based Log Viewer: Get a cleaner and more organized view of command outputs.
Real-Time Updates: Logs are displayed in real-time as the command executes.
Interactive Interface: Search, filter, and navigate through logs easily. // TODO
ChatGPT has its limits // TODO