_ _
_ __ | |__ | | ___ __ _
| '_ \| '_ \| |/ _ \ / _` |
| |_) | | | | | (_) | (_| |
| .__/|_| |_|_|\___/ \__, |
|_| ...2017-02-06 |___/
I'm using the ELK stack to keep log messages from my web server, it's quite
overkill, but it's so easy to setup that a simpler solution would likely have
taken way longer and yielded worse results. It's fun to just mess around with
Kibana and see the different kind of visualizations you can do. So far, there
has not come anything useful out of it, but well, I'm not trying to achieve
anything in particular, so there's a certain consistency in the lack of goals
and the lack of results. I might try sometime to integrate more logging into it
but I'm not quite sure how to do it, I basically forgot to include the field
telling the kind of service the message is coming from, so there's no concept
of a web server, this makes it a bit more difficult to introduce other types
of messages, such as SMART from disks, voltages, temperatures, loads and
whatever else system information I might find interesting to log over time.
Someone awesome dockerized the ELK stack, into a "for small scale" image that
is very usable for us normal people who don't have dedicated hardware for our
log capturing. Anyway, getting started is really simple, you can surely find the
full documentation online, but I'd like to show (more or less) the steps I did
to get the setup that I'm currently using:
Create a file ls.cnf:
input { udp { port => 1337 } }
filter {
json { source => "message" }
mutate {
convert => { "bytesIn" => "integer" }
convert => { "bytesOut" => "integer" }
}
}
from strings to integers, it can be left out if you have no need for ints.
In bash:
sudo sysctl -w vm.max_map_count=262144
docker run -p 5601:5601 -v ls.cnf:/ls.cnf -it --name elk sebp/elk
docker exec -ti elk bash
/opt/logstash/bin/logstash -f /ls.cnf
Visit the glorious web-interface on HTTP port 5601.
There are various ways to feed it data, basically, it assumes that a line is a
log entry. You can do: echo '{"Hello":"logging"}'| nc -u ip-of-elk 1337
A quick and dirty way of pouring logs from one container into another, is:
docker logs --tail 0 -f container | nc -u ip-of-elk 1337
PS. You can install jq and use it to get your containers IP:
docker inspect elk | jq -r .[0].NetworkSettings.Networks.bridge.IPAddress
Very easy, so simple, good.
I still need to migrate contigrator to the new server.. It's quite a nasty piece
of hackwork, and every time I think about migrating it, I think about rewriting
it instead. I definitely do not want to use Jenkins, and pretty much everything
I find fall into either the "can't do enough" or "does everything, twice" bins.
Still, rewriting it might be the best solution. I'm considering it much, soon...
The Android browser has an interesting feature that I can't figure out what is
called.. When you're on certain websites, if you look in the URL bar, there's a
little "R" icon left of the URL, and if you press it, you get a black-on-white
representation of the document, forcibly reflowed to fit the screen, in a nice
size font.. Basically, it turns the website into a mobile edition. What I don't
get is how this works, because, both the pages in the phlog, and the pages on
dusted.dk works with this, but the phlog index, and the dusted.dk index does not
have this icon, even though they use the same HTML template as their sub-pages.
I'm considering adding search to the phlog. I sometimes write down useful stuff
here, though I admit it happens rarely compared to the amount of nonsensical
whining about nothing in particular I do.. Still, it happens, and I even recall
however vaguely, that I've previously written down stuff. So, I'm thinking about
extending the phlog server to allow searching in the text, and also make some
kind of index of all the headlines, since it's capturing them anyway. However,
trouble is, a good search is difficult to implement, and if you want it to be
responsive (autosuggest) then you need to infest the client with client-side
code which I feel has no place on this page.. So I'm not sure what to do about
that. Either accept that there will be some client-side code on the search page,
or settle for a less fancy search functionality.
I made a little setup yesterday, and it was cool, but I want to start over now,
and stream the whole thing, I know nobody is watching, and I even remove the
videos from Twitch, but I like the continuity of knowing that I did in fact
stream everything, even if it is never watched and removed.
I never reached Factorio, I will now however.. I just made code-highlighting
work on the phlog, without adding any weirdness to the plaintext syntax.
It's magic. ;)
javascript.js:
const stuff = "awesome";
console.log(stuff);
Some html:
<!DOCTYPE html>
<html><head><title>No!</title></head><body>Yes!</body></html>
And something weird in a blog that's already plain txt:
There we go, plaintext... because.
Stuff!
REASONS
and Arguments!
plain text verison, which is still beautiful.
Now! Yay! Streaming! :)