This filter converts data from OGC WMTS (Web Map Tile Service) URLs to geospatial information, and expands the logstash event accordingly. See http://www.opengeospatial.org/standards/wmts for more information about WMTS.
Given a grid, WMTS urls contain all the necessary information to find out which coordinates a requested tile belongs to. Using a simple grok filter you can extract all the relevant information. This plugin then translates these information into coordinates in LV03 and WGS84.
Here is an example of such a request: http://wmts4.geo.admin.ch/1.0.0/ch.swisstopo.pixelkarte-farbe/default/20130213/21781/23/470/561.jpeg
The current filter can be configured as follows in the configuration file:
filter {
# First, waiting for varnish log file formats (combined apache logs)
grok { match => [ “message”, “%{COMBINEDAPACHELOG}” ] }
# Then, parameters
grok {
[
“request”,
“(?
By default, the filter is configured to parse requests made on WMTS servers configured with the Swisstopo WMTS grid, but this can be customized, by setting the following parameters:
Additionnally, the following parameters can be set:
filter {
wmts {
add_field => ... # hash (optional), default: {}
add_tag => ... # array (optional), default: []
column_field => ... # string (optional), default: "wmts.col"
epsg_mapping => ... # hash (optional), default: {}
output_epsg => ... # string (optional), default: "epsg:4326"
prefix => ... # string (optional), default: "wmts."
refsys_field => ... # string (optional), default: "wmts.reference-system"
remove_field => ... # array (optional), default: []
remove_tag => ... # array (optional), default: []
resolutions => ... # array (optional), default: [4000, 3750, 3500, 3250, 3000, 2750, 2500, 2250, 2000, 1750, 1500, 1250, 1000, 750, 650, 500, 250, 100, 50, 20, 10, 5, 2.5, 2, 1.5, 1, 0.5, 0.25, 0.1]
row_field => ... # string (optional), default: "wmts.row"
tile_height => ... # number (optional), default: 256
tile_width => ... # number (optional), default: 256
x_origin => ... # number (optional), default: 420000
y_origin => ... # number (optional), default: 350000
zoomlevel_field => ... # string (optional), default: "wmts.zoomlevel"
}
}
If this filter is successful, add any arbitrary fields to this event. Field names can be dynamic and include parts of the event using the %{field} Example:
filter {
wmts {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}
# You can also add multiple fields at once:
filter {
wmts {
add_field => {
"foo_%{somefield}" => "Hello world, from %{host}"
"new_field" => "new_static_value"
}
}
}
If the event has field “somefield” == “hello” this filter, on success, would add field “foo_hello” if it is present, with the value above and the %{host} piece replaced with that value from the event. The second example would also add a hardcoded field.
If this filter is successful, add arbitrary tags to the event. Tags can be dynamic and include parts of the event using the %{field} syntax. Example:
filter {
wmts {
add_tag => [ "foo_%{somefield}" ]
}
}
# You can also add multiple tags at once:
filter {
wmts {
add_tag => [ "foo_%{somefield}", "taggedy_tag"]
}
}
If the event has field “somefield” == “hello” this filter, on success, would add a tag “foo_hello” (and the second example would of course add a “taggedy_tag” tag).
configures the name of the field for the column
configures a mapping between named projections and their actual EPSG code. Some production WMTS use a regular name instead of a numerical value for the projection code. This parameter allows to define a custom mapping
Only handle events without all/any (controlled by exclude_any config option) of these tags. Optional.
configures the output projection
configures the prefix
configures the name of the field for the reference system
If this filter is successful, remove arbitrary fields from this event. Fields names can be dynamic and include parts of the event using the %{field} Example:
filter {
wmts {
remove_field => [ "foo_%{somefield}" ]
}
}
# You can also remove multiple fields at once:
filter {
wmts {
remove_field => [ "foo_%{somefield}" "my_extraneous_field" ]
}
}
If the event has field “somefield” == “hello” this filter, on success, would remove the field with name “foo_hello” if it is present. The second example would remove an additional, non-dynamic field.
If this filter is successful, remove arbitrary tags from the event. Tags can be dynamic and include parts of the event using the %{field} syntax. Example:
filter {
wmts {
remove_tag => [ "foo_%{somefield}" ]
}
}
# You can also remove multiple tags at once:
filter {
wmts {
remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
}
}
If the event has field “somefield” == “hello” this filter, on success, would remove the tag “foo_hello” if it is present. The second example would remove a sad, unwanted tag as well.
resolutions
configures the name of the field for the row
Only handle events with all/any (controlled by include_any config option) of these tags. Optional.
tile_height
tile_width
Note that all of the specified routing options (type,tags.exclude_tags,include_fields,exclude_fields) must be met in order for the event to be handled by the filter. The type to act on. If a type is given, then this filter will only act on messages with the same type. See any input plugin’s “type” attribute for more. Optional.
WMTS grid configuration (by default, it is set to Swisstopo’s WMTS grid) x_origin
y_origin
configures the name of the field for the WMTS zoomlevel