Setting up an On-Premise instance of Amon

NewRelic no longer offers server monitoring for free accounts, so what are the alternatives when you’re on a skin-flint budget?

There are lots, but I’m not going to review any of them. Instead, I’ve been tasked with getting Amon running on a DigitalOcean droplet so that it might be appraised.

Amon can either be used as a SAAS, hosted by Amon themselves. Or it can be run “On-Premise” by cloning the git repo to your own server.

The On-Premise instructions didn’t work for me as-is on a fresh Ubuntu 16.04 server. So I present to you here the result of getting it going!


  1. You know what you’re doing with Linux on a server.
  2. You can create your own VPS, or have dedicated hardware, that will only be used for server monitoring.
  3. MongoDB is installed from Mongo’s repo, not Ubuntu’s.
  4. Let’s Encrypt is used for the SSL certificate.
  5. The FQDN used for accessing the Amon instance matches the server’s full hostname (easy enough to change by altering FULL_HOSTNAME).
  6. Postfix is used on localhost as the MTA (alter the content of /etc/opt/amon/amon.yml if that’s not to be the case).

The following took the instructions of and then extended/tweaked them to create a fully working server.

So the initial script I wrote turned out better suited to being a collection of scripts. And to keep them together, I’ve created a new GitHub repo to house them.

If you find it useful, great! If you would like to help make the installation provisioning system better, PRs are very welcome 🙂

5 thoughts on “Setting up an On-Premise instance of Amon”

  1. I followed the official setup guide and stumbled over this blog article while searching for a solution to the following things:

    – I’m receiving nginx 500 errors when trying to test email sending. (localhost postfix)
    – Resetting pause of alerts doesn’t work properly either.
    – I could not figure out how to monitor ZFS volume pools

    Any ideas?

  2. Thank you for the scripts. I have a problem during amon installation and see if you could help. Everything install well until the line “python migrate” in the Any idea? Thanks in advance.

    /opt/amon/env/lib/python3.5/site-packages/psycopg2/ UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use “pip install psycopg2-binary” instead. For details see: .
    Traceback (most recent call last):
    File “”, line 10, in
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 371, in execute_from_command_line
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 365, in execute
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 288, in run_from_argv
    self.execute(*args, **cmd_options)
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 332, in execute
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 364, in check
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/commands/”, line 58, in _run_checks
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/management/”, line 351, in _run_checks
    return checks.run_checks(**kwargs)
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/checks/”, line 73, in run_checks
    new_errors = check(app_configs=app_configs)
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/checks/”, line 40, in check_url_namespaces_unique
    all_namespaces = _load_all_namespaces(resolver)
    File “/opt/amon/env/lib/python3.5/site-packages/django/core/checks/”, line 57, in _load_all_namespaces
    url_patterns = getattr(resolver, ‘url_patterns’, [])
    File “/opt/amon/env/lib/python3.5/site-packages/django/utils/”, line 36, in __get__

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.