# ==============================================================================
# Vector.dev Remap Language (VRL) Transform
# Use inside a 'remap' transform in vector.yaml
# ==============================================================================
.parsed, err = parse_regex(.message, r'^(?<client_ip>(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,7}:|(?:[0-9A-Fa-f]{1,4}:){1,6}:[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,2}|(?:[0-9A-Fa-f]{1,4}:){1,4}(?::[0-9A-Fa-f]{1,4}){1,3}|(?:[0-9A-Fa-f]{1,4}:){1,3}(?::[0-9A-Fa-f]{1,4}){1,4}|(?:[0-9A-Fa-f]{1,4}:){1,2}(?::[0-9A-Fa-f]{1,4}){1,5}|[0-9A-Fa-f]{1,4}:(?:(?::[0-9A-Fa-f]{1,4}){1,6})|:(?:(?::[0-9A-Fa-f]{1,4}){1,7}|:)|fe80:(?::[0-9A-Fa-f]{0,4}){0,4}%[0-9a-zA-Z]+|::(?:ffff(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])|(?:[0-9A-Fa-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])))|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))):(?<client_port>(?:[+-]?(?:[0-9]+))) \[(?<timestamp>(?:(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]))/(?:\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b)/(?:\b[0-9]{4}\b):(?:(?:(?:(?:2[0123]|[01]?[0-9])):(?:(?:[0-5][0-9]))(?::(?:(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?))))) (?:(?:Z|[+-](?:(?:2[0123]|[01]?[0-9]))(?::?(?:(?:[0-5][0-9]))))))\] (?<frontend_name>\S+) (?<backend_name>\S+)/(?<server_name>\S+) (?<tq>(?:[+-]?(?:[0-9]+)))/(?<tw>(?:[+-]?(?:[0-9]+)))/(?<tc>(?:[+-]?(?:[0-9]+)))/(?<tr>(?:[+-]?(?:[0-9]+)))/(?<tt>(?:[+-]?(?:[0-9]+))) (?<status>(?:[+-]?(?:[0-9]+))) (?<bytes>(?:[+-]?(?:[0-9]+))) - - (?<term_state>\S+) (?<actconn>(?:[+-]?(?:[0-9]+)))/(?<feconn>(?:[+-]?(?:[0-9]+)))/(?<beconn>(?:[+-]?(?:[0-9]+)))/(?<srvconn>(?:[+-]?(?:[0-9]+)))/(?<retries>(?:[+-]?(?:[0-9]+))) (?<srv_queue>(?:[+-]?(?:[0-9]+)))/(?<backend_queue>(?:[+-]?(?:[0-9]+))) "(?<method>\b\w+\b) (?<uri>\S+) HTTP/(?<http_version>(?:(?:(?:[+-]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)))))"$')
if err == null {
. = merge(., .parsed)
del(.parsed)
# Type coercions
.client_port = to_int!(.client_port)
.tq = to_int!(.tq)
.tw = to_int!(.tw)
.tc = to_int!(.tc)
.tr = to_int!(.tr)
.tt = to_int!(.tt)
.status = to_int!(.status)
.bytes = to_int!(.bytes)
.actconn = to_int!(.actconn)
.feconn = to_int!(.feconn)
.beconn = to_int!(.beconn)
.srvconn = to_int!(.srvconn)
.retries = to_int!(.retries)
.srv_queue = to_int!(.srv_queue)
.backend_queue = to_int!(.backend_queue)
} else {
log("LogPipeline parsing warning: " + err, level: "warn")
}
# ==============================================================================
# vector.yaml Pipeline Component
# ==============================================================================
transforms:
parse_logs:
type: remap
inputs: ["source_logs"]
source: |
.parsed, err = parse_regex(.message, r'^(?<client_ip>(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,7}:|(?:[0-9A-Fa-f]{1,4}:){1,6}:[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,2}|(?:[0-9A-Fa-f]{1,4}:){1,4}(?::[0-9A-Fa-f]{1,4}){1,3}|(?:[0-9A-Fa-f]{1,4}:){1,3}(?::[0-9A-Fa-f]{1,4}){1,4}|(?:[0-9A-Fa-f]{1,4}:){1,2}(?::[0-9A-Fa-f]{1,4}){1,5}|[0-9A-Fa-f]{1,4}:(?:(?::[0-9A-Fa-f]{1,4}){1,6})|:(?:(?::[0-9A-Fa-f]{1,4}){1,7}|:)|fe80:(?::[0-9A-Fa-f]{0,4}){0,4}%[0-9a-zA-Z]+|::(?:ffff(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])|(?:[0-9A-Fa-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])\.){3}(?:25[0-5]|(?:2[0-4]|1?[0-9])?[0-9])))|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))):(?<client_port>(?:[+-]?(?:[0-9]+))) \[(?<timestamp>(?:(?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]))/(?:\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b)/(?:\b[0-9]{4}\b):(?:(?:(?:(?:2[0123]|[01]?[0-9])):(?:(?:[0-5][0-9]))(?::(?:(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?))))) (?:(?:Z|[+-](?:(?:2[0123]|[01]?[0-9]))(?::?(?:(?:[0-5][0-9]))))))\] (?<frontend_name>\S+) (?<backend_name>\S+)/(?<server_name>\S+) (?<tq>(?:[+-]?(?:[0-9]+)))/(?<tw>(?:[+-]?(?:[0-9]+)))/(?<tc>(?:[+-]?(?:[0-9]+)))/(?<tr>(?:[+-]?(?:[0-9]+)))/(?<tt>(?:[+-]?(?:[0-9]+))) (?<status>(?:[+-]?(?:[0-9]+))) (?<bytes>(?:[+-]?(?:[0-9]+))) - - (?<term_state>\S+) (?<actconn>(?:[+-]?(?:[0-9]+)))/(?<feconn>(?:[+-]?(?:[0-9]+)))/(?<beconn>(?:[+-]?(?:[0-9]+)))/(?<srvconn>(?:[+-]?(?:[0-9]+)))/(?<retries>(?:[+-]?(?:[0-9]+))) (?<srv_queue>(?:[+-]?(?:[0-9]+)))/(?<backend_queue>(?:[+-]?(?:[0-9]+))) "(?<method>\b\w+\b) (?<uri>\S+) HTTP/(?<http_version>(?:(?:(?:[+-]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)))))"$')
if err == null {
. = merge(., .parsed)
del(.parsed)
}