Virtually all SAN devices that are zoned for traffic have names (in fact, if you have nicknames/aliases in your zone files, then you can directly convert zone info to nicknames). VirtualWisdom’s filtering capabilities allow you to restrict a Dashboard, Report, or Alarm Policy Ruleset to a specific datacenter or business unit, but often creating those UDCs can be cumbersome.
A recent customer created UDCs with 192 values across three metric sets, allowing him to group data by specific servers, storage, and virtualizers automatically; this “how-to” is intended to show how you can do the same.
Process Overview
For this process, we need only a set of nicknames; the simpler old-format nickname file looks like:
500604825D2E2144,"DMX1911_FA3AA"
2100001B329FE31D,"Billing44_HBA0"
10000000C741ABCD,"4241_7b1"
(Notice: WWN first, no spaces, optional quotes for safety)
Generate UDC Values from Nickname Pattern
Our flow for this process or pipeline looks like the following diagram:

The tool we use here is “awk”, or “awk.exe”, or “gawk.exe”; in Solaris, look for “nawk”. It’s on virtually every non-Windows system, Microsoft has a version in its tools for UNIX, or Google may help you find a copy. As well, UnxUtils has a version.
Awk is an interpreter, so needs a script or program, and for that, we use TransformUDC.awk which takes the following parameters:
parameter |
Meaning |
COL |
What column in the CSV input is the Nickname? (default: 1) |
NAMEFCX_LINK |
Name of the ProbeFCX::Link UDC |
NAMEFCX_SCSI |
Name of the ProbeFCX::SCSI UDC |
NAMEFCX_SCSIINIT |
Name of the ProbeFCX::SCSI UDC, matching Initiators only |
NAMEFCX_SCSITARG |
Name of the ProbeFCX::SCSI UDC, matching Targets only |
NAMESW |
Name of the ProbeSW::Link UDC (default: Transformed_UDC) |
TRANSFORM |
Transform (basically the ‘s/x/y/g’ in a “sed -e ‘s/x/y/g’” command) (default: remove last two _sect_sect: DC_Serv1_fcs0_SW12P121 –> DC_Serv1) |
UDCDEFAULT |
Default value for UDCs (default: Unknown) |
A simple command such as the following will generate our results:
gawk.exe -f TransformUDC.awk Nicknames.csv
In our nickname file, the older format (first and second variant up to VW-3.1) gave us the nickname as the second parameter, so let’s tell the script that the nickname is in column #2:
gawk.exe -v COL=2 -f TransformUDC.awk Nicknames.csv
The problem is: how do we want the UDC values defined? If you’ve used “sed” or “awk” before, there’s a basic replacement term that looks like s/dog/cat/g
or gsub("dog","cat",$0)
… this part really depends on your nickname format, but looking above, we have nicknames that look like:
500604825D2E2144,"DMX1911_FA3AA"
500604825D2E2145,"DMX1911_FA4AA"
500604825D2E7744,"DMX1927_FA3AA"
500604825D2E7745,"DMX1927_FA4AA"
500604825D2E7747,"DMX1927_FA6AA"
500604825D2E7748,"DMX1927_FA7AA"
500604825D2E774C,"DMX1927_FA13AA"
500604825D2E774D,"DMX1927_FA14AA"
2100001B329FE35D,"Billing43_HBA0"
2100001B329FE35E,"Billing43_HBA1"
2100001B329FE31D,"Billing44_HBA0"
2100001B329FE31E,"Billing44_HBA1"
10000000C741ABCD,"4241_7b1"
We see how, in this example, chopping off everything after the “_” gives names such as “Billing43″ and “DMX1927″. In see and awk, we would write: s/_.*$//g
so we’ll use that as our transform. How can we test this?
Trim Quotation Marks
We could trim off the quotation marks around the second field using this: (“,” as field-separator, convert (“) to (), an empty replacement)
gawk -F, '{gsub("\"","",$2); print; }' Nicknames.csv
… unfortunately, we need to use quotation marks for the script, and then we need a bunch of “\” escape sequences, so it looks much more complex running it:
gawk.exe -F, "{gsub(\"\\\"\",\"\",$2); print; }" Nicknames.csv
… which looks like:

Truncate All After “_”
Based on the example above, we can now test whether our transform (“s/._*$//g”, or gsub(“._*$”,””,…) ) gives us the results we want, such as (notice: “print $2″, so we’ll only see the second field):
gawk.exe -F, "{gsub(\"\\\"\",\"\",$2); gsub(\"_.*$\",\"\",$2); print $2; }" Nicknames.csv
… which looks like:

This means our transform works, so let’s use it in the script:
gawk.exe -v TRANSFORM="s/_.*$//g" -v COL=2 -f TransformUDC.awk Nicknames.csv
Unfortunately, “4241″ is not worthwhile to us because it’s only one matching name, so let’s trim that one off by saying “minimum of 2 matching names per UDC value”:
gawk.exe -v MIN=2 -v TRANSFORM="s/_.*$//g" -v COL=2 -f TransformUDC.awk Nicknames.csv
Finally, What do we want to call the UDC? The tool always generates a ProbeSW::Link UDC, and if unnamed, defaults to “Transformed_UDC”. The Name of the UDC is limited to 32 characters, and values themselves to 24 characters; the name of the UDC becomes the name of the “metric” or context that we are generating. Suppose while working at XYZ Cheese and Dairy Distributors, we want a UDC called xyz-SW-BizUnit (we need to use “_” rather than “-”):
gawk.exe -v NAMESW="xyz_SW_BizUnit" -v MIN=2 -v TRANSFORM="s/_.*$//g" -v COL=2 -f TransformUDC.awk Nicknames.csv
Let’s run this with a redirection (“>”) to store the results to a file:
gawk.exe -v NAMESW="xyz_SW_BizUnit" -v MIN=2 -v TRANSFORM="s/_.*$//g" -v COL=2 -f TransformUDC.awk Nicknames.csv > \VirtualWisdomData\UDCImport\xyz-UDCs.udc
Running this as a command in cmd.exe
is relatively quiet because this is a non-interactive command. It tends to look like the following:

Importing this example, we see the following (you’ll note: the default has also been set using “-v UDCDEFAULT=Other”) :

Schedule UDC Import
Creating the schedule is relatively straight-forward: although there is some strong guidance in the VirtualWisdom User Guide, a complete example would like like the following:
- Views Application, Setup tab:

- “Schedules” page, roughly 5th item down:

- Create a new Schedule, with the action “Import UDC configurations”:

- …and configure it to use a new UDC Importing Configuration, as follows. NOTE we only use a local filename, all files are in the
\UDCImport\
directory of your VirtualWisdomData folder:
The benefit here is that the UDC always replaces existing values without prompting. As well, after import, a UDC re-calculates values for both past summaries and new summaries. This allows you to “fix history” if your UDC is not quite correct the first time.