Translate this

    Translate to:

The back catalog

Failing Exchange 2010 SP1 Mailbox Exports

I recently came across an issue when trying to export mailboxes in our Exchange 2010 environment.  I was having almost no success with the exports. One of the 15 initial accounts I needed to do this for was successful, but all of the others I tried to export were reporting an error: “Couldn’t connect to the source mailbox.”   After doing some research (aka spending some time with Google) it seems that this most other folks who’ve experienced this were on the RTM version of Exchange and so most of the remedies out there didn’t seem to apply or were a bit onerous to implement in my opinion. So as I contemplated opening a ticket with Microsoft I went back and compared the one account that I could successfully export to one of the ones that I couldn’t.  Using Get-Mailbox to compare the two didn’t turn anything up, but when I got desparate and tried Get-CASMailbox I did notice one difference. The user that I was successfully able to export was not being forced into Cached Mode when using Outlook (MAPIBlockOutlookNonCachedMode was set to False). The mailboxes that I couldn’t  export all had MAPIBlockOutlookNonCachedMode set to True.  After changing it to False for the mailboxes that had previously failed I was able to successfully export them.

For a variety of reasons we have manually set MAPIBlockOutlookNonCachedMode on mailboxes to force users to run Outlook in Cached mode (rather than doing it via GPO). However doing so prevents our decreasing population of Blackberry users from being able to get mail on their devices, so those folks are not explicitly forced into Cached mode.

In short to export JDoe’s mailbox I have to do the following:

Set-CASMailbox jdoe -MAPIBlockOutlookNonCachedMode:$false

New-MailboxEcportRequest -Mailbox JDoe -FilePath \\CASHT-01\c$\temp\Jdoe.pst

Set-CASMailbox jdoe -MAPIBlockOutlookNonCachedMode:$true

 

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Simulating a more interesting environment with Vyatta and VMware ESXi - pt 3

Background

[consider this fair warning that this post is a bit long]

In the first part of this series I planned out my “enterprise” environment for an Exchange 2003 to 2010 upgrade. In the second part I built the internal router and verified it was working with directly connected subnets. At this point I have something resembling the following.
Environment to date

In this entry I’ll work on adding the DMZ router, enabling the firewall on one of its interfaces and adding static routers to it and rtr-home so that it’s reachable from my home LAN (essentially the stuff in the red box below). There are two phases to this. The first phase consists of setting up the router and verifying that it is able to reach hosts on the respective subnets it’s directly attached to. As part of this I’ll also  set up static routing between rtr-dmz and rtr-home so that we can pass traffic from one subnet to another traversing both routers. In the second phase we’ll set up a very simple firewall ruleset to limit traffic coming out of the DMZ.

Configuring the router

To start I need to create new router rtr-dmz (much as I did in Part 2), with three interfaces. One interface will be on the intranet to DMZ network/VLAN (192.168.4.1/30), another on the DMZ to internet VLAN (192.168.5.1/30)) and the third connected to the DMZ network itself(192.168.254.254/24).

After starting up the VM I assign the IP addresses and enable ssh.

Now I want to verify that I can ping devices on the two interface that are connected to the DMZ subnet(192.168.254.254) and the DMZ to intranet switch (192.168.4.1). I could also check the DMZ to internet interface but don’t have anything else on that side yet whereas I do have a machine in the DMZ and rtr-home is also on the DMZ-to-intranet switch.

Now turning to my PC back on the “Home” LAN I can try to ping the interface of the new dmz router….

Oops! that didn’t work. .. As before I need to add a route on my PC so that it know how to get traffic to that interface through rtr-home.

Now let my try again….

Still no joy… what does traceroute say?

Ok it looks as if traffic is headed in the right direction.

For grins lets ping the DMZ to intranet interface of rtr-home…

Ok so that works and we can see from the traceroute that it’s starting its journey headed in the right direction. The issue is that much like my PC the rtr-dmz needs to know where to send packets destined to come back to a subnet it’s not attached to. To fix this I need to add a static route on rtr-dmz back to my PC. I also need to add routes to the HQ and Remote LANs as well. I’ll start by adding the route to the router:

Now if I try to ping the router from my PC it works as we would expect it to.

With that working its time to add the routes for the HQ and Remote LANs as well.

Now if I look at what I have configured again I’m noticing that rtr-home will also need to have a static route added to get to the DMZ and the DMZ to Internet network (red-lines). This is also true of my PC.


After adding the static routes to rtr-home using 192.168.4.1 as the gateway I’m now able to ping a machine in the DMZ from rtr-home.

Note: Typically for the scenario I’m trying to simulate there would be two sets of traffic flows. One between hosts on the “internet” and “DMZ” and the other between the DMZ and the intranet (HQ and Remote LANs). This means I wouldn’t normally have any traffic coming across rtr-home headed to/thru the 192.168.5.1 interface and so wouldn’t need to add a route for it to rtr-home. But since this my home lab and I prefer being able to ssh/RDP to hosts in the Internet directly rather than using the VM console(s) I’m going to go ahead and add it.

After doing the same on my PC ( this time using 192.168.1.254 as the gateway) I’m also able to ping the machine in the DMZ.


Because machines in the DMZ and on the HQ and Remote LANs will use the rtr-dmz and rtr-home as their default gateways we don’t need to add manual routes to those machines.

Continue reading Simulating a more interesting environment with Vyatta and VMware ESXi – pt 3

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Simple Neverfail Monitoring with Zabbix part 2

Recap

So in the previous post I put together a simple script for getting the data out of a specified registry entry that handled the REG DWORD BIG ENDIAN data type.  In this one I’ll go over the general process of getting the registry based perf data into Zabbix and setting up alerting based on it.

Setting up Zabbix

I won’t cover the actual installation of Zabbix here, but before we can put data into Zabbix we need to add the counters/items that I will be populating in the future. The first thing I need to do is determine exactly what those counters are and which of the nodes they need to come from.

Registry Path/Value Node Description
\Neverfail\R2\Performance\CurrentThroughput Active Nominally the throughput  of data between the two nodes
\Neverfail\R2\Performance\MegaBytessent Active # of Megabytes sent
\Neverfail\R2\Performance\MegabytesReceived Active # of MB received
\Neverfail\R2\Performance\OldestUnsafeupdatequeueentry Active Age of the oldest item in the Unsafe Queue
\Neverfail\R2\Performance\UnsafeUpdateQueueSize Active How much data is in the Unsafe Queue waiting to be passed to the passive node
\Neverfail\R2\Performance\UnsafeUpdateQueueSize (dup) Active Same as above but I want to measure the rate of growth as a possible factor in alerting
\Neverfail\R2\Performance\KBDispatchedFromUnsafeQueue Active How much total data has been sent from the unsafe queue
\Neverfail\R2\Performance\Oldestsafeupdatequeueentry Passive The age of the oldest item in the safe queue
\Neverfail\R2\Performance\safeUpdateQueueSize Passive Size of the Safe Queue
\Neverfail\R2\Performance\safeUpdateQueueSize(dup) Passive Same as above but I want to measure the rate of growth as a possible factor in alerting
\Neverfail\R2\Performance\KBDispatchedFromsafeQueue Passive How much total data has been written from the Safe Queue
\JavaSoft\Prefs\Neverfail\current\/Registry/State/Manager\/Status\/Value Active Current status of the registry synchronization.
\JavaSoft\Prefs\Neverfail\current\/New/File/State/Mgr\/Synchronization/Status\/Tag Active Current file synchronization status.
\JavaSoft\Prefs\Neverfail\current\/Controller\/Is/Primary/Server Active Is the active server the primary or not. From this I can tell which node is active.

Because I have multiple Neverfail clusters in my environment I will create a template in Zabbix that has all the necessary counters associated with it that I can then apply to the hosts rather than adding them manually to each host.  Since a host can have multiple templates assigned to it I’ll also include a new “application” called Neverfail to help with separating Neverfail counters from any other counters that might be associated with a host (ex: Exchange counters).

To help with some of the drudgery associated with manually creating all the items, I’ve provided  a version of the template that can simply be imported into Zabbix. The template includes all of the counters from above as well as a couple of basic triggers for alerting.

Here are a couple of short videos that walk through manually creating a template, and importing the one I’ve provided.

Creating a template
Creating a template
Importing a template
Importing the Neverfail Template into Zabbix

Sharp eyes might notice that I’m capturing  bothUnsafeUpdateQueueSize and safeUpdateQueueSize twice.  In doing so these values are being treated differently. The first is a simple measurement of how much data is in the queue.

About Zabbix_sender

Now turning our attention to how we get the info into Zabbix let’s look at Zabbix_sender.  It’s available a pre-compiled binary for Windows from Zabbix’s website. Getting it ready is as simple as unzipping the download and putting the executable somewhere. By running zabbix_sender -h we can see it can take a number of options.

C:\Temp>zabbix_sender -h
ZABBIX send v1.6.2 (16 January 2009)

usage: zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -i <file>} [-c <file>]

Options:
-c Specify configuration file
-z Hostname or IP address of ZABBIX Server.
-p Specify port number of server trapper running on the server. Default is 10051.
-s Specify hostname or IP address of a host.
-I Specify source IP address
-k Specify metric name (key) we want to send.
-o Specify value of the key.
-i

<input type="text" /> Load values from input file.
Each line of file contains:
.
-v Verbose mode
Other options:
-h Give this help.
-V Display version number.

The ones I use  are -s, -z, -k and -o.  So a typical command line for me would look something like:

C:\temp\Zabbix_sender -z zabbix.crtcorp.com -s neverfail01 -k"nf_cluster[file_sync_status]" -o "/Synchronized"

Breaking down the command line:

  • zabbix.crtcorp.com is the Zabbix server we’re sending this data to
  • neverfail01 is the Neverfail node we’re sending information about
  • the key for the Zabbix item (i.e. counter) we want the information associated with is nf_cluster[file_sync_status];
  • the value we want in the key is  ”/Synchronized

In the example the value we’re putting into Zabbix is a string rather than a numerical value. Here’s an example with a numeric value being put into Zabbix:

C:\temp\Zabbix_sender -z zabbix.crtcorp.com -s neverfail01 -k”nf_cluster[throughput]” -o “103453″

Here we’re specifying the item with key nf_cluster[throughput] and giving it a value of 103453.

Adding Zabbix_Sender

Now what I needed to do is to combine the script I wrote earlier with zabbix_sender to actually put the registry data into Zabbix. So  I added a new function to the GetRegValue.vbs script to execute the actual zabbix_send. It is pretty straightforward it builds a formulaic command line and then executes it. You’ll notice there is no error checking.

'###################################################################################
Function Zabbix_Send(ZabbixKey,Value)
Dim WshShell, oExec, CommandLine
Set WshShell = CreateObject("WScript.Shell")
'Build Our Command line so we can also echo it to console
'Ex zbx send cmd line = C:\temp\Zabbix_sender -z"wv-zabbix-01" -s"neverfail01" -k"nf_cluster[file_sync_status]" -o "/Synchronized"
CommandLine = ZBXSend &amp; " -v -z""" &amp; ZBXServer &amp; """ -s""" &amp; ZBXClient &amp; """ -k""" &amp; ZabbixKey &amp; """ -o """ &amp; Value &amp; """"
WScript.Echo "Commandline is [" &amp; CommandLine &amp; "]"
'Execute our command line
Set oExec = WshShell.Exec(CommandLine)
End Function

The next step is to modify the main body of the original GetRegValue script to turn it into a function. I then changed the WScript.Echos so that we were returning the registry value rather than simply writing it to the console.  (WScript.Echo HexToDec(HexValue) -> GetRegValue = HexToDec(HexValue) , Wscript.Echo strValue -> GetRegValue=strValue, and so on).  At the end we have this script which is good for reading one specified registry value and then inserting it into Zabbix.

Since there are a number of values we want to put into Zabbix we need to think about how to approach this given that the script only handles one value at a time.  What I settled on was a a batch file that used a for loop to go through a file with a list of registry based perf counters related to Neverfail.  The script as it now stands needs three arguments passed to it. It needs the ZabbixKey, the registry key path, and the registry value .  For values I want to get from the passive node the registry path needs to include the private IP address of the passive node (ex: \\10.0.0.2\HKLM\Software\Neverfail\R2\Performance) so that reg.exe knows where to go get them from.  The script can then query the registry using the path and value combination to get the data which it can then send to Zabbix using the key specified on the command line.  So having the list of registry values from the part 1 post I’m able to put together my file.

Because  I need to specify a delimiter to the for command and I use commas ‘,’ in the Zabbix keys that I’ve defined, I need to use something else as a delimiter for my input file, so I’ve settled on using a pipe symbol as shown below.

nf_cluster[throughput]|HKLM\Software\Neverfail\R2\Performance|CurrentThroughput
nf_cluster[MB_sent]|HKLM\Software\Neverfail\R2\Performance|MegaBytessent
nf_cluster[MB_recvd]|HKLM\Software\Neverfail\R2\Performance|MegabytesReceived
nf_q[unsafe,age]|HKLM\Software\Neverfail\R2\Performance|OldestUnsafeupdatequeueentry
nf_q[unsafe,size]|HKLM\Software\Neverfail\R2\Performance|UnsafeUpdateQueueSize
nf_q[unsafe,rate]|HKLM\Software\Neverfail\R2\Performance|UnsafeUpdateQueueSize
nf_q[unsafe,total_kb_sent]|HKLM\Software\Neverfail\R2\Performance|KBDispatchedFromUnsafeQueue
nf_q[safe,age]|\\10.0.0.2\HKLM\Software\Neverfail\R2\Performance|Oldestsafeupdatequeueentry
nf_q[safe,size]|\\10.0.0.2\HKLM\Software\Neverfail\R2\Performance|safeUpdateQueueSize
nf_q[safe,rate]|\\10.0.0.2\HKLM\Software\Neverfail\R2\Performance|SafeUpdateQueueSize
nf_q[safe,total_kb_sent]|\\10.0.0.2\HKLM\Software\Neverfail\R2\Performance|KBDispatchedFromsafeQueue
nf_cluster[reg_sync_status]|HKLM\Software\JavaSoft\Prefs\Neverfail\current\/Registry/State/Manager\/Status|/Value
nf_cluster[file_sync_status]|HKLM\Software\JavaSoft\Prefs\Neverfail\current\/New/File/State/Mgr\/Synchronization/Status|/Tag
nf_cluster[primary]|HKLM\Software\JavaSoft\Prefs\Neverfail\current\/Controller|/Is/Primary/Server

While my batch file  is about 35 lines, it really boils down to one line which does all the real work:

for /F "tokens=1-3 delims=|" %%I in (%ZBXKEYS%) do cscript %SENDVALUES% "%%I" "%%J" "%%K"

With the environment variables expanded it would look more like;

for /F "tokens=1-3 delims=|" %%I in (zbx_keys_to_send.txt ) do cscript SENDVALUES.vbs "%%I" "%%J" "%%K"

This for loop reads in each line of  the text file zbx_keys_to_send.txt and using the pipe symbol as a delimiter reads in the first three tokens/strings of each line and call the SENDVALUES.vbs script with the three tokens/strings as arguments.  The script and input file worked fine when I ran them on the primary node, but not so well when I ran them while the secondary was active. After some troubleshooting I realized  that one thing I didn’t think through at first wat that I actually need two lists/input files. Since the private IP address I want to use to get data from the passive node’s registry will change depending on which node is active I’ll need one list for when the script is sending from the primary node (10.0.0.1)  and another for when the secondary (10.0.0.2) is active. The lists should essentially be identical with the only difference being the IP address specifed for the passive node.

A generic Neverfail cluster

Now all that is left to do is copy the batch file, the vbscript file and the approapirate inputer to each node in the cluster. Prior to setting up the scehiled task I like to manually run the batch file a few time to make sure  the data is getting populated into Zabbix. To do this I need to use a local account that exists on both nodes (in my case I use the local Administrator account). This is so that the reg.exe util can seamlessly get values from the passive node (assuming the account has the same password on both nodes).

A little troubleshooting hint.

When running the script manually I can see each time the VBScript file calls zabbix_sender and whether or not that submission was successful. Running zabbix_sender and mistyping the key was not an common issue when I was putting this together. Fortunately zabbix_sender lets me know what happened when I attempted to submit data.  As an example, below is the output I get when trying to submit a value for the nf_q[safe,size] key, if I mistype the key as nfq[safe,size]

zbx_send_failed

I can see that it reports that I have 1 failed item, and no Processed items. When I run it without any typos (intentional or otherwise) I get:

zbx_send_good

Now I can see that I had 1 item processed successfully and no Failed ones.

Setting up Alerting

If you import the template I’ve provided it should have also created four triggers that can be used to generate actions within Zabbix.

template_triggers

These triggers are based on situations I’ve run into in my environment that I want to be aware of.  The first is when the size of either the Safe or Unsafe queue has been above 2GB for over an hour. Neverfail was great at letting me know the queue was full and it was going to stop replicating but not so much on the warning me it was happening front.  I generally wanted to be aware well before we got to that state where it stopped replicating and these triggers are a way of warning me something is going on.  The second situation is when data to be replicated has been sitting in one of the queue’s for more than a specified amount of time.  This is similar to watching the queue get beyond a certain size as the first two triggers do but is helpful in situations where there isn’t a whole of data changing on the active node(i.e. over weekends).

It is of course  possible to change these and set them to what fits for your environment and even to add other triggers. In later versions of this monitoring I’ve added some other counters/keys related to the task state using the nfcmd.exe command line tool. This allows me to see when a server is doing a full system check or even the dreaded “internal system task” as well as how much progress it’s made.  Some example screenshots are included below.


Sample Data for one cluster

Sample Data for one cluster

Overview of all the clusters in my environment

Cluster Overview

Graph of the Safe Queue size

Sample Graph of the Safe Queue size

Enhanced view showing a Full System Check that is 3% complete.

Enhanced view

The three files I use are included here:

  • DO_Zabbix.cmd – The batch file that reads the input file with reg values & zabbix keys and calls SendRegValue.vbs
  • SendRegValue.vbs – The vbscript file that actually reads the registry entry and does any necessary conversions to send the value to Zabbix
  • zabbix_keys_to_send.txt – the input file used by DO_Zabbix.cmd. This version is the one I run when the primary node is active. IP addresses would need to be changed for this to run on a passive node.

————————————

A few additional notes:

Because Neverfail  is continually pushing the perf data to the registry it does happen on occasion that the script will catch spuriously large or odd values for some counters.

If I were to use the zabbix_agent on my Neverfail nodes it is possible to include all this same monitoring within the agents configuration so that the agent pushes the data rather than using zabbix_sender via a scheduled task. However that’s a post for some other time…
-crt

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Simulating a more interesting environment with Vyatta and VMware ESXi - pt 2

In an earlier post I went through the process of coming up with a solution to be able to test an Exchange 2003 to Exchange 2010 migration using VMs. In order to simulate a multi-site AD environment I wanted to use Vyatta based routers to create my network infrastructure. In this post I’ll actually walk through the process of setting up the ESX and theinternal router. In the next post(s) I’ll go into configuring the DMZ and internet routers and firewalls. As a reminder the environment I want to set up will look like this…

Final Environment.

In order to actually be able to implement this I first had to go configure the appropriate networking configuration on each of the ESXi hosts.

First I needed to create a virtual switch utilizing the NIC attached to the crossover cable. This is done by going to the “Configuration” tab for the ESX host within the vSphere Client.

Clicking the “Add Networking” option will walk one through the wizard to configure the new switch. I started by choosing “Virtual Machine” on the Connection Type Screen.

On the next page I choose to create a new virtual switch and pick the appropriate physical NIC that will be used to communicate with the other host. (If I had the capacity to put all the VMs one one host I could create the vSwitch without having to specify a network adapter)

Then I created an initial Port Group and specified a VLAN ID for it. In this case for the Remote Site (192.168.3.X/24) I’m specifying VLAN ID 23.

Once completed the new virtual switch should look similar to the one shown below.

Now that the vSwitch has been created, I can add port groups for the other networks: DMZ (192.168.254.X), Internet (10.0.0.X) and HQ(192.168.2.X). Each one of these should have a unique VLAN ID associated with it which is also used when these port groups get created on the second host.

Continue reading Simulating a more interesting environment with Vyatta and VMware ESXi – pt 2

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Simulating a more interesting environment with Vyatta and VMware ESXi

[Part 2 of this series which involves the actual configuration of the Vyatta routers is now up here -crt]

At work we’ve recently made the decision to migrate to Exchange 2010 from Exchange 2003. While we do have an environment that we can use for some testing of the migration it doesn’t mimic our production environment closely enough for me to be comfortable using it as the sole test area. Given the changes in how Exchange 2010 (E2KX) works vs 2003 I wanted to be able to simulate multiple (2) Active Directory sites (i.e. subnets), a DMZ, and the “Internet” including some really simple firewalls.

I wanted to use virtual machines to go through this exercise so that I could take snapshots and repeat the various steps and/or variations of them if necessary. In order to do this I utilized the Vyatta Community Edition based routers to help create my virtual “enterprise” environment. I’ve talked about Vyatta before in this article. In this post I’ll talk a little about the process I went through to get to my final configuration (shown below).  In subsequent articles I’ll go  through the actual router and VMware configuration process.

Final Environment

The final environment as laid out on two interconnected servers

My lab environment at home consists of two Dell PowerEdge servers (one a PE2850, the other a 2950 each with 8Gigs of RAM). Both servers are running ESXi 4.0. Since the 2850 can’t run 64 bit VMs I was going to install the Exchange 2003 servers and Windows 2003 DCs on it. Then I’d install VMs running Server 2008R2 on the 2950 with Exchange 2010. Both servers are connected to my home network and since I was going to be using both I wanted to have some way for VMs on each host to be able to communicate with others without necessarily having all the traffic come across my home network. Since both Dells have multiple NICs I connected them with a crossover cable ending up with something like this:

Physical view of the network

In initially penciling out a plan for what I wanted to do I had nine VMs scattered across four subnets.

Isolated environment with multiple gateways per subnet

Considering my limited resources and my need to keep some other unrelated VMs up and running while I’m testing, I trimmed this down to 7 by combining the Domain Controllers and Exchange 2003 servers together in the HQ and Remote subnets.

Consolidating functions to reduce # of VMs

In further looking at this from a networking perspective, I was hit with the realization the initial configuration with two routers attached to the HQ and DMZ subnets would require me to manage routing on each individual VM in each of those subnets as well as on each of the routers. As an example one can look at the Exchange 2010 server in the HQ site/subnet.

Continue reading Simulating a more interesting environment with Vyatta and VMware ESXi

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Generating an ATOM feed from an Exchange 2007/10 calendar

I was in a meeting a little while back where we had a brief discussion regarding the ability to get data out of Exchange 2007/2010 from a non-Windows OS. The example thrown out was the ability to get an RSS feed from Google Calendar for use elsewhere. I’ve know about Exchange Web Services (EWS) for a while and always wanted to look into using it in a project just to get some familiarity with it. With Exchange 2010 coming out this seemed like a good opportunity to try to see if I could generate an RSS feed from my calendar in a lab environment using a non-.Net language on Linux. I decided to try doing this using PHP, (incorrectly) assuming that there’ be some easily discoverable examples I could download and tweak to do what I wanted.

I did discover some snippets and information that helped point me in the right direction, but no simple complete “here run this” kind of examples. I initially came across an article by Thomas Rabaix on using SOAP PHP and NTLM authentication (http://rabaix.net/en/articles/2008/03/13/using-soap-php-with-ntlm-authentication ). This code used cURL to help handle NTLM authentication to an IIS server. That then led me to an article by Erik Cederstrand http://www.howtoforge.com/talking-soap-with-exchange that built on Thomas’ work. Between them these two extend the PHP SOAPClient and then override some of the methods to use curl to handle the NTLM authentication that EWS uses by default. Using these examples as a starting point and some other bits of info I’ve come across I’ve been able to put together a couple of scripts that will generate an ATOM based feed using a user’s calendar. What I’ve managed to cobble together works but is not something I’d describe as robust. The solution is briefly described below. I’m hoping to follow up with a few other posts that go into a bit more detail about how all the pieces work. [the code is available from here or from Google Code ]

The scripts in action

In my example Exchange environment I’ve created a user called (imaginatively enough) ctronco. Opening up Outlook for the user I can see the following events on this weeks calendar.

Turning now to the Ubuntu box where I’ve installed the PHP scripts. Firing up a browser and pointing it to the correct URL (http://192.168.1.175/ewscalendarfeed/getfeed/ctronco) I get the following results in Firefox, Internet Explorer and Opera (Chrome doesn’t appear to like feeds so I haven’t included it).

Output in Firefox Output in Internet Explorer Output in Opera
Firefox Output Output in IE Output in Opera

Continue reading Generating an ATOM feed from an Exchange 2007/10 calendar

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

A less simple (but better) Replay Report

A while back I posted about a Replay report that I wrote to help me monitor the multiple Replay servers we have deployed globally.  It was a good first effort and was useful, but having to engage my brain first thing in the morning to read (and more importantly actually comprehend) the emailed reports eofre my second cup of coffee was less than ideal.

Thwe original idea behind generating the report was to have the info come to me rather than logging into multiple servers and firing up the console multiple times (what can I say I’m lazy).

The report in the first version of the script was straighforward text. Recently I’ve been looking into and thinking about different ways to present the information in the report so I could just sort of glance at it and get the status. The disk related portion of the report wasn’t initially where I was focusing my attention. I was more interested in being able to get a quick idea of where we stood with the # of Recovery Points we were expecting to have.  An example of  one of the simple reports is below. From this we can see that we’re in pretty good shape with 100% valid RPs spanning about 24 days.

Starting Script at 04/30/2009 23:20:12

Replay Service is running

Server mailserver.company.com snapshots are being stored on R: and currently using 818.54GB. This is 99.98% of the used space(818.68GB) on the volume which is 1,360.22GB

The drive currently has 39.81% free space (e.g. 541.54GB)

Number of reported Recovery Points is 395 of these 395 are valid, and 0 are invalid (100.00%).
The valid RPs span 23.98 days

The most recent valid RP was taken 1 Minutes ago

The issue becomes less clear when invalid RPs occur for whatever reason. If I have 395 RPs and only 250 of the are valid is that a good or bad state? It’s not immediately clear but one can log in to the Replay server and get a better idea of how things stand. It might be the case where there was network issue during the day and instead of 96 RPs  (that’s an RP every 15 minutes * 24 hrs) for each of the last three days we’ve only gotten 40 RPs each of those days which while less than ideal might still be an okay state. Or it could be that there are several days for which we don’t have RPs.

Continue reading A less simple (but better) Replay Report

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Nagios ESXi scripts work with the vSphere SDK

I’ve gotten a couple of emails recently about issues with the Nagios plugins I’ve got here. The people having issues appeared to be using really early versions of the VI-Perl toolkit from VMware. In looking for the URL to download the more recent versions of the toolkit (v1.5 and 1.6) I kept ending up at the link for the vSphere SDK.  After going round and round for a while I ended up downloading the SDK to see if the scripts work with it. I’m relieved to report that based on my testing they work just fine. Getting the SDK installed and running was a bit of an issue but once that was done they worked fine.

I also finally found the URL for the downloads to the other versions of the VI-perl stuff as well at : http://communities.vmware.com/community/developer/vsphere_sdk_perl

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Nagios ESX3i Scripts and ESX4i

This is just an update, but the scripts I wrote for use with Nagios and ESX3i seem to work just fine with ESX4i (at least in my home lab environment using Dell Poweredge 2850s).

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter

Simple Neverfail monitoring with Zabbix part 1

Background

This is the first of a couple of posts on how I’ve cobbled together some basic monitoring of Neverfail’s  Neverfail Heartbeat H/A software which is also now the basis for VMWare’s vCenter Server Heartbeat. Since Neverfail seems to consider their command lines privileged information I will only cover how to do some simple monitoring using the registry. When starting on this effort internally I was only interested initially in figuring out a quick and simple way to get the info I needed and not so much on the how to get it into something part.

I’ve been working with another team where I work to look at Zabbix as an alternative for some of the monitoring we do in our environment. We use Microsoft Operations Manager 2005 (MOM) but haven’t fully cut over from out previous monitoring solution. I had looked at Zabbix earlier as a potential solution for monitoring a bunch of VMware ESX boxes but another team ended up getting tasked with that particular duty. So I had had some experience with Zabbix but hadn’t done too much with it since.

One of the things that’d been rattling around in my brain is using the capabilities of using the zabbix_sender feature/client to monitor some of other components/things we can’t easily get into MOM.  Zabbix_Sender is a utility that is available for use with Zabbix that allows one to “send” information to Zabbix. In my case it was appealing because we’re already running two different monitoring agents on the Exchange servers where we have Neverfail installed.  Since I only wanted to use Zabbix to monitor a small set of data related specifically to Neverfail zabbix_sender lets me do that without having to run the fullblown zabbix_agent as a service on the boxes.

Continue reading Simple Neverfail monitoring with Zabbix part 1

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Posterous
  • Google Bookmarks
  • LinkedIn
  • Twitter