Hi there,
in what terms "it doesn't work"? I've replicated your same pipeline (removing the update filter which is useless since the above gsub automatically updates that field) with your same input and it seems to work perfectly fine to me.
Using this pipeline:
input {
stdin{}
}
filter {
grok {
match => {
"message" =>
[
"(?m)%{SYSLOGTIMESTAMP:syslog.timestamp} %{SYSLOGHOST:syslog.hostname} %{POSINT:syslog.pid} %{TIMESTAMP_ISO8601:system.syslog.timestamp} %{SYSLOGHOST:hostname} (?<srx.tag>.+)? - (?<srx.type>[^\s]+)? %{GREEDYDATA:syslog.message}"
]
}
}
if "message=" in [syslog.message] or "index=" in [syslog.message] or "type=" in [syslog.message] or "name=" in [syslog.message] {
mutate {
gsub => [
"syslog.message","message=","srx.msg=",
"syslog.message","type=","ipsec.type=",
"syslog.message","name=","ipsec.name=",
"syslog.message","index=","ipsec.index="
]
}
}
kv {
source => "syslog.message"
value_split => "="
allow_duplicate_values => false
transform_key => "lowercase"
trim_value => "\[\]"
remove_field => [ "command" ]
}
}
output {
stdout{}
}
And the input document you provided:
Mar 2 15:12:59 host.name.abc 1 2020-03-02T23:13:03.193Z host.name.abc RT_IDP - IDP_ATTACK_LOG_EVENT [junos@2636.1.1.1.2.28 epoch-time="1583190783" message-type="SIG" source-address=“1.x.x.x.” source-port=“12345” destination-address=“1.x.x.x.” destination-port=“123” protocol-name="TCP" service-name="SERVICE_IDP" application-name="HTTP" rule-name="3" rulebase-name="IPS" policy-name="Recommended" export-id="20175" repeat-count="0" action="DROP" threat-severity="HIGH" attack-name="HTTP:MISC:GENERIC-DIR-TRAVERSAL" nat-source-address="0.0.0.0" nat-source-port="13312" nat-destination-address=“3.x.x.x.” nat-destination-port="9757" elapsed-time="0" inbound-bytes="0" outbound-bytes="0" inbound-packets="0" outbound-packets="0" source-zone-name="UNTRUST" source-interface-name="reth1.24" destination-zone-name="DMZ" destination-interface-name="reth2.21" packet-log-id="0" alert="no" username="unknown-user" roles="N/A" index="cnm" type="idp" message="-"]
This is the standard output:
{
"inbound-packets" => "0",
"syslog.pid" => "1",
"@timestamp" => 2020-03-03T09:23:41.224Z,
"message-ipsec.type" => "SIG",
"syslog.message" => "[junos@2636.1.1.1.2.28 epoch-time=\"1583190783\" message-ipsec.type=\"SIG\" source-address=“1.x.x.x.” source-port=“12345” destination-address=“1.x.x.x.” destination-port=“123” protocol-ipsec.name=\"TCP\" service-ipsec.name=\"SERVICE_IDP\" application-ipsec.name=\"HTTP\" rule-ipsec.name=\"3\" rulebase-ipsec.name=\"IPS\" policy-ipsec.name=\"Recommended\" export-id=\"20175\" repeat-count=\"0\" action=\"DROP\" threat-severity=\"HIGH\" attack-ipsec.name=\"HTTP:MISC:GENERIC-DIR-TRAVERSAL\" nat-source-address=\"0.0.0.0\" nat-source-port=\"13312\" nat-destination-address=“3.x.x.x.” nat-destination-port=\"9757\" elapsed-time=\"0\" inbound-bytes=\"0\" outbound-bytes=\"0\" inbound-packets=\"0\" outbound-packets=\"0\" source-zone-ipsec.name=\"UNTRUST\" source-interface-ipsec.name=\"reth1.24\" destination-zone-ipsec.name=\"DMZ\" destination-interface-ipsec.name=\"reth2.21\" packet-log-id=\"0\" alert=\"no\" useripsec.name=\"unknown-user\" roles=\"N/A\" ipsec.index=\"cnm\" ipsec.type=\"idp\" srx.msg=\"-\"]",
"repeat-count" => "0",
"protocol-ipsec.name" => "TCP",
"inbound-bytes" => "0",
"rulebase-ipsec.name" => "IPS",
"srx.msg" => "\"-\"",
"source-zone-ipsec.name" => "UNTRUST",
"policy-ipsec.name" => "Recommended",
"action" => "DROP",
"ipsec.index" => "cnm",
"threat-severity" => "HIGH",
"@version" => "1",
"host" => "fabio",
"nat-destination-address" => "“3.x.x.x.”",
"syslog.timestamp" => "Mar 2 15:12:59",
"destination-address" => "“1.x.x.x.”",
"source-port" => "“12345”",
"source-interface-ipsec.name" => "reth1.24",
"nat-source-address" => "0.0.0.0",
"nat-destination-port" => "9757",
"message" => "Mar 2 15:12:59 host.name.abc 1 2020-03-02T23:13:03.193Z host.name.abc RT_IDP - IDP_ATTACK_LOG_EVENT [junos@2636.1.1.1.2.28 epoch-time=\"1583190783\" message-type=\"SIG\" source-address=“1.x.x.x.” source-port=“12345” destination-address=“1.x.x.x.” destination-port=“123” protocol-name=\"TCP\" service-name=\"SERVICE_IDP\" application-name=\"HTTP\" rule-name=\"3\" rulebase-name=\"IPS\" policy-name=\"Recommended\" export-id=\"20175\" repeat-count=\"0\" action=\"DROP\" threat-severity=\"HIGH\" attack-name=\"HTTP:MISC:GENERIC-DIR-TRAVERSAL\" nat-source-address=\"0.0.0.0\" nat-source-port=\"13312\" nat-destination-address=“3.x.x.x.” nat-destination-port=\"9757\" elapsed-time=\"0\" inbound-bytes=\"0\" outbound-bytes=\"0\" inbound-packets=\"0\" outbound-packets=\"0\" source-zone-name=\"UNTRUST\" source-interface-name=\"reth1.24\" destination-zone-name=\"DMZ\" destination-interface-name=\"reth2.21\" packet-log-id=\"0\" alert=\"no\" username=\"unknown-user\" roles=\"N/A\" index=\"cnm\" type=\"idp\" message=\"-\"]",
"outbound-bytes" => "0",
"syslog.hostname" => "host.name.abc",
"application-ipsec.name" => "HTTP",
"alert" => "no",
"source-address" => "“1.x.x.x.”",
"destination-zone-ipsec.name" => "DMZ",
"rule-ipsec.name" => "3",
"srx.type" => "IDP_ATTACK_LOG_EVENT",
"packet-log-id" => "0",
"epoch-time" => "1583190783",
"srx.tag" => "RT_IDP",
"destination-port" => "“123”",
"nat-source-port" => "13312",
"hostname" => "host.name.abc",
"export-id" => "20175",
"elapsed-time" => "0",
"system.syslog.timestamp" => "2020-03-02T23:13:03.193Z",
"roles" => "N/A",
"useripsec.name" => "unknown-user",
"ipsec.type" => "idp",
"attack-ipsec.name" => "HTTP:MISC:GENERIC-DIR-TRAVERSAL",
"outbound-packets" => "0",
"destination-interface-ipsec.name" => "reth2.21",
"service-ipsec.name" => "SERVICE_IDP"
}
What did you expect to be different?
Also, I sincerely recommend you not to use the dot notation in your field names. It may cause problems in future scripts/pipelines because it always creates a bit of confusion if the foo.bar field is a root field with a dot in the name or a bar field nested in a foo field.
For example, if you try to apply that grok in the Kibana Grok Debugger, you'll see some nested fields are spit out. Hence, if you wanna create nested fields in Logstash use the [foo][bar] syntax. If you want to create root field I suggest you should use the snake case foo_bar syntax.