Skip to content

Instantly share code, notes, and snippets.

@littlepea
Last active April 18, 2019 06:08
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save littlepea/5211630 to your computer and use it in GitHub Desktop.
Save littlepea/5211630 to your computer and use it in GitHub Desktop.
Munin setup for monitoring Django on EC2 Ubuntu instance with nginx

This is a short tutorial on setting up munin to monitor your Django website on ec2.

We're gonna be using Nginx instead of apache here because it's more lightweight and popular between Django developers.

Step by step tutorial

1. Install munin ''''''''''''' :

# amend nginx if it's already installed
sudo apt-get install munin munin-node nginx

2. Edit /etc/munin/munin-node.conf ''''''''''''' :

host_name my.hostname.com
allow ^.*$

3. Edit /etc/munin/munin.conf ''''''''''''' :

[my.hostname.com]
    address domU-00-00-00-00-00-00.compute-1.internal

Where 'my.hostname.com' is a node you're going to monitor and 'domU-00-00-00-00-00-00.compute-1.internal' is an internal address of the ec2 instance this node is hosted on.

4. Edit /etc/nginx/sites-available/stats.hostname.com '''''''''''''

Assuming 'stats.hostname.com' is where you want your munin monitoring dashboard to be:

server {
    listen 80;
    server_name stats.hostname.com;

    location / {
            root /var/cache/munin/www;
    }
}

5. Enable this nginx site and restart nginx ''''''''''''' :

sudo ln -s /etc/nginx/sites-available/stats.hostname.com /etc/nginx/sites-enabled/
sudo /etc/init.d/nginx restart

6. Open http://stats.hostname.com/ in your browser '''''''''''''

If everything worked you should see your basic munin interface with information about disk, munin, network, processes, squid and system:

image

7. (Optional) If you want to protect your dashboard with basic HTTP auth you need to generate a htpasswd file in /etc/nginx/ ''''''''''''' :

sudo echo -e "your-username:`perl -le 'print crypt("your-password","salt")'`" > /etc/nginx/htpasswd

If you don't have permissions to do that, just use the first part of the expression to generate an encrypted password and create htpasswd manually. You can also use .htpasswd file Generator .

You'll need to update /etc/nginx/sites-available/stats.hostname.com:

server {
    listen 80;
    server_name stats.hostname.com;

    location / {
            root /var/cache/munin/www;
            auth_basic      "Restricted";
            auth_basic_user_file    /etc/nginx/htpasswd;

    }
}

Restart nginx again:

sudo /etc/init.d/nginx restart

Now munin is password protected.

8. Enable any pre-installed munin plugins you might need '''''''''''''

You can see a list of available plugins by:

ls /usr/share/munin/plugins/

To enable any plugin just symlink it to /etc/munin/plugins/. For example, let's enable mysql and postfix plugins:

sudo ln -s /usr/share/munin/plugins/mysql* /etc/munin/plugins/
sudo ln -s /usr/share/munin/plugins/postfx* /etc/munin/plugins/

9. (Optional) Install additional munin plugins '''''''''''''

You can find many plugins at munin-monitoring / contrib

  • Just download raw files for plugins you need into /usr/share/munin/plugins
  • Make them executable
  • Symlink to /etc/munin/plugins/
  • Add to /etc/munin/plugin-conf.d/munin-node

Here's an example for Nginx plugin:

cd /usr/share/munin/plugins
sudo wget -O nginx_request https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_request
sudo wget -O nginx_status https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_status
sudo wget -O nginx_memory https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_memory 

sudo chmod +x nginx_*

sudo ln -s /usr/share/munin/plugins/nginx_* /etc/munin/plugins/

Edit /etc/munin/plugin-conf.d/munin-node and add the lines:

[nginx*]
env.url http://localhost/nginx_status

Restart munin-node:

sudo /etc/init.d/munin-node restart

More plugin installation examples

10. Reload http://stats.hostname.com/ in your browser and Enjoy! '''''''''''''

Now you should have all new plugins enabled.

image

Credits:

More plugin installation examples:

  • Nginx
  • RabbitMQ
  • Celery

* Gunicorn :

cd /usr/share/munin/plugins
sudo wget -O nginx_request https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_request
sudo wget -O nginx_status https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_status
sudo wget -O nginx_memory https://raw.github.com/munin-monitoring/contrib/master/plugins/nginx/nginx_memory 

sudo chmod +x nginx_*
sudo ln -s /usr/share/munin/plugins/nginx_* /etc/munin/plugins/

sudo wget -O rabbitmq_connections https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_connections
sudo wget -O rabbitmq_consumers https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_consumers
sudo wget -O rabbitmq_messages https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_messages
sudo wget -O rabbitmq_messages_unacknowledged https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_messages_unacknowledged
sudo wget -O rabbitmq_messages_uncommitted https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_messages_uncommitted
sudo wget -O rabbitmq_queue_memory https://raw.github.com/munin-monitoring/contrib/master/plugins/rabbitmq/rabbitmq_queue_memory

sudo chmod +x rabbitmq_*
sudo ln -s /usr/share/munin/plugins/rabbitmq_* /etc/munin/plugins/

sudo wget -O celery_tasks https://raw.github.com/munin-monitoring/contrib/master/plugins/celery/celery_tasks
sudo wget -O celery_tasks_states https://raw.github.com/munin-monitoring/contrib/master/plugins/celery/celery_tasks_states 

sudo chmod +x celery_*
sudo ln -s /usr/share/munin/plugins/celery_* /etc/munin/plugins/

sudo wget -O gunicorn_memory_status https://raw.github.com/munin-monitoring/contrib/master/plugins/gunicorn/gunicorn_memory_status
sudo wget -O gunicorn_status https://raw.github.com/munin-monitoring/contrib/master/plugins/gunicorn/gunicorn_status 

sudo chmod +x gunicorn_*
sudo ln -s /usr/share/munin/plugins/gunicorn_* /etc/munin/plugins/

sudo wget -O redis_ https://raw.github.com/munin-monitoring/contrib/master/plugins/redis/redis_    

sudo chmod +x redis_*
sudo ln -s /usr/share/munin/plugins/redis_ /etc/munin/plugins/redis_connected_clients
sudo ln -s /usr/share/munin/plugins/redis_ /etc/munin/plugins/redis_per_sec
sudo ln -s /usr/share/munin/plugins/redis_ /etc/munin/plugins/redis_used_memory

Edit /etc/munin/plugin-conf.d/munin-node and add the lines:

[nginx*]
env.url http://localhost/nginx_status

[rabbitmq*]
user root

# Optional:

#[celery_tasks]
#env.tasks myapp.tasks.SendEmailTask,myapp2.tasks.FetchUserDataTask

#[gunicorn_*]
#env.gunicorn_pid_path [path to your gunicorn pid]

#[redis*]
#env.host 127.0.0.1
#env.port 6379
#env.password password

Restart munin-node:

sudo /etc/init.d/munin-node restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment