Cacti (home)ForumsDocumentation
Cacti: offical forums and support
It is currently Fri Apr 28, 2017 8:35 pm

All times are UTC - 5 hours




Post new topic Reply to topic  [ 17 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: A good starting Weathermap example fromr a weathermap addict
PostPosted: Wed Feb 04, 2015 9:39 am 
Offline
Cacti User

Joined: Thu Jan 21, 2010 8:41 pm
Posts: 157
To All, I been using Howie weathermaps for the last 5 years plus. Over the years I have developed a strong addiction to network environment monitoring via Howie's tool :) and infected everyone around me to the point that we use Cacti as our primary network monitoring tool with Cacti Weathermap being the main focus!
Today I would like to share my best knowledge that I have acquired over the last 5 years as well as some transparent images and fonts I have created and collected over the years to support my habit.
I'm including a complete example of map config file as a starting point for anyone looking to create a professional looking map. Of cause I have removed some of the private data to protect the innocent. Please note: There are few features (such as VPN tunnel uptime and CISCO ASA VPN tunnel logout) that use features that isn't currently publicly released code by Howie, but part of development SVN.


Attachments:
Example-map.png
Example-map.png [ 142.44 KiB | Viewed 5874 times ]
File comment: Cacti weathermap Images folder. All the custom images I have created over time.
images.rar [2.18 MiB]
Downloaded 682 times
File comment: Map Example conf file + fonts details
Example-map.rar [504.4 KiB]
Downloaded 882 times
Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Sat Feb 14, 2015 3:27 pm 
Offline
Cacti User

Joined: Mon May 31, 2010 9:26 am
Posts: 124
Hello,
I wanna be the first to thank you for you work and for sharing. In a world where's so much competition and more and more people are keeping things for themselfs, its a breath of fresh air to see a post like yours.


PS : I've shown your maps to almost everyone I know and its into Cacti/Monitoring.


SO : A big thank you.


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Sun Feb 15, 2015 2:38 pm 
Offline
Cacti User

Joined: Thu Jan 21, 2010 8:41 pm
Posts: 157
Thank your for a big thank you, but in my opinion the BIGGEST thank you deserves Howie!
Also I would like to comment that I wish people who have done a quality Maps In cacti would post their configs for users to review and use as a starting point. In opinion it would go a long way in increasing visibility of this great project. I for my part always love to examine other people's configs for the maps to learn new ways of how to do things in cacti or at a very least pick new ideas since that is what makes this project great.

P.S I have posted some of my quality maps starting from this page forward: [INFO] Show off your Weathermaps.
Just screenshots no configs.


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Wed Feb 25, 2015 8:24 am 
Offline
Cacti User
User avatar

Joined: Wed Oct 29, 2014 5:01 am
Posts: 63
Great, thanks for sharing!


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Sat Apr 11, 2015 11:24 am 
Offline
Cacti User

Joined: Fri Aug 22, 2014 2:11 pm
Posts: 106
Hi ikorzha758,

Your weathermap is truly amazing and advanced!

I downloaded your weather map example and was shocked at how you were able to achieve so many different functions that I did not know you could do..

I do have a few questions if that's ok..

Is your ISP icon changing colours based on the status? For example, if the ISP is "down", then it shows red? If up, it's green?

How were you able to do the interface status? I'm trying to traceback your source code but I got way too confused.. May you also please explain to me how you were able to put all the info such as:

firewall policy - last pushed, I assume?
is primary xxx vpn tunnel up - how did you make a dynamic picture display yes/no based on status?
active/standby - how do you show the status dynamically?

Thanks so much for your help!!


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Sun Apr 12, 2015 3:39 am 
Offline
Cacti User

Joined: Fri Aug 22, 2014 2:11 pm
Posts: 106
May I also know how you were able to display your bandwidth in percentage?


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Wed Apr 15, 2015 3:09 am 
Offline

Joined: Wed Jan 04, 2012 9:17 pm
Posts: 8
awesome map :D
i wish there was a quicker way to make diagrams like your switches. i have about 300 switches.


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Wed Apr 15, 2015 9:06 am 
Offline
Cacti Guru User
User avatar

Joined: Thu Sep 16, 2004 5:53 am
Posts: 5091
Location: United Kingdom
There is a quicker way - scripting! Or even Excel to calculate the positions for the nodes. I'll write up an example on my blog sometime.

_________________
Weathermap 0.98 is out! & QuickTree 0.2. Superlinks is over there now.
Some Other Cacti tweaks, including strip-graphs, icons and snmp/netflow stuff.
(Let me know if you have UK DevOps or Network Ops opportunities, too!)


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Mon Apr 27, 2015 12:19 pm 
Offline
Cacti User

Joined: Fri Aug 22, 2014 2:11 pm
Posts: 106
@ ikorzha758: any chance you could reply when you're free regarding my questions? :) You have some pretty awesome features you implemented there...


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Tue Apr 28, 2015 1:10 am 
Offline
Cacti User
User avatar

Joined: Wed Oct 29, 2014 5:01 am
Posts: 63
I'm not ikorzha758 but to display percent of bandwidth you should look at http://network-weathermap.com/manual/0. ... NK_BWLABEL :-)


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Fri May 29, 2015 5:11 am 
Offline

Joined: Tue Mar 03, 2015 6:22 am
Posts: 17
deleted


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Fri May 29, 2015 7:23 am 
Offline

Joined: Tue Mar 03, 2015 6:22 am
Posts: 17
Hi,

Thank you for your great job, I use it to manage around 100 Cisco 2960.
To create my weathermaps I use a script in bash.

I use three files, one is the script and the two others are for the position of each node :

The script file :

Code:
#!/bin/bash

##################################################
# Configuration
##################################################
CACTI_DB="cacti_database_name"
CACTI_USER="cacti_user" #in my case I create a user in read only
CACTI_PASSWORD="cacti_password"
CACTI_IP="cacti_ip_address"

##################################################
# Get device name and position
##################################################

echo -n "Cacti device name : "; read -e DEVICE_NAME
echo -n "Overlibgraph device port index : "; read -e DEVICE_OVERLIBGRAPH_PORT
echo -n "Position switch (like 200 50) : "; read -e DEVICE_POSITION
DEVICE_ID=$(mysql --host="$CACTI_IP" --user="$CACTI_USER" --password="$CACTI_PASSWORD" "$CACTI_DB" -Bse "SELECT id FROM host WHERE description='$DEVICE_NAME'";)

#check if device exist
if [ "$DEVICE_ID" = "" ]
then
   echo "No device found... exit";
   exit
else
   ##################################################
   # Create port nodes
   ##################################################
   
   #lower case the name of device to match with rdd files
   DEVICE_NAME_LC=$(echo "$DEVICE_NAME"  | awk '{print tolower($0)}')
   
   #empty result file if exist
   echo "" > $DEVICE_NAME
   
   # get switch ports and data IDs
   mysql --host="$CACTI_IP" --user="$CACTI_USER" --password="$CACTI_PASSWORD" "$CACTI_DB" -Bse "SELECT data_local.id AS data_id, graph_local.snmp_index AS snmp_index, SUBSTRING(graph_local.snmp_index, 4, 2) AS sw_port, SUBSTRING(graph_local.snmp_index, 1, 3) AS sw_port_type FROM data_local INNER JOIN graph_local ON (data_local.host_id=graph_local.host_id AND data_local.snmp_index=graph_local.snmp_index) WHERE data_local.host_id=$DEVICE_ID AND data_template_id=73 AND graph_template_id=48" | while read DATA_ID SNMP_INDEX SW_PORT SW_PORT_TYPE;
   do
      # get graphs speed IDs
      GRAPH_SPEED_ID=$(mysql --host="$CACTI_IP" --user="$CACTI_USER" --password="$CACTI_PASSWORD" "$CACTI_DB" -Bse "SELECT id FROM graph_local WHERE host_id=$DEVICE_ID AND graph_template_id=2 AND snmp_index=$SNMP_INDEX";)
      
      # get ethernet port type (fast or giga) and port position
      if [ "$SW_PORT_TYPE" = "100" ]
      then
         POSITION=$(sed -n $SW_PORT'p' distrib_48_position_fast)
         SW_PORT_TYPE_NAME="F"
      elif [ "$SW_PORT_TYPE" = "101" ]
      then
         POSITION=$(sed -n $SW_PORT'p' distrib_48_position_giga)
         SW_PORT_TYPE_NAME="G"
      fi
      
      # write file
      echo "NODE $DEVICE_NAME-$SW_PORT_TYPE_NAME$SW_PORT
   INFOURL /cacti/graph.php?rra_id=all&local_graph_id=$GRAPH_SPEED_ID
   OVERLIBGRAPH /cacti/graph_image.php?rra_id=0&graph_nolegend=true&graph_height=100&graph_width=300&local_graph_id=$GRAPH_SPEED_ID
   ICON images/port_{node:this:inscaletag}.png
   TARGET gauge:/var/lib/cacti/rra/${DEVICE_NAME_LC}_int_status_$DATA_ID.rrd:int_status:-
   USESCALE ifstatus in percent
   POSITION $DEVICE_NAME $POSITION
   " >> $DEVICE_NAME
   done
   ##################################################
   # Create switch node
   ##################################################
   
   # get graphs speed IDs
   DEVICE_GRAPH_SPEED_ID=$(mysql --host="$CACTI_IP" --user="$CACTI_USER" --password="$CACTI_PASSWORD" "$CACTI_DB" -Bse "SELECT id FROM graph_local WHERE host_id=$DEVICE_ID AND graph_template_id=2 AND snmp_index=$DEVICE_OVERLIBGRAPH_PORT";)
   
   echo "NODE $DEVICE_NAME
   LABEL $DEVICE_NAME
   ZORDER 200
   LABELOFFSET W
   LABELFONT 111
   LABELANGLE 90
   LABELOUTLINECOLOR none
   LABELBGCOLOR none
   INFOURL /cacti/graph.php?rra_id=all&local_graph_id=$DEVICE_GRAPH_SPEED_ID
   OVERLIBGRAPH /cacti/graph_image.php?rra_id=0&graph_nolegend=true&graph_height=100&graph_width=300&local_graph_id=$DEVICE_GRAPH_SPEED_ID
   ICON images/sw_2960_distrib.png
   POSITION $DEVICE_POSITION" >> $DEVICE_NAME
   
   exit
fi


The position file fort FAST nodes (in my case named "distrib_48_position_fast", used in the script):

Code:
-384 -12
-384 16
-355 -12
-355 16
-326 -12
-326 16
-297 -12
-297 16
-268 -12
-268 16
-239 -12
-239 16
-198 -12
-198 16
-169 -12
-169 16
-140 -12
-140 16
-111 -12
-111 16
-82 -12
-82 16
-53 -12
-53 16
-12 -12
-12 16
17 -12
17 16
46 -12
46 16
75 -12
75 16
104 -12
104 16
133 -12
133 16
174 -12
174 16
203 -12
203 16
232 -12
232 16
261 -12
261 16
290 -12
290 16
319 -12
319 16

The line 1 is for port 1, line 2 fort port 2, etc...

The position file fort GIGA nodes (in my case named "distrib_48_position_giga", used in the script):
Code:
374 21
421 21


After executing the script :
>> Copy/Paste the result of script (stored in a file named as switch name) in the conf file

Script execution :
Image

Two switchs configured in one minute :p
Image

I'm working to determine if port is on top or bottom (the first switch is corrected direct in conf file).

It's not awesome but usefull.

Regards,
Ch3i.


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Fri May 29, 2015 8:58 am 
Offline
Cacti User
User avatar

Joined: Wed Oct 29, 2014 5:01 am
Posts: 63
I do such a thing with a perl script.

This is the code to generate the ports:
Code:
use strict;
use warnings;
use Net::SNMP;
use RRD::Query;

my ($community, $img, $out) = 'xxxx';
open(my $fh, '>', 'carte_switch_mae.conf');
sub newSwitch {
    my ($name, $ip, $x, $y) = @_;
    my $self = {
        'name' => $name,
        'ip'   => $ip,
        'x'    => $x,
        'y'    => $y
    };
    bless($self, $name);
    return $self;
}
sub genPort {
    my ($self) = @_;
    my $session = Net::SNMP->session( Hostname  => $self->{ip},
                                      Community => $community,
                                      port      => 161)
                                                    or die "Session: $!";
    # for the ethernet ports
    for (1..48) {
        my $query = $session->get_request("1.3.6.1.2.1.2.2.1.8.$_");
        my $state = $query->{"1.3.6.1.2.1.2.2.1.8.$_"};
        $img = $state == 1
                ? 'port_up.png'
                : 'port_down.png';
        $out = "NODE " . $self->{name} . "_$_\n"
            . "\tPOSITION " . $self->{x} . " " .  $self->{y} . "\n"
            .  "\tICON images/$img\n";
        print $fh $out;
        # for the position of the ports
        $self->{x} += 17;
        $self->{x} += 4
            if /\A8\z|16|32|40/;
        $self->{x}--
            if /\A[3-6]\z|1[024-7]|2[02-47]|3[014-69]|4[0-267]/;
        if ($_ == 24) {
            $self->{x} -= 403;
            $self->{y} += 20;
        }
    }
    $self->{x} += 22;
    $self->{y} -= 32;
    # for sfp ports
    for (1,2) {
        my $rq = new RRD::Query('../../../rra/switch_'
                . (split '\.', $self->{ip})[-1]
                . '_traffic_g' . $_ . '.rrd')
                or die ($!);
        $img = $rq->fetch('traffic_out', offset => 10)
            ?  'port_up.png'
            :  'port_down.png';
        $out = "NODE " . $self->{name} . "g$_\n"
            . "\tTEMPLATE port\n"
            . "\tPOSITION " . $self->{x} . " " .  $self->{y} . "\n"
            . "\tICON images/$img\n";
        print $fh $out;
        $self->{y} += 13;
    }
    $session->close();
}

[Some stuff here...]

my $switch1 = newSwitch('switch1', 'xxx.xxx.xxx.xxx', 121, 109);
print 'Generating config for ' . $switch1->{ip} . "\n";
genPort($switch1);


The code for the switches:

Code:
my $dsn = 'dbi:mysql:cacti:xxxx:3306';
my ($user, $pwd) = qw (xxx xxx);
my ($dbh, $error) = DBI->connect($dsn, $user, $pwd)
    or die "MySQL : $!";
my $query = 'SELECT DISTINCT (b.id), (b.nom_dns), (a.id), (c.id)
FROM graph_tree_items AS a
LEFT OUTER JOIN host AS b
ON b.id = a.host_id
LEFT JOIN graph_local AS c
ON b.id = c.host_id
WHERE c.graph_template_id = 43 OR c.graph_template_id = 52
ORDER BY b.nom_dns';
my $sth = $dbh->prepare($query);
$sth->execute() or die 'Cannot execute :' . $sth->errstr();
my @row;
my ($x, $y);
while (@row = $sth->fetchrow_array) {
    if ($row[1] =~ /40|11/) {
        $y = 120
    } elsif ($row[1] =~ /25|50/) {
        $y = 780
    } elsif ($row[1] =~ /30\z|60\z/) {
        $y = 550
    }
    if ($row[1] =~ /40\z|30\z|25\z/) {
        $x = 314;
    } elsif ($row[1] =~ /11\z|50\z|60\z/) {
        $x = 2050;
    } elsif ($row[1] =~ /21\z/) {
        $x = 1944;
        $y = 1180;
    }
    $out = "NODE img_switch" . $row[0] . "\n";
    $out .= "\tTEMPLATE port" . "\n"
    if $row[1] !~ /21/;
    if ($row[1] =~ /21/) {
        $out .= "\tLABELFONT 110\n"
        . "\tLABELOFFSET 426 0\n"
        . "\tICON images/swich_24.png\n";
    }
    $out .= "\tLABEL " . $row[1] . "\n"
    . "\tINFOURL /cacti/graph_view.php?action=tree_content&tree_id=2&leaf_id=" . $row[2]. "&host_group_data=\n"
    . "\tOVERLIBGRAPH /cacti/graph_image.php?rra_id=0&graph_height=200&graph_width=500&local_graph_id=". $row[3] . "\n"
    . "\tPOSITION " . $x . ' ' . $y . "\n";
    print $fh $out;
    $y += 100;
}
$sth->finish;
$dbh->disconnect;



The result is the one I posted in the "Show off your Weathermaps." thread. The ports are identified with a for loop, so I can perform actions for specific ports and manage the position with $self->{x}. The whole script writes the configuration file for the map in about 15 secs

ch3i i don't know what you grab from your mysql queries but you should check if the port is on top or bottom by testing if the port number is > 24?


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Fri May 29, 2015 12:49 pm 
Offline

Joined: Tue Mar 03, 2015 6:22 am
Posts: 17
Happiness0 : In my cisco on top 1 3 5 7... on bottom 2 4 6 8... :D

I'll post the full script next week, I had the generation of switch an possibility to add it directly on an exisiting map.


Top
 Profile  
 
 Post subject: Re: A good starting Weathermap example fromr a weathermap ad
PostPosted: Tue Jan 24, 2017 7:36 am 
Offline

Joined: Tue Jan 24, 2017 7:19 am
Posts: 2
I'd like to put on my map links to ssh console to my network devices.
I 'd found in conf file posted by ikorzha758:
Code:
NODE XXX_RTR_ssh
   INFOURL ssh://xxx@10.10.1.1
   NOTES Click here to open XXX Router Console
   ICON 13 13 images/ssh.gif
   POSITION XXX_2851 106 0

What I should do to made "INFOURL ssh://" workable?
Script on cacti?
Something on web browser client site?


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 17 posts ]  Go to page 1, 2  Next

All times are UTC - 5 hours


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  

Protected by Anti-Spam ACP Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group