10 Free Server & Network Monitoring Tools that Kick Ass

10 Free Server/Network Monitoring Tools that Kick Ass

When you have a website or a network, it’s helpful to be aware of any issues as soon as they occur. There are open source and freeware server/network monitoring tools that will supervise your infrastructure for any issues that may arise. These tools are meant to aid you in avoiding being taken offline and evaluating if your resource needs has outgrown your infrastructure.

In this article, we review our top 10 server/network monitoring tools. You will see a variety of server applications here so that you might find the tool (or tools) for your needs.

1. Monit


Monit not only monitors your server, but also attempts to remedy problems by taking predefined actions for certain situations. For example, if your database server crashes, Monit can automatically restart the service if this is the action that you want to take (hint: it usually is).

If you have more than one server that you need to monitor, then you can useM/Monit– an extended version of Monit that provides a simple way to monitor multiple machines.

There’s also an iPhone app available for M/Monit to help you conveniently check on your network without lugging around a laptop around.

2. Ganglia


When you have a cluster of machines, it’s difficult to see how the whole cluster is doing all at once. Ganglia, instead, presents an overview of the whole cluster. This is a great tool to have set up when you’re working with a server cluster; with that said, it may be overkill for single-machine set-ups.

3. Munin


Munin monitors and graphs system performance metrics. It can automatically produce daily/weekly/monthly/yearly performance graphs and reports of many important metrics. It comes with the ability to monitor core system resources, such as memory, disk space, CPU usage, server applications such as MySQL, Apache, and Squid.

One of Munin’s greatest strengths is how simple it is to extend. With just a few lines of code, you can write a plugin to monitor almost anything. Being so easy to extend means that Munin is also a good choice for graphing things unrelated to server performance, such as the number of user signups or website popularity.

4. Cacti


Cacti is similar to Munin in many ways. What is makes Cacti different though–and where it stands out in relation to Munin–is that it allows you to resize your graphs and view data for an arbitrary range. Whereas Munin has fixed daily, weekly, monthly and yearly graphs (unless you write a custom extension), Cacti lets you view your data however you want to: last 2 hours, last 4 days, last 6 months, out of the box. You can even visually select and zoom into regions on your graphs.

5. Nagios


Nagios is “the industry standard in IT infrastructure monitoring,”–well, at least that’s what it says on their website. Nagios can be complicated to install and configure, but its wealth of features are unmatched by any tool out in the market and is geared for the experienced IT network administrator. Nagios supports monitoring of multiple hosts and can send out alerts via email, pager (if you still use this ancient technology) or SMS/text messaging. Like Monit, it can also be configured to automatically respond to problems.

6. Zabbix


Zabbix is a feature-packed monitoring tool. It has great visualization support including user-defined views, zooming, and mapping. It can send out alerts via email, SMS or instant message. It also provides audible alerts, which can be useful when you’re physically near the monitoring machine.

7. Observium


Observium is geared towards Linux, BSD and Cisco networks. It supports auto discovery of your network infrastructure, finding the networks that you’re likely interested in monitoring; this feature can be compared to how your Wi-Fi software automatically finds signals in range that you can jack into. Observium provides detailed graphs, and can be set up alongside Nagios to provide alerts. It also integrates well with Collectd (featured below) for a more robust interface.

8. Zenoss


Zenoss is an open source version of the commercial server monitoring tool Zenoss Enterprise, written entirely in Python. It supports the Nagios plugin format, so many existing Nagios plugins can be used in Zenoss. One of the main highlights of Zenoss is its powerful yet simple to use user interface.

9. Collectd


Collectd is similar to Munin and Cacti in that it focuses on graphing system metrics. Where it excels in is that it is designed specifically for performance and portability; this ultimately means it’s great on rugged systems, low-end systems, and embedded systems. Being designed for performance and low-system resource use means that Collectd can gather data every 10 seconds without interfering with your server processes, providing extremely high-resolution statistics. You can write extensions for it in C, Perl or Java.

10. Argus


Argus focuses on the monitoring of network services, and supports IPv4 and IPv6. It has a nice alert escalation procedure: after sending out an alert and the problem still isn’t resolved within a fixed amount of time (because the systems admin is at home enjoying his sleep), another alert will be sent out to someone else.

quoted from:

About the Author

Ben Dowling is a passionate software developer who specializes in web and mobile application development. He currently works for Mendeley in London, UK, and regularly blogs about development at Coderholic. You can also find him on twitter.

at: sixrevisions.com


Using Nginx As Reverse-Proxy Server On High-Loaded Sites

install Nginx 0.7.62 logo

Two weeks ago we have started new version of one of our primary web projects and have started very massive advertisement campaign to promote this web site. As the result of that advertisements, our outgoing traffic has been increased to 200-250Mbit/s from only one server! In this article I will describe, how to build stable and efficient web site with two-layer architecture (with frontend + backend web servers) or how to modify your current server configuration to get additional resources to handle more requests.

First of all, let me describe general structure of web-server and how it handles clients requests:

  1. Client initiates request to your server.
  2. His browser connects to your server.
  3. Your server (as for Apache) creates new thread/process to handle request.
  4. If client requested dynamic content, web server spawns CGI process or executes dynamic content handling module (i.e. mod_php) and waits while request will be processed. When it receives result web-page, it sends it to client.
  5. If client asked for some static file, web server sends this file to client
  6. Client’s browser receives answer, closes connection to web server and displays content.

As you can see, when there are many requests coming to your server, your server needs to create many parallel threads/processes and keep them running while client will close connection. If client has slow connection, web server process will wait too long and resource consumption will increase very fast.

What we can do in such situation? Simple solution is to buy more memory and more CPUs for your server and wait while web server load will crash your server. But there is more efficient solution! You can simply put some small piece of software (nginx, for example) behind your big web server and let it handle all requests to static content and to pass all dynamic requests to primary web-server. With this solution your big server will spawn additional threads/processes only for static pages and it will return answers to small frontend very fast and then can free resources to use them to handle another queries. Small frontend can wait very long time while client will receive his content and will close connection – backend server will not consume resources for such long time!

Here you can see simple diagram of proposed web server configuration:

As additional benefit from such configuration you can get very useful feature of managed downloads that will be described below.

If your server contains some static resources, which can be downloaded not by all users (content provider can provide mp3 files only to users with positive balance or some site can provide downloads only to logged-in users), in generic configuration you need to create some script to handle this downloads and to create some ugly links likehttp://some.service.com/down.php?file=xxx.mp3 and additionally your users will not be able to resume downloads (except such cases when your script so complex, that it handles Ranges HTTP-header)…

In configuration with nginx frontend, you can create simple URL-rewriting rule, that will pass all requests to pretty URLs like http://your.cool-service.com/files/cool.mp3 to some simple script /down.php automatically and, if this script has returned X-Accel-Redirect header, will send requested file to user automatically with Ranges header support and when user will download his cool content, your backend server can handle other requests. Your users even will not know that your script controls their downloads. Simple diagram for described algorithm is following:

Let me bring your attention to interesting fact: If you only accelerate your site with described technique and do not want to create download control system, you do not need to modify any of your scripts on your backend server! They will work as in original configuration!

So, the last thing you need to boost your web server with nginx reverse proxying technique is following configuration file snipet:

server {
listen       80;
server_name  some-server.com http://www.server-name.com;access_log  logs/host.access.log  main;

# Main location
location / {
proxy_redirect     off;

proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

client_max_body_size       10m;
client_body_buffer_size    128k;

proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;

proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 64k;

# Static files location
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
root   /spool/www/members_ng;


Full version of sample config file you can get here.

Notice: If your backend scripts are using user IP addresses for some purposes, you will need to install mod_rpaf module to use X-Real-IP header provided by nginx instead of real user’s IP address.

That is all! Now you can simply install nginx on your server, configure it and your server will be able to handle more traffic with the less resources that it uses now! Everything will be done transparently for your currently written scripts and if you want, you will be able to provide download handling with simple trick, that I will describe in my next post ;-)

If you have some questions, do not hesitate to ask them here in comments – I will try to answer all of them. If you liked this article, you can support author by taking a look at advertisements on this page or simply vote for it on digg.com.

Posted by Alexey Kovyrin under Networks ·kovyrin.net

Send email using GMail SMTP server from PHP page

Just a reminder for myself and for those readers out there who need to send email from a google hosted email address.


       require_once "Mail.php";

        $from = "<from.gmail.com>";
        $to = "<to.yahoo.com>";
        $subject = "Hi!";
        $body = "Hi,\n\nHow are you?";

        $host = "ssl://smtp.gmail.com";
        $port = "465";
        $username = "<myaccount.gmail.com>";
        $password = "password";

        $headers = array ('From' => $from,
          'To' => $to,
          'Subject' => $subject);
        $smtp = Mail::factory('smtp',
          array ('host' => $host,
            'port' => $port,
            'auth' => true,
            'username' => $username,
            'password' => $password));

        $mail = $smtp->send($to, $headers, $body);

        if (PEAR::isError($mail)) {
          echo("<p>" . $mail->getMessage() . "</p>");
         } else {
          echo("<p>Message successfully sent!</p>");

    ?>  <!-- end of php tag-->
hope this helps somebody :)
quote: stackoverflow.com