Login to participate
Endpoint Management & Virtualization ArticlesRSS

Making Sure Software Inventory Data can be Forwarded to a Reporting Server

BRING's picture

Want to make sure you've used Inventory Solution to gather an accurate inventory of software applications on managed machines? This article describes a potential problem with the forwarding process and (of course) explains steps you can take to prevent the problem.

Among the plethora of things that Altiris products do well, one of them is collect inventory on managed machines. Whether you're talking hardware or software inventory, Inventory Solution does a great job of collecting that data, and it also does a great job of reporting data regarding the collected information.

In larger environments, frequently a separate Notification Server will be installed. This server will receive inventory data from other, client-facing Notification Servers thru inventory forwarding. It then can quickly generate reports, allowing the client–facing servers to concentrate on data collection and management, rather than reporting.

One of the important pieces of data collected via inventory is the software applications installed on managed machines. This data is stored in the Aex_SW_Audit_Software dataclass. Often, due to size constraints, the forwarding of this dataclass can cause the Inventory forwarding process to fail. Users might see errors in their A.logs logs like:

Process: aexsvc.exe (9972) 
Thread ID: 12140 
Module: AltirisNativeHelper.dll
Source: Altiris.NS.ResourceManagement.InventoryForwarder.ForwarderThreadFunction
Description: Forwarding failed for class guid: 5f4eea90-4489-4804-8622-bada5923b0e9System.IO.IOException: There is not enough space on the disk.
and
Process: aexsvc.exe (9972)
Thread ID: 12140
Module: AltirisNativeHelper.dll
Source: Altiris.NS.ResourceManagement.InventoryForwarder.SendClass
Description: Forwarding class cleanup failure (safe to continue forwarding): The process cannot access the file "C:\DOCUME~1\YFU0010\LOCALS~1\Temp\tmpFD73.tmp" because it is being used by another process.
and 
Process: aexsvc.exe (9972)
Thread ID: 13820
Module: AltirisNativeHelper.dll
Source: Altiris.NS.ResourceManagement.InventoryForwarder.ForwarderThreadFunction
Description: Forwarding failed for class guid: 5f4eea90-4489-4804-8622-bada5923b0e9System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

When inventory forwarding occurs, it must be able to completely write the temporary files necessary to forward the dataclass. It uses the disk space pointers provided by %TMP% and %TEMP% system variables to use as staging disk space until it can complete the final write of the xml files (NSE's), prior to sending to the reporting server.

If a large number of client computers (over 12,000) exists, this value gets multiplied by the number of inventoried software packages (approx 2000 per client machine), and ultimately can cause a temporary file of extremely large proportions, overrunning the available disk space used by the temp variables.

With that information in mind, the parameters selected should be carefully reviewed when creating the forwarding rule. Specifically, you should:

  1. Make sure that you are only forwarding the dataclasses you need.
  2. Make sure that the collection of machines you are forwarding meets your specific reporting requirements. Don’t include computers that you do not wish to report data on.

If your forwarding and reporting design meets your requirements and the Temp variables are pointing to a physical drive location that has plenty of available space, and you are still experiencing issue, you might consider dividing up the entire job into smaller slices. The old adage of eating an elephant one bite at a time could apply here. Basically, you can create separate forwarding rules so that the total number of computers selected is split up evenly among forwarding rules. For Example:

If Rule A forwards dataclass information for computers from the "All Computers" collection, and there is over 10,000 computers and over 2000 dataclass entries per computer, this could result in too much data for a small drive or slow database to handle.

If we take the 10,000 computers and divide them into 4 groups, creating 4 unique collections that, added together, comprise the contents of "All Computers", we could then associate those collections with 4 corresponding, unique forwarding rules that each send the same dataclasses, and stagger their respective schedules to start so that they do not overlap, and we could forward the data without concern.

For purposes of this article, we'll assume that each forwarding rule takes 1 hr to run. Please test in your environment to get the actual times. Specifically:

  • Rule 1: Forwards the 1st 25% of the "All Computers" collection for all dataclasses and starts at 3:00 am
  • Rule 2: Forwards the 2nd 25% of the "All Computers" collection for all dataclasses and starts at 4:00 am
  • Rule 3: Forwards the 3rd 25% of the "All Computers" collection for all dataclasses and starts at 5:00 am
  • Rule 4: Forwards the Last 25% of the "All Computers" collection for all dataclasses and starts at 6:00 am

How you divide the computers is up to you!

When your environment is such that you need to implement data forwarding, sometimes reporting on that data can be difficult. The items mentioned above are definitely going to help you be able to report accurate, concise data, in a reasonably quick fashion!

Joel Smith's picture

Programatically Handled?

Great workaround, but it begs the question why isn't the Notification Server using batches to programatically handle large amounts of data?

That would be the preferred resolution.

Regards,

Joel Smith
Altiris Support
Principle Support Engineer

Joel Smith
Altiris Support
Principal Support Engineer

BRING's picture

Long term plans are to do

Long term plans are to do that actual thing - Not sure if it will be in 7, but that was what was discussed.