ConfigMgr: The case of the missing asset inventory data aka faulty Server Locator Point

I’ve bumped into an issue where asset inventory data was missing from managed devices. So, I’ve started troubleshooting by examining SCCM Client log files on affected devices. InventoryAgent.log file which records activities of the Hardware (and Software) Inventory Client Agent showed that inventory was running on a scheduled basis without any errors being logged, that the inventory report was created and sent to the Management Point.

Inventory: Collection Task completed in 6.657 seconds
Inventory: 19 Collection Task(s) failed.
Inventory: Temp report = D:\WINDOWS\system32\CCM\Inventory\Temp\c270ec00-8fce-40ce-823b-cd1af0f998ce.xml
Inventory: Starting reporting task.    
Reporting: 17 report entries created.
Inventory: Reporting Task completed in 0.235 seconds
Inventory: Successfully sent report. Destination:mp:MP_HinvEndpoint, ID: {5715713A-8EBD-4F52-A65F-9177CF67474F}, Timeout: 80640 minutes MsgMode: Signed, Not Encrypted
Inventory: Cycle completed in 16.484 seconds
Inventory: Action completed.

This led me to the conclusion that problem was not on the Client side. Next step was to check the server side…

Dataldr.log file on the server side records activities related to processing of sent MIF files and hardware inventory reports to the Site Server. There I’ve realized that there are no records of processing hardware inventory reports from affected clients. So, on one hand there are records on the Client side showing that HW inventory reports are generated and sent to the Management Point. On the other hand, there are no records of HW inventory reports reaching server. Data seems to be lost on the way between the Client and the Server. Let’s try to figure out what is the process in between.

The fact that affected devices were WORKGROUP devices was indication that there is something wrong in the process how workgroup devices locate the Management Point. Workgroup devices, as they are unable to query information that is published in the Active Directory, use Server Locator Points to locate the Management Points.

In order to understand the health state of the Server Locator Point, the following checks were performed initially:

  • Check if the SMS_SERVER_LOCATOR_POINT service is running as expected

  • Check the health status of the SMS_SERVER_LOCATOR_POINT component in the Configuration Manager Console under the Site Database à System Status à Site Status à Primary Site à Component Status.

 

Considering that both checks did not indicate that there were any problems with the SLP, I also wanted to take a look at the IIS log files to see if there are any entries showing HTTP requests reaching the SLP component.

I use SMS Trace utility to parse IIS log files. To narrow all entries to only the ones that I was interested in, I’ve used the following filter – show me all lines which contain “/sms_slp/slp.dll” substring. It shows HTTP requests against the Server Locator Point.

This is where I’ve realized that we are not dealing with the case of the SLP service failure (service not running). Instead, it was the case of the SLP service corruption (service runs, but doesn’t work as expected). Server responded with the 403 Forbidden HTTP status code to all Client requests against the Server Locator Point.

As a quick fix solution, I have removed and reinstalled the Server Locator Point. After successful reinstallation, SLP started to respond to Client requests, Clients were able to find the Management Point and the asset inventory information started to flow in.

For more information about valid SLP queries and responses, you may refer to an article on the TechNet blog: Questions about Service Locator Points (SLP’s)http://blogs.technet.com/b/mwiles/archive/2011/03/21/questions-about-service-locator-points-slp-s.aspx

Advertisements
ConfigMgr: The case of the missing asset inventory data aka faulty Server Locator Point

How to force hardware/software inventory on SCCM Client?

In order to force Hardware Inventory on SCCM Client, run the following VBScript:

hInventoryActionID = "{00000000-0000-0000-0000-000000000001}"
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oServices = oLocator.ConnectServer( , "root\ccm\invagt")
oServices.Delete "InventoryActionStatus.InventoryActionID=""" & hInventoryActionID & """"
wscript.sleep 3000
Set cpApplet = CreateObject("CPAPPLET.CPAppletMgr")
Set actions = cpApplet.GetClientActions
For Each action In actions
If Instr(action.Name,"Hardware Inventory") > 0 Then
action.PerformAction
End if
Next

For more information, refer to the following MSDN article: http://msdn.microsoft.com/en-us/library/cc144592.aspx

 

In order to force Software Inventory on SCCM Client, run the following VBScript:

sInventoryActionID = "{00000000-0000-0000-0000-000000000002}"
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oServices = oLocator.ConnectServer( , "root\ccm\invagt")
oServices.Delete "InventoryActionStatus.InventoryActionID=""" & sInventoryActionID & """"
wscript.sleep 3000
Set cpApplet = CreateObject("CPAPPLET.CPAppletMgr")
Set actions = cpApplet.GetClientActions
For Each action In actions
If Instr(action.Name,"Software Inventory") > 0 Then
action.PerformAction
End if
Next

For more information, refer to the following MSDN article: http://msdn.microsoft.com/en-us/library/cc145432.aspx

How to force hardware/software inventory on SCCM Client?