GeoIP map visualization

Create a Grafana dashboard with a IP-based map visualization panel using our built-in GeoIP feature.

The end goal: map of IPs

Nginx visitors visualized on a World Map

Step-by-step instructions

1. Add a source that logs IP addresses

We're going to use our Nginx logs that are automatically collected when using the Ubuntu source. Nginx stores client IP addresses in the client_string column, e.g client_string=""
Most of our integrations record client IP addresses automatically.

2. Create a new Grafana dashboard

Add a new Panel in your Grafana dashboard of choice.

3. Add the GeoIP query to the Grafana panel

Replace client_string by a different column name if you're not using our Ubuntu/Nginx integration for this tutorial. We're also including AND file_string LIKE '%nginx%' to include only our Nginx logs, since the Ubuntu integration aggregates multiple services.
(case when length(city_name) == 0 then 'unknown' else city_name end) AS name,
latitude, longitude,
count() AS metric
FROM $table
LEFT SEMI JOIN geoip.city_ipv4
ON geoip.city_ipv4.geoname_id = dictGetUInt32('geoip.city_ipv4_dictionary', 'geoname_id', tuple(IPv4StringToNum(assumeNotNull(client_string))))
JOIN geoip.city_locations ON toUInt32(geoip.city_locations.geoname_id) = geoip.city_ipv4.geoname_id
WHERE $timeFilter
AND client_string IS NOT NULL
AND file_string LIKE '%nginx%'
GROUP BY latitude, longitude, city_name

4. Select "Format as: Table" in the bottom panel settings

This is necessary for the Worldmap panel to properly pick up the data.

5. Select the "Worldmap" visualization

This setting can be found in the right-hand side menu of the Grafana dashboard.

6. Tweak Worldmap settings

Modify the panel settings for an optimal experience:
  • Map Visual Options (optional)
    • Min circle size: 1
    • Max circle size: 30
  • Map Data Options
    • Location Data: table
    • Aggregation: current
  • Field Mapping
    • Table Query Format: coordinates
    • Location Name Field: name
    • Metric Field: metric (default)
    • Latitude Field: latitude (default)
    • Longitude Field: longitude (default)
  • Threshold Options (optional)
    • Thresholds: 10,100 (base this on the volume of your visits)

7. Done!

You should see your visitors on a World Map.
Tweak the Map Visual Options and Threshold Options to modify your map.
Nginx visitors visualized on a World Map
Need help with your report? Let us know at [email protected].