Jeremy Davis
Jeremy Davis
Sitecore, C# and web development
Article printed from: https://blog.jermdavis.dev/posts/2018/why-am-i-missing-my-geoip-data

Why am I missing my GeoIP data?

Published 30 April 2018
Updated 11 June 2018
Analytics Sitecore ~1 min. read

I spent some time this week looking at a client site whose analytics data was missing GeoIP information. Since they had a valid license for Sitecore's GeoIP lookup service, this was a bit confusing. So, continuing my battle to write up all the unexpected scenarios...

Updated: There is a follow-up to this post, which points out some extra issues with the way GeoIP configuration is currently documented for v8-era Sitecore setups that change the `Analytics.PerformLookup` setting below. If this setting is of interested to you, please read that too!

The issue

The client site I was asked to look at was running Sitecore 8.2, and they had used the App Center to set themselves up with a license for GeoIP lookups. Writing code that called the lookup manager directly seemed to be working – and returned valid data about the current user.

But when you looked at the analytics data visible in the Sitecore UI, none of the users had any location data associated with them.

No Locations

After seeing this issue, I had a dig around looking for any clues about what was going on. What I noticed was that the raw data in MongoDB was missing for anything relating to GeoIP. The "GeoIPs" collection wasn't present, and none of the records in the "Interactions" collection included the "GeoData" element.

No GeoIP Data

The fix

It took some head-scratching, googling and config file diffing, but eventually I worked out what was up.

The client's site was running one CM server and two CD servers, which shared the same core config files. Those config files included a change which set the Analytics.PerformLookup setting to false.

Documentation (Can't find it specifically for V8 – but it is covered for older versions) says that this setting should be "true" for precisely one server in any deployment – in order to protect against deadlocks, and to avoid chewing up your lookup allocation excessively. (Note that V9's documentation says you can set it true on multiple servers – so that code has clearly changed a bit in more recent releases) Since this site had it set false everywhere, it looked like none of the machines in the cluster were actually performing the asynchronous lookup of IPs that xDB was recording.

I came across a blog post which suggested it should be your least loaded server that does these lookups – which makes a lot of sense. So I deployed a simple patch to the CM server to make that setting true again:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <settings>
      <setting name="Analytics.PerformLookup" set:value="true"/>
    </settings>
  </sitecore>
</configuration>

					

Once that was deployed, the missing MongoDB collection data appeared:

Valid GeoIP Data

And the experience explorer started to show locations for new visits:

Visit Location

Success!

↑ Back to top