~brodo/journald-ai.git
6 months agojournald-ai: add Makefile master
Dominik Brodowski [Sat, 6 Apr 2019 14:23:57 +0000 (16:23 +0200)]
journald-ai: add Makefile

Add a minimalistic Makefile and a corresponding .gitignore. On this basis,
extend README to explain how to activate journald-ai via systemd.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: multiple entries may share timestamp
Dominik Brodowski [Sat, 6 Apr 2019 14:22:10 +0000 (16:22 +0200)]
journald-ai: multiple entries may share timestamp

As multiple entries may share one realtime timestamp, better be safe than
sorry and look for the first entry which is older than the last seen one.
This may mean that we report the same line twice, but it is always better
to be safe than sorry.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: sort files into bin, man, and lib
Dominik Brodowski [Sat, 6 Apr 2019 14:19:20 +0000 (16:19 +0200)]
journald-ai: sort files into bin, man, and lib

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: rename cronjob executable, add man page
Dominik Brodowski [Sat, 6 Apr 2019 13:51:26 +0000 (15:51 +0200)]
journald-ai: rename cronjob executable, add man page

Rename the cronjob script to ai-cronjob, and add a man page describing
its usage.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: simplify reader setup
Dominik Brodowski [Sat, 6 Apr 2019 11:33:42 +0000 (13:33 +0200)]
journald-ai: simplify reader setup

Simplify the code which -- if necessary -- jumps back to the log journal
which is to be handled next.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: speed up exit
Dominik Brodowski [Sat, 6 Apr 2019 10:46:04 +0000 (12:46 +0200)]
journald-ai: speed up exit

If the state machine is exiting, there is no need to worry about
checking and handling inotifier events and/or recompilation of the
ruleset.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: add code documentation
Dominik Brodowski [Sat, 6 Apr 2019 10:42:49 +0000 (12:42 +0200)]
journald-ai: add code documentation

Add documentation to the Classes, functions, and base values of journald-ai

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: fix TypeError handling
Dominik Brodowski [Sat, 23 Mar 2019 15:29:20 +0000 (16:29 +0100)]
journald-ai: fix TypeError handling

If we cannot check the received message string against known strings
due to a TypeError (such as because the string contains bad elements),
we need to operate on the repr string. The code to do that was already
there, but contained a copy&paste bug which caused us to operate on the
original message again.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: there are log entries without a _TRANSPORT
Dominik Brodowski [Sat, 23 Mar 2019 08:34:46 +0000 (09:34 +0100)]
journald-ai: there are log entries without a _TRANSPORT

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
6 months agojournald-ai: fix up calls to self.report.alert()
Dominik Brodowski [Sat, 23 Mar 2019 08:33:20 +0000 (09:33 +0100)]
journald-ai: fix up calls to self.report.alert()

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: print alert first, then add delay
Dominik Brodowski [Sun, 3 Mar 2019 15:49:51 +0000 (16:49 +0100)]
journald-ai: print alert first, then add delay

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: clean up main filter function
Dominik Brodowski [Sun, 3 Mar 2019 15:19:30 +0000 (16:19 +0100)]
journald-ai: clean up main filter function

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: reduce number of parameters
Dominik Brodowski [Sun, 3 Mar 2019 15:12:46 +0000 (16:12 +0100)]
journald-ai: reduce number of parameters

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: allow to whitelist UIDs
Dominik Brodowski [Sun, 3 Mar 2019 14:57:28 +0000 (15:57 +0100)]
journald-ai: allow to whitelist UIDs

For all UIDs listed in /etc/ai/uid.whitelist, any log messages received
with _UID equalling to this UID are ignored (that is, filtered out).

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: add option to export repr() of unknown log entry
Dominik Brodowski [Sun, 3 Mar 2019 14:03:04 +0000 (15:03 +0100)]
journald-ai: add option to export repr() of unknown log entry

For log entries to be reported, report.entry() should be used, for
internal alerts, report.alert() should be used instead. This allows
us to add a new command line option '--repr' which tells journald-ai
to print out a repr() variant of culprit log entries as well.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: pre-define valid transports
Dominik Brodowski [Sun, 3 Mar 2019 13:46:33 +0000 (14:46 +0100)]
journald-ai: pre-define valid transports

According to the journald documentation, only six transports are valid, and
each log entry must contain an entry keyed with '_TRANSPORT'. Therefore,
much code in the handling of known and unknown transports can be simplified.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: fix recompile race
Dominik Brodowski [Sun, 3 Mar 2019 08:29:52 +0000 (09:29 +0100)]
journald-ai: fix recompile race

We should set up the inotify watch first, and only then actually recompile
the filter rules.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: fix message ambiguity
Dominik Brodowski [Sun, 3 Mar 2019 12:51:21 +0000 (13:51 +0100)]
journald-ai: fix message ambiguity

message currently refers to whole log entries, but also to _MESSAGE
strings within a log entry. Fix this ambiguity up by renaming the first
case to "entry".

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: add a few comments
Dominik Brodowski [Sun, 3 Mar 2019 08:11:57 +0000 (09:11 +0100)]
journald-ai: add a few comments

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
7 months agojournald-ai: add config comments, extend timeout
Dominik Brodowski [Sun, 3 Mar 2019 07:58:42 +0000 (08:58 +0100)]
journald-ai: add config comments, extend timeout

Add more comments to the configuration options, and extend ai_timeout
as it is in microseconds.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
2 years agojournald-ai: handle journald entries with no message content
Dominik Brodowski [Sun, 30 Jul 2017 14:10:15 +0000 (16:10 +0200)]
journald-ai: handle journald entries with no message content

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
2 years agojournald-ai: Initial commit -- presented at tübix 2017
Dominik Brodowski [Sat, 24 Jun 2017 12:54:00 +0000 (14:54 +0200)]
journald-ai: Initial commit -- presented at tübix 2017

Artificial ignorance logging -- or "enumerating goodness" -- means to look
at just those log messages which you did not expect. All other log
messages -- those which are expected, as they appear with some sort of
regularity -- are ignored. This allows you to quickly discern new problems
or unexpected behavior. All the "regular" log messages -- which you may
need to debug specific issues -- are kept in their regular places. This
concept is well known since at least 1997, see [1] and [2] for details.

[1] http://www.ranum.com/security/computer_security/papers/ai/index.html
[2] http://www.ranum.com/security/computer_security/editorials/dumb/

journald-ai is a framework for artificial ignorance logging for the
systemd-journald logger. Closely coupling the artificial ignorance
framework with journald allows to make use of he specifics of journald,
especially the metadata information also logged by journald.

The messages which are known and should be filtered out are stored in
files below /etc/ai/. The directory name below /etc/ai/ reflects the
transport over which systemd-journald receives the log message -- one
of driver, journal, kernel, stdout and syslog --, the filename
reflects the identifier: The identifier for kernel-messages is kernel;
otherwise the first available entry of SYSLOG_IDENTIFIER, _SYSTEMD_UNIT
and _COMM is the identifier. The ending of the file denotes the
filtering algorithm. Currently, only python regular expressions are
supported; these files must have the ending ".regex".

As this tool requires specific set-up to run, there is *no* Makefile
yet, and also no default rules which are filtered out. An example /
testcase may be found in README.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>