iploc ↗
Use the iploc stage to enrich event data by associating IPv4 addresses with predefined geolocation attributes. This capability is fundamental for security analysts to understand the geographic origin or destination of network activity within their environment.
Syntax
iploc <field> [loc_field1 [as <alias1>], loc_field2 [as <alias2>], ...]
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
field |
string, integer | Yes | The input field containing the IPv4 address to be geolocated. |
loc_field |
string | No | Specific geolocation attributes to return (for example, loc_country, loc_city). If omitted, a default set is added. |
alias |
string | No | The alias name for the geolocation field, using the as clause. |
Returns
The iploc stage returns the original event records enriched with additional columns containing geolocation information (such as loc_country, loc_city, loc_latlon, etc.) corresponding to the provided IPv4 address.
Usage notes
- The
iplocstage can only be used with fields that contain numbers or strings. - Geolocation data generated by this stage can be visualized on a graph of
type = map, where the x-axis is set toloc_countryorloc_latlon, and the y-axis is a number field. - Optimization: It is crucial to optimize queries for performance and cost. Apply
filterstages beforeiplocto reduce the dataset size, ensuringiploconly processes relevant records. - Optimization: Use the
fieldsstage early in your query to select only the necessary columns, minimizing the data processed by subsequent stages includingiploc.
Examples
Example 1: Basic iploc (default geolocation fields)
Goal: Enrich the ipv4_address field with the default set of geolocation attributes.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | limit 5 | iploc ipv4_address
Explanation: The query applies the iploc stage to the ipv4_address field. Since no specific output fields are defined, it returns the default geolocation columns. Note that for private IPs (RFC1918), the country is often identified as "Private" with NULL values for granular details.
Output:
| EVENT_ID | IPV4_ADDRESS | LOC_COUNTRY | LOC_CITY | LOC_LATLON |
|---|---|---|---|---|
| 101 | 192.168.1.10 | Private | NULL | NULL |
| 102 | 10.0.0.5 | Private | NULL | NULL |
| 103 | NULL | NULL | NULL | NULL |
| 104 | 172.31.255.255 | Private | NULL | NULL |
| 105 | 192.168.10.20 | Private | NULL | NULL |
Example 2: Specifying selected geolocation fields
Goal: Enrich the ipv4_address field but return only the Country and City attributes.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | limit 5 | iploc ipv4_address loc_country, loc_city
Explanation: The query uses iploc on ipv4_address but explicitly requests only the loc_country and loc_city columns to be added to the result set.
Output:
| EVENT_ID | IPV4_ADDRESS | LOC_COUNTRY | LOC_CITY |
|---|---|---|---|
| 101 | 192.168.1.10 | Private | NULL |
| 102 | 10.0.0.5 | Private | NULL |
| 103 | NULL | NULL | NULL |
| 104 | 172.31.255.255 | Private | NULL |
| 105 | 192.168.10.20 | Private | NULL |
Example 3: Aliasing geolocation fields
Goal: Enrich the ipv4_address field with specific attributes and rename the output columns for clarity.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | limit 5 | iploc ipv4_address loc_country as IP_Country, loc_latlon as IP_LatLon
Explanation: The query extracts loc_country and loc_latlon for the ipv4_address, renaming them to IP_Country and IP_LatLon respectively using the as clause.
Output:
| EVENT_ID | IPV4_ADDRESS | IP_COUNTRY | IP_LATLON |
|---|---|---|---|
| 101 | 192.168.1.10 | Private | NULL |
| 102 | 10.0.0.5 | Private | NULL |
| 103 | NULL | NULL | NULL |
| 104 | 172.31.255.255 | Private | NULL |
| 105 | 192.168.10.20 | Private | NULL |
Example 4: Viewing iploc results as a map graph
Goal: Combine iploc with aggregation to count IP addresses by country and visualize the data.
XQL code:
config timeframe = 1d | dataset = sample_xql_raw | iploc ipv4_address loc_country as country | filter country != null and ipv4_address != null | comp count() as ip_count by country | view graph type = map xaxis = country yaxis = ip_count | limit 10
Explanation: The query enriches the data with loc_country (aliased as country), filters out nulls, and aggregates the count of IPs per country. The view stage then configures the output to be displayed as a map graph. The table output below represents the underlying data for the visualization.
Output:
| COUNTRY | IP_COUNT |
|---|---|
| Private | 8 |
| NULL | 2 |