[systemd-devel] Filtering logs of a single execution of a (transient) service
Filipe Brandenburger
filbranden at google.com
Fri Mar 23 19:52:06 UTC 2018
Hi!
So I'm testing a program repeatedly and using `systemd-run` to start a
service with it, passing it a specific unit name.
When the test finishes and I bring down the service, I want to be able to
collect the journald logs for that execution of the test alone.
Right now what I'm doing is naming the service differently every time,
including a random number, so I can collect the logs for that service alone
at the end. Such as:
# myservice_name=myservice-${RANDOM}.service
# systemd-run --unit="${myservice_name}" --remain-after-exit mybin
--myarg1 --myarg2 ...
And then collecting the logs using:
# journalctl -u "${myservice_name}"
One disadvantage of this approach is that the units pile up as I keep
running tests...
# systemctl status myservice-*.service
And that it's hard to find which one is the latest one, from an unrelated
session (this works only while active):
# systemctl list-units --state running myservice-*.service
I would like to run these tests all under a single unit name,
myservice.service. I'm fine with not having more than one of them at the
same time (in fact, that's a feature.)
But I wonder how I can get the logs for a single execution...
The best I could come up with was using a cursor to get the logs for the
last execution:
# journalctl -u myservice MESSAGE_ID=39f53479d3a045ac8e11786248231fbf
--show-cursor
-- Logs begin at Thu 2018-03-22 22:57:32 UTC, end at Fri 2018-03-23
19:17:01 UTC. --
Mar 23 16:40:00 mymachine systemd[1]: Started mybin --myarg1 --myarg2
Mar 23 16:45:00 mymachine systemd[1]: Started mybin --myarg1 --myarg2b
Mar 23 16:50:00 mymachine systemd[1]: Started mybin --myarg1 --myarg2
--myarg3
-- cursor:
s=abcde12345...;i=123f45;b=12345abcd...;m=f123f123;t=123456...;x=...
And then use the cursor to query journald and get the logs from the last
execution:
# journalctl -u myservice --after-cursor 's=abcde12345...;i=123f45;...'
That works to query the last execution of the service, but not a random
one...
I guess what I'm looking for is a way to get systemd to inject a journal
field to every message logged by my unit. Something like an environment
variable perhaps? Or some other field I can pass to systemd-run using -p.
Or something that systemd itself generates, that's unique for each
execution of the service and that I can query somehow (perhaps `systemd
show` while the service is up.) Is there any such thing?
Any other suggestions of how I should accomplish something like this?
Thanks!
Filipe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180323/86eb40e5/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4851 bytes
Desc: S/MIME Cryptographic Signature
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180323/86eb40e5/attachment.bin>
More information about the systemd-devel
mailing list