From 4228d657dfb012b879b5c7cac199c1fb9d17c816 Mon Sep 17 00:00:00 2001 From: sayden Date: Tue, 25 Sep 2018 11:14:58 +0200 Subject: [PATCH 1/5] Default format added --- filebeat/docs/fields.asciidoc | 67 ++++++++ filebeat/include/fields.go | 2 +- filebeat/module/haproxy/_meta/fields.yml | 11 +- filebeat/module/haproxy/log/_meta/fields.yml | 20 ++- .../module/haproxy/log/ingest/pipeline.json | 114 ++++++++------ filebeat/module/haproxy/log/test/default.log | 1 + .../log/test/default.log-expected.json | 20 +++ metricbeat/my_metricbeat.yml | 148 ++++++++++++++++++ 8 files changed, 328 insertions(+), 55 deletions(-) create mode 100644 filebeat/module/haproxy/log/test/default.log create mode 100644 filebeat/module/haproxy/log/test/default.log-expected.json create mode 100644 metricbeat/my_metricbeat.yml diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index 9b4eaf628a6..add1fe44af5 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -3233,6 +3233,22 @@ haproxy Module +*`haproxy.destination_port`*:: ++ +-- +type: long + +Port of the destination host + +-- + +*`haproxy.destination_ip`*:: ++ +-- +IP of the destination host + +-- + *`haproxy.process_name`*:: + -- @@ -3571,6 +3587,57 @@ raw_request_line is the complete HTTP request line, including the method, reques -- +[float] +== default fields + +Default HAProxy log format + + +*`haproxy.default.facility`*:: ++ +-- +type: text + +One of the 24 standard syslog facilities. Refer to https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#3.1 for more information + +-- + +*`haproxy.default.priority`*:: ++ +-- +type: long + +Self descriptive + +-- + +*`haproxy.default.frontend_name`*:: ++ +-- +type: text + +Name of the frontend (or listener) which received and processed the connection + +-- + +*`haproxy.default.mode`*:: ++ +-- +type: text + +The mode the frontend is operating (TCP or HTTP) + +-- + +*`haproxy.default.logsource`*:: ++ +-- +type: text + +The HAProxy source of the log + +-- + [[exported-fields-host-processor]] == Host fields diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index bedd2cfc9a7..7189b7246f0 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/filebeat/module/haproxy/_meta/fields.yml b/filebeat/module/haproxy/_meta/fields.yml index 29c9eeb03f0..985f313c51e 100644 --- a/filebeat/module/haproxy/_meta/fields.yml +++ b/filebeat/module/haproxy/_meta/fields.yml @@ -7,6 +7,14 @@ type: group description: > fields: + + - name: destination_port + description: Port of the destination host + type: long + + - name: destination_ip + description: IP of the destination host + - name: process_name description: Name of the process @@ -123,5 +131,4 @@ - name: retries description: retries is the number of connection retries experienced by this session when trying to connect to the server. type: long - - + \ No newline at end of file diff --git a/filebeat/module/haproxy/log/_meta/fields.yml b/filebeat/module/haproxy/log/_meta/fields.yml index 630075299b4..6da7ada0ffc 100644 --- a/filebeat/module/haproxy/log/_meta/fields.yml +++ b/filebeat/module/haproxy/log/_meta/fields.yml @@ -40,5 +40,23 @@ description: raw_request_line is the complete HTTP request line, including the method, request and HTTP version string. type: text - +- name: default + description: Default HAProxy log format + type: group + fields: + - name: facility + type: text + description: One of the 24 standard syslog facilities. Refer to https://cbonte.github.io/haproxy-dconv/1.7/configuration.html#3.1 for more information + - name: priority + type: long + description: Self descriptive + - name: frontend_name + type: text + description: Name of the frontend (or listener) which received and processed the connection + - name: mode + type: text + description: The mode the frontend is operating (TCP or HTTP) + - name: logsource + type: text + description: The HAProxy source of the log diff --git a/filebeat/module/haproxy/log/ingest/pipeline.json b/filebeat/module/haproxy/log/ingest/pipeline.json index 8b1807edded..5411d300245 100644 --- a/filebeat/module/haproxy/log/ingest/pipeline.json +++ b/filebeat/module/haproxy/log/ingest/pipeline.json @@ -1,52 +1,64 @@ { - "description": "Pipeline for parsing HAProxy http logs in their default format. Requires the geoip plugin.", - "processors": [{ - "grok": { - "field": "message", - "patterns": [ - "(%{NOTSPACE:haproxy.process_name}\\[%{NUMBER:haproxy.pid:int}\\]: )?%{IP:haproxy.client_ip}:%{NUMBER:haproxy.client_port:int} \\[%{NOTSPACE:haproxy.http.request_date}\\] %{NOTSPACE:haproxy.frontend_name} %{NOTSPACE:haproxy.backend_name}/%{NOTSPACE:haproxy.server_name} %{NUMBER:haproxy.time_client_req:int}/%{NUMBER:haproxy.time_queue:int}/%{NUMBER:haproxy.time_backend_connect:int}/%{NUMBER:haproxy.time_server_response:int}/%{NUMBER:haproxy.time_duration:int} %{NUMBER:haproxy.http.response.status_code:int} %{NUMBER:haproxy.http.response.bytes_read:int} %{NOTSPACE:haproxy.http.request.captured_cookie} %{NOTSPACE:haproxy.http.response.captured_cookie} %{NOTSPACE:haproxy.termination_state} %{NUMBER:haproxy.connections.active:int}/%{NUMBER:haproxy.connections.frontend:int}/%{NUMBER:haproxy.connections.backend:int}/%{NUMBER:haproxy.connections.server:int}/%{NUMBER:haproxy.connections.retries:int} %{NUMBER:haproxy.server_queue:int}/%{NUMBER:haproxy.backend_queue:int} \\{%{DATA:haproxy.http.request.captured_headers}\\} \\{%{DATA:haproxy.http.response.captured_headers}\\} \"%{GREEDYDATA:haproxy.http.request.raw_request_line}\"", - "(%{NOTSPACE:haproxy.process_name}\\[%{NUMBER:haproxy.pid:int}\\]: )?%{IP:haproxy.client_ip}:%{NUMBER:haproxy.client_port:int} \\[%{NOTSPACE:haproxy.http.request_date}\\] %{NOTSPACE:haproxy.frontend_name}/%{NOTSPACE:haproxy.bind_name} %{GREEDYDATA:haproxy.error_message}" - ], - "ignore_missing": false - } - }, - { - "date": { - "field": "haproxy.http.request_date", - "target_field": "@timestamp", - "formats": ["dd/MMM/yyyy:HH:mm:ss.SSS"] - } - }, - { - "remove": { - "field": "haproxy.http.request_date" - } - }, - { - "geoip": { - "field": "haproxy.client_ip", - "target_field": "haproxy.geoip" - } - }, - { - "split": { - "field": "haproxy.http.request.captured_headers", - "separator": "\\|", - "ignore_failure": true - } - }, - { - "split": { - "field": "haproxy.http.response.captured_headers", - "separator": "\\|", - "ignore_failure": true - } - } - ], - "on_failure" : [{ - "set" : { - "field" : "error.message", - "value" : "{{ _ingest.on_failure_message }}" - } - }] -} + "description": "Pipeline for parsing HAProxy http logs in their default format. Requires the geoip plugin.", + "processors": [ + { + "grok": { + "field": "message", + "patterns": [ + "%{HAPROXY_DATE:haproxy.request_date} (?:%{\\<%{NONNEGINT:haproxy.default.facility}.%{NONNEGINT:haproxy.default.priority}\\>} )?%{IPORHOST:haproxy.default.logsource} %{PROG:haproxy.process_name}(?:\\[%{POSINT:haproxy.pid}\\])?: %{GREEDYDATA} %{IPORHOST:haproxy.client_ip}:%{POSINT:haproxy.client_port} %{WORD} %{IPORHOST:haproxy.destination_ip}:%{POSINT:haproxy.destination_port} \\(%{WORD:haproxy.frontend_name}/%{WORD:haproxy.default.mode}\\)", + + "(%{NOTSPACE:haproxy.process_name}\\[%{NUMBER:haproxy.pid:int}\\]: )?%{IP:haproxy.client_ip}:%{NUMBER:haproxy.client_port:int} \\[%{NOTSPACE:haproxy.request_date}\\] %{NOTSPACE:haproxy.frontend_name} %{NOTSPACE:haproxy.backend_name}/%{NOTSPACE:haproxy.server_name} %{NUMBER:haproxy.time_client_req:int}/%{NUMBER:haproxy.time_queue:int}/%{NUMBER:haproxy.time_backend_connect:int}/%{NUMBER:haproxy.time_server_response:int}/%{NUMBER:haproxy.time_duration:int} %{NUMBER:haproxy.http.response.status_code:int} %{NUMBER:haproxy.http.response.bytes_read:int} %{NOTSPACE:haproxy.http.request.captured_cookie} %{NOTSPACE:haproxy.http.response.captured_cookie} %{NOTSPACE:haproxy.termination_state} %{NUMBER:haproxy.connections.active:int}/%{NUMBER:haproxy.connections.frontend:int}/%{NUMBER:haproxy.connections.backend:int}/%{NUMBER:haproxy.connections.server:int}/%{NUMBER:haproxy.connections.retries:int} %{NUMBER:haproxy.server_queue:int}/%{NUMBER:haproxy.backend_queue:int} \\{%{DATA:haproxy.http.request.captured_headers}\\} \\{%{DATA:haproxy.http.response.captured_headers}\\} \"%{GREEDYDATA:haproxy.http.request.raw_request_line}\"", + + "(%{NOTSPACE:haproxy.process_name}\\[%{NUMBER:haproxy.pid:int}\\]: )?%{IP:haproxy.client_ip}:%{NUMBER:haproxy.client_port:int} \\[%{NOTSPACE:haproxy.request_date}\\] %{NOTSPACE:haproxy.frontend_name}/%{NOTSPACE:haproxy.bind_name} %{GREEDYDATA:haproxy.error_message}" + ], + "ignore_missing": false, + "pattern_definitions": { + "HAPROXY_DATE": "(%{MONTHDAY}[/-]%{MONTH}[/-]%{YEAR}:%{HOUR}:%{MINUTE}:%{SECOND})|%{SYSLOGTIMESTAMP}" + } + } + }, + { + "date": { + "field": "haproxy.request_date", + "target_field": "@timestamp", + "formats": [ + "dd/MMM/yyyy:HH:mm:ss.SSS", + "MMM dd HH:mm:ss" + ] + } + }, + { + "remove": { + "field": "haproxy.request_date" + } + }, + { + "geoip": { + "field": "haproxy.client_ip", + "target_field": "haproxy.geoip" + } + }, + { + "split": { + "field": "haproxy.http.request.captured_headers", + "separator": "\\|", + "ignore_failure": true + } + }, + { + "split": { + "field": "haproxy.http.response.captured_headers", + "separator": "\\|", + "ignore_failure": true + } + } + ], + "on_failure": [ + { + "set": { + "field": "error.message", + "value": "{{ _ingest.on_failure_message }}" + } + } + ] +} \ No newline at end of file diff --git a/filebeat/module/haproxy/log/test/default.log b/filebeat/module/haproxy/log/test/default.log new file mode 100644 index 00000000000..0f55f4c31b9 --- /dev/null +++ b/filebeat/module/haproxy/log/test/default.log @@ -0,0 +1 @@ +Sep 20 15:42:59 127.0.0.1 haproxy[24551]: Connect from 127.0.0.1:40780 to 127.0.0.1:5000 (main/HTTP) diff --git a/filebeat/module/haproxy/log/test/default.log-expected.json b/filebeat/module/haproxy/log/test/default.log-expected.json new file mode 100644 index 00000000000..83db2952c50 --- /dev/null +++ b/filebeat/module/haproxy/log/test/default.log-expected.json @@ -0,0 +1,20 @@ +[ + { + "@timestamp": "2018-09-20T15:42:59.000Z", + "fileset.module": "haproxy", + "fileset.name": "log", + "haproxy.client_ip": "127.0.0.1", + "haproxy.client_port": "40780", + "haproxy.default.logsource": "127.0.0.1", + "haproxy.default.mode": "HTTP", + "haproxy.destination_ip": "127.0.0.1", + "haproxy.destination_port": "5000", + "haproxy.frontend_name": "main", + "haproxy.pid": "24551", + "haproxy.process_name": "haproxy", + "input.type": "log", + "message": "Sep 20 15:42:59 127.0.0.1 haproxy[24551]: Connect from 127.0.0.1:40780 to 127.0.0.1:5000 (main/HTTP)", + "offset": 0, + "prospector.type": "log" + } +] \ No newline at end of file diff --git a/metricbeat/my_metricbeat.yml b/metricbeat/my_metricbeat.yml new file mode 100644 index 00000000000..99e92142415 --- /dev/null +++ b/metricbeat/my_metricbeat.yml @@ -0,0 +1,148 @@ +###################### Metricbeat Configuration Example ####################### + +# This file is an example configuration file highlighting only the most common +# options. The metricbeat.reference.yml file from the same directory contains all the +# supported options with more comments. You can use it as a reference. +# +# You can find the full configuration reference here: +# https://www.elastic.co/guide/en/beats/metricbeat/index.html + +#========================== Modules configuration ============================ + +metricbeat.config.modules: + # Glob pattern for configuration loading + path: ${path.config}/modules.d/*.yml + + # Set to true to enable config reloading + reload.enabled: false + + # Period on which files under path should be checked for changes + #reload.period: 10s + +#==================== Elasticsearch template setting ========================== + +setup.template.settings: + index.number_of_shards: 1 + index.codec: best_compression + #_source.enabled: false + +#================================ General ===================================== + +# The name of the shipper that publishes the network data. It can be used to group +# all the transactions sent by a single shipper in the web interface. +#name: + +# The tags of the shipper are included in their own field with each +# transaction published. +#tags: ["service-X", "web-tier"] + +# Optional fields that you can specify to add additional information to the +# output. +#fields: +# env: staging + + +#============================== Dashboards ===================================== +# These settings control loading the sample dashboards to the Kibana index. Loading +# the dashboards is disabled by default and can be enabled either by setting the +# options here, or by using the `-setup` CLI flag or the `setup` command. +setup.dashboards.enabled: true +setup.dashboards.directory: ./_meta/kibana + +# The URL from where to download the dashboards archive. By default this URL +# has a value which is computed based on the Beat name and version. For released +# versions, this URL points to the dashboard archive on the artifacts.elastic.co +# website. +#setup.dashboards.url: + +#============================== Kibana ===================================== + +# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. +# This requires a Kibana endpoint configuration. +setup.kibana: + + # Kibana Host + # Scheme and port can be left out and will be set to the default (http and 5601) + # In case you specify and additional path, the scheme is required: http://localhost:5601/path + # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 + #host: "localhost:5601" + + # Kibana Space ID + # ID of the Kibana Space into which the dashboards should be loaded. By default, + # the Default Space will be used. + #space.id: + +#============================= Elastic Cloud ================================== + +# These settings simplify using metricbeat with the Elastic Cloud (https://cloud.elastic.co/). + +# The cloud.id setting overwrites the `output.elasticsearch.hosts` and +# `setup.kibana.host` options. +# You can find the `cloud.id` in the Elastic Cloud web UI. +#cloud.id: + +# The cloud.auth setting overwrites the `output.elasticsearch.username` and +# `output.elasticsearch.password` settings. The format is `:`. +#cloud.auth: + +#================================ Outputs ===================================== + +# Configure what output to use when sending the data collected by the beat. + +#-------------------------- Elasticsearch output ------------------------------ +output.elasticsearch: + # Array of hosts to connect to. + hosts: ["localhost:9200"] + + # Optional protocol and basic auth credentials. + #protocol: "https" + #username: "elastic" + #password: "changeme" + +#----------------------------- Logstash output -------------------------------- +#output.logstash: + # The Logstash hosts + #hosts: ["localhost:5044"] + + # Optional SSL. By default is off. + # List of root certificates for HTTPS server verifications + #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"] + + # Certificate for SSL client authentication + #ssl.certificate: "/etc/pki/client/cert.pem" + + # Client Certificate Key + #ssl.key: "/etc/pki/client/cert.key" + +#================================ Logging ===================================== + +# Sets log level. The default log level is info. +# Available log levels are: error, warning, info, debug +#logging.level: debug + +# At debug level, you can selectively enable logging only for some components. +# To enable all selectors use ["*"]. Examples of other selectors are "beat", +# "publish", "service". +#logging.selectors: ["*"] + +#============================== Xpack Monitoring =============================== +# metricbeat can export internal metrics to a central Elasticsearch monitoring +# cluster. This requires xpack monitoring to be enabled in Elasticsearch. The +# reporting is disabled by default. + +# Set to true to enable the monitoring reporter. +xpack.monitoring.enabled: true + +# Uncomment to send the metrics to Elasticsearch. Most settings from the +# Elasticsearch output are accepted here as well. Any setting that is not set is +# automatically inherited from the Elasticsearch output configuration, so if you +# have the Elasticsearch output configured, you can simply uncomment the +# following line. +#xpack.monitoring.elasticsearch: +# Module: system +# Docs: https://www.elastic.co/guide/en/beats/metricbeat/master/metricbeat-module-system.html + +metricbeat.modules: +- module: system + metricsets: [core] + core.metrics: [percentages, ticks] \ No newline at end of file From 93e18f8010d9c6b4c6ea3ef3b2197e19a6d7cc76 Mon Sep 17 00:00:00 2001 From: sayden Date: Wed, 17 Oct 2018 19:40:35 +0200 Subject: [PATCH 2/5] Use of a non local ip to trigger the geo_ip plugin --- filebeat/module/haproxy/log/test/default.log | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filebeat/module/haproxy/log/test/default.log b/filebeat/module/haproxy/log/test/default.log index 0f55f4c31b9..7931d2387e2 100644 --- a/filebeat/module/haproxy/log/test/default.log +++ b/filebeat/module/haproxy/log/test/default.log @@ -1 +1 @@ -Sep 20 15:42:59 127.0.0.1 haproxy[24551]: Connect from 127.0.0.1:40780 to 127.0.0.1:5000 (main/HTTP) +Sep 20 15:42:59 1.2.3.4 haproxy[24551]: Connect from 1.2.3.4:40780 to 1.2.3.4:5000 (main/HTTP) From 7375ff56984d06083fbfd7b349cd4419ab6ff305 Mon Sep 17 00:00:00 2001 From: sayden Date: Wed, 17 Oct 2018 19:41:09 +0200 Subject: [PATCH 3/5] Remove message field from expected JSON in default format --- filebeat/module/haproxy/log/ingest/pipeline.json | 5 +++++ filebeat/module/haproxy/log/test/haproxy.log-expected.json | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/filebeat/module/haproxy/log/ingest/pipeline.json b/filebeat/module/haproxy/log/ingest/pipeline.json index 5411d300245..fd1ffe5971e 100644 --- a/filebeat/module/haproxy/log/ingest/pipeline.json +++ b/filebeat/module/haproxy/log/ingest/pipeline.json @@ -32,6 +32,11 @@ "field": "haproxy.request_date" } }, + { + "remove": { + "field": "message" + } + }, { "geoip": { "field": "haproxy.client_ip", diff --git a/filebeat/module/haproxy/log/test/haproxy.log-expected.json b/filebeat/module/haproxy/log/test/haproxy.log-expected.json index 990ec9ae854..dbe75151ca2 100644 --- a/filebeat/module/haproxy/log/test/haproxy.log-expected.json +++ b/filebeat/module/haproxy/log/test/haproxy.log-expected.json @@ -37,7 +37,6 @@ "haproxy.time_queue": 0, "haproxy.time_server_response": 0, "input.type": "log", - "message": "Jul 30 09:03:52 localhost haproxy[32450]: 1.2.3.4:38862 [30/Jul/2018:09:03:52.726] incoming~ docs_microservice/docs 0/0/1/0/2 304 168 - - ---- 6/6/0/0/0 0/0 {docs.example.internal||} {|||} \"GET /component---src-pages-index-js-4b15624544f97cf0bb8f.js HTTP/1.1\"", "offset": 0, "prospector.type": "log" } From a27caff8075d5d3f538507d2420715a7599d4629 Mon Sep 17 00:00:00 2001 From: sayden Date: Wed, 17 Oct 2018 19:41:45 +0200 Subject: [PATCH 4/5] Removed local IP and message from expected JSON of the default format --- .../haproxy/log/test/default.log-expected.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/filebeat/module/haproxy/log/test/default.log-expected.json b/filebeat/module/haproxy/log/test/default.log-expected.json index 83db2952c50..5d119bb0bf3 100644 --- a/filebeat/module/haproxy/log/test/default.log-expected.json +++ b/filebeat/module/haproxy/log/test/default.log-expected.json @@ -3,17 +3,22 @@ "@timestamp": "2018-09-20T15:42:59.000Z", "fileset.module": "haproxy", "fileset.name": "log", - "haproxy.client_ip": "127.0.0.1", + "haproxy.client_ip": "1.2.3.4", "haproxy.client_port": "40780", - "haproxy.default.logsource": "127.0.0.1", + "haproxy.default.logsource": "1.2.3.4", "haproxy.default.mode": "HTTP", - "haproxy.destination_ip": "127.0.0.1", + "haproxy.destination_ip": "1.2.3.4", "haproxy.destination_port": "5000", "haproxy.frontend_name": "main", + "haproxy.geoip.city_name": "Mukilteo", + "haproxy.geoip.continent_name": "North America", + "haproxy.geoip.country_iso_code": "US", + "haproxy.geoip.location.lat": 47.913, + "haproxy.geoip.location.lon": -122.3042, + "haproxy.geoip.region_name": "Washington", "haproxy.pid": "24551", "haproxy.process_name": "haproxy", "input.type": "log", - "message": "Sep 20 15:42:59 127.0.0.1 haproxy[24551]: Connect from 127.0.0.1:40780 to 127.0.0.1:5000 (main/HTTP)", "offset": 0, "prospector.type": "log" } From fd9e9d288f6025898d3f11e85f03d830918b73cf Mon Sep 17 00:00:00 2001 From: sayden Date: Wed, 17 Oct 2018 19:54:45 +0200 Subject: [PATCH 5/5] Fields and expected json updated --- filebeat/docs/fields.asciidoc | 9 --------- filebeat/include/fields.go | 2 +- filebeat/module/haproxy/log/_meta/fields.yml | 3 --- .../module/haproxy/log/test/haproxy.log-expected.json | 1 + 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index add1fe44af5..00084ec1ef6 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -3611,15 +3611,6 @@ Self descriptive -- -*`haproxy.default.frontend_name`*:: -+ --- -type: text - -Name of the frontend (or listener) which received and processed the connection - --- - *`haproxy.default.mode`*:: + -- diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 7189b7246f0..c81a79d6d76 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/filebeat/module/haproxy/log/_meta/fields.yml b/filebeat/module/haproxy/log/_meta/fields.yml index 6da7ada0ffc..4f44e91c0b5 100644 --- a/filebeat/module/haproxy/log/_meta/fields.yml +++ b/filebeat/module/haproxy/log/_meta/fields.yml @@ -50,9 +50,6 @@ - name: priority type: long description: Self descriptive - - name: frontend_name - type: text - description: Name of the frontend (or listener) which received and processed the connection - name: mode type: text description: The mode the frontend is operating (TCP or HTTP) diff --git a/filebeat/module/haproxy/log/test/haproxy.log-expected.json b/filebeat/module/haproxy/log/test/haproxy.log-expected.json index dbe75151ca2..d57089c9a27 100644 --- a/filebeat/module/haproxy/log/test/haproxy.log-expected.json +++ b/filebeat/module/haproxy/log/test/haproxy.log-expected.json @@ -13,6 +13,7 @@ "haproxy.connections.retries": 0, "haproxy.connections.server": 0, "haproxy.frontend_name": "incoming~", + "haproxy.geoip.city_name": "Mukilteo", "haproxy.geoip.continent_name": "North America", "haproxy.geoip.country_iso_code": "US", "haproxy.geoip.location.lat": 37.751,