The ox_mon package provides some tools to keep monitor your machine to keep it up to date, free of viruses, and generally working properly.
Basically, there are lots of little monitoring and checking tasks you may find yourself needing to do. You could write a separate script for each such task, but it would be nice to have some basic scaffolding for things like notifications, logging, testing, and so on to simplify machine monitoring. Better yet, by having a common framework many developers can contribute small snippets of such tools that work in a similar way to simplify life for everyone.
Once you install ox_mon
as described in the Installation section,
you can do something like
ox_mon check <thing> [<OPTIONS]
to run various checks discussed in the Checkers section with a consistent reporting system described in the Notifiers section.
One useful feature of ox_mon
is that you can sign-up for free for
the Sentry service at https://sentry.io and either set the environment
variable SENTRY_DSN
or provide the --SENTRY
argument to
your ox_mon
commands and get notifications via sentry. This provides
an easy way to run ox_mon
commands in cron or other scripts and get
convenient error notification on failures without having to configure
a mail server or other tools.
You can install via the usual pip install ox_mon
. If you want to
install and be able to edit your installation, you may consider doing
something like pip install --editable ox_mon
.
You can see the list of possible commands via
ox_mon --help
One of the most useful commands is ox_mon check
. If you try
ox_mon check --help
you will see a list of possible checkers you can run. These all use the same general syntax for things like how to notify an administrator if issues are found while also checker specific customization.
The apt
checker will check your Ubuntu installation to see if you
have the latest security updates installed. If you do, then nothing
happens. If you have not done apt update
recently or you do NOT
have the latest security packages installed, then you will be notified.
You can control the notification
methods and how many days have passed since you did apt update
using
command line options. For example, doing
ox_mon check apt --notifier echo --age-in-days 7
would not notify you provided that you have done apt update
within 7
days. If your packages are stale, the notification will just print a
message. See the Notifiers section for notification options.
The disk
checker will check your system to see if the disk is too
full. If so, you will be notified as described in the Notifiers
section.
You can control the notification methods and how full the disk is allowed to be before it triggers an alarm. For example, doing
ox_mon check disk --notifier loginfo --max-used-pct 5
would not notify you using python’s logging.INFO
stream (which
usually goes to stderr
) if your disk is more than 5%
full.
The clamscan
checker will use ClamAV (assuming you have it
installed) to virus scan your system. You can control the target
location to scan via something like
ox_mon check clamscan --target $HOME
The ox_mon backup
command group provides a way to use ox_mon
for
backups. Try
ox_mon backup --help
for information.
Ideally it is nicer to right your scripts using the ox_mon
library
interface since python is often more robust than shell scripts. If you
have a quick task, however, you can use gcmd raw
to run a generic
raw command via something like:
ox_mon gcmd raw --cmd /bin/ls
You can also provide arguments or options for your raw command by
using the --args
option to gcmd
and using colons instead of dashes
(one outstanding feature request is to clean-up the colon syntax to
make this less ugly):
ox_mon gcmd raw --cmd /bin/ls --args :lt
The benefit of using gcmd raw
is that you can include sentry or
other notifiers to report results of the command.
There are a variety of ways to get notifications:
echo
: Just echoes notification to stdout.email
: Will send you an email provided you specify the following:OX_MON_EMAIL_TO
: A comma separated list of email addresses (e.g.,foo@exmaple.com
orfoo@exmaple.com,bar@example.com
) to send email to. If not set, will attempt to lookup from environment variable.OX_MON_EMAIL_FROM
: Sending email address. If not set, will attempt to lookup from environment variable.OX_MON_GMAIL_PASSWD
: A password to use if you want to use gmail as the SMTP relay to send mail from. This password should correspond to the username inOX_MON_EMAIL_FROM
.OX_MON_SES_PROFILE
: If provided and email notifier is requested, will use this to send email via AWS SES. If not set, will attempt lookup from environment.- IMPORTANT: Either
OX_MON_SES_PROFILE
orOX_MON_GMAIL_PASSWD
is required to send emails.
loginfo
: Will use Python’slogging.info
to send notification. This can be useful if you do not want the notifications in stdout but in stderr.sentry
: Will use the Sentry service from https://sentry.io.SENTRY
: The sentry DSN for the project to notify. The default value for this will be taken from theSENTRY_DSN
environment variable if it exists.