diff --git a/_beats/dev-tools/ecs-migration.yml b/_beats/dev-tools/ecs-migration.yml index 3ec8dfde0a3..ea3268a00e3 100644 --- a/_beats/dev-tools/ecs-migration.yml +++ b/_beats/dev-tools/ecs-migration.yml @@ -15,6 +15,11 @@ # Beat fields +- from: beat.hostname + to: host.hostname + alias6: true + alias: true + - from: beat.timezone to: event.timezone alias6: true diff --git a/_meta/ecs-migration.yml b/_meta/ecs-migration.yml deleted file mode 100644 index dfb0705d780..00000000000 --- a/_meta/ecs-migration.yml +++ /dev/null @@ -1,140 +0,0 @@ -# The ECS migration file contains the information about all the fields which are migrated to ECS in 7.0. -# The goal of the file is to potentially have scripts on top of this information to convert visualisations and templates -# based on this information in an automated way and to keep track of all changes which were applied. -# -# The format of the file is as following: -# -# - from: source-field-in-6.x -# to: target-filed-in-ECS -# # Alias field is useful for fields where there is a 1-1 mapping from old to new -# alias: true-if-alias-is-required-in-6x (default is true) -# # Copy to is useful for fields where multiple fields map to the same ECS field -# copy_to: true-if-field-should-be-copied-to-target-in-6x (default is false) - -- from: beat.hostname - to: observer.hostname - -- from: beat.name - to: observer.type - -- from: beat.version - to: observer.version - -- from: context.service.agent.name - to: agent.name - -- from: context.service.agent.version - to: agent.version - -- from: context.system.architecture - to: host.architecture - -- from: context.system.hostname - to: host.hostname - -- from: context.system.ip - to: host.ip - -- from: context.system.platform - to: host.os.platform - -- from: context.request.method - to: http.request.method - -- from: context.request.http_version - to: http.version - -- from: context.process.pid - to: process.pid - -- from: context.process.ppid - to: process.ppid - -- from: context.process.title - to: process.title - - # not in ECS -- from: context.service.environment - to: service.environment - - # not in ECS -- from: context.service.framework.name - to: service.framework.name - - # not in ECS -- from: context.service.framework.version - to: service.framework.version - - # not in ECS -- from: context.service.language.name - to: service.language.name - - # not in ECS -- from: context.service.language.version - to: service.language.version - -- from: context.service.name - to: service.name - - # not in ECS -- from: context.service.runtime.name - to: service.runtime.name - - # not in ECS -- from: context.service.runtime.version - to: service.runtime.version - -- from: context.service.version - to: service.version - -- from: context.request.url.full - to: url.full - -- from: context.request.url.hash - to: url.fragment - -- from: context.request.url.hostname - to: url.domain - -- from: context.request.url.pathname - to: url.path - -- from: context.request.url.port - to: url.port - alias: false - copy_to: true - -- from: context.request.url.raw - to: url.original - -- from: context.request.url.search - to: url.query - -- from: context.request.url.protocol - to: url.scheme - alias: false - copy_to: true - -- from: context.response.finished - to: http.response.finished - -- from: context.response.status_code - to: http.response.status_code - -- from: context.user.email - to: user.email - -- from: context.user.id - to: user.id - -- from: context.user.username - to: user.name - -- from: context.user.ip - to: client.ip - -- from: context.user.user-agent - to: user_agent.original.text - -- from: listening - to: observer.listening diff --git a/_meta/fields.common.yml b/_meta/fields.common.yml index 54c09de8559..2e0599577ca 100644 --- a/_meta/fields.common.yml +++ b/_meta/fields.common.yml @@ -423,216 +423,3 @@ type: keyword description: > The ID of the parent event. - - # ECS - - name: agent - type: group - dynamic: false - fields: - - name: name - type: alias - path: context.service.agent.name - - - name: version - type: alias - path: context.service.agent.version - - - name: client - type: group - dynamic: false - fields: - - name: ip - type: alias - path: context.user.ip - - - name: observer - type: group - dynamic: false - fields: - - name: hostname - type: alias - path: beat.hostname - - - name: listening - type: alias - path: listening - - - name: type - type: alias - path: beat.name - - - name: version - type: alias - path: beat.version - - - name: host - type: group - dynamic: false - fields: - - name: architecture - type: alias - path: context.system.architecture - - - name: ip - type: alias - path: context.system.ip - - - name: hostname - type: alias - path: context.system.hostname - - - name: os - type: group - fields: - - name: platform - type: alias - path: context.system.platform - - - name: http - type: group - dynamic: false - fields: - - name: request.method - type: alias - path: context.request.method - - - name: response.finished - type: alias - path: context.response.finished - - - name: response.status_code - type: alias - path: context.response.status_code - - - name: version - type: alias - path: context.request.http_version - - - name: process - type: group - dynamic: false - fields: - - name: pid - type: alias - path: context.process.pid - - - name: ppid - type: alias - path: context.process.ppid - - - name: title - type: alias - path: context.process.title - - - name: service - type: group - dynamic: false - fields: - # not in ECS - - name: environment - type: alias - path: context.service.environment - - # not in ECS - - name: framework - type: group - fields: - - name: name - type: alias - path: context.service.framework.name - - - name: version - type: alias - path: context.service.framework.version - - # not in ECS - - name: language - type: group - fields: - - name: name - type: alias - path: context.service.language.name - - - name: version - type: alias - path: context.service.language.version - - - name: name - type: alias - path: context.service.name - - # not in ECS - - name: runtime - type: group - fields: - - name: name - type: alias - path: context.service.runtime.name - - - name: version - type: alias - path: context.service.runtime.version - - - name: version - type: alias - path: context.service.version - - - name: url - type: group - dynamic: false - fields: - - name: domain - type: alias - path: context.request.url.hostname - - - name: fragment - type: alias - path: context.request.url.hash - - - name: full - type: alias - path: context.request.url.full - - - name: original - type: alias - path: context.request.url.raw - - - name: path - type: alias - path: context.request.url.pathname - - # context.request.url.port keyword -> long - - name: port - type: long - description: > - The port of the request, e.g. 443. - - - name: query - type: alias - path: context.request.url.search - - # context.request.url.protocol minus the ":" - - name: scheme - type: keyword - description: > - The scheme of the request, e.g. "https". - - - name: user - type: group - dynamic: false - fields: - - name: email - type: alias - path: context.user.email - - - name: id - type: alias - path: context.user.id - - - name: name - type: alias - path: context.user.username - - - name: user_agent.original.text - type: alias - path: context.user.user-agent diff --git a/docs/data/elasticsearch/error.json b/docs/data/elasticsearch/error.json index 7310a030d82..056d5dc63cb 100644 --- a/docs/data/elasticsearch/error.json +++ b/docs/data/elasticsearch/error.json @@ -249,9 +249,5 @@ }, "transaction": { "id": "945254c5-67a5-417e-8a4e-aa29efcbfb79" - }, - "url": { - "port": 8080, - "scheme": "https" } } diff --git a/docs/data/elasticsearch/generated/errors.json b/docs/data/elasticsearch/generated/errors.json index 3addb5ea23f..a166c56d3f3 100644 --- a/docs/data/elasticsearch/generated/errors.json +++ b/docs/data/elasticsearch/generated/errors.json @@ -268,10 +268,6 @@ }, "timestamp": { "us": 1494342245999999 - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/docs/data/elasticsearch/generated/metricsets.json b/docs/data/elasticsearch/generated/metricsets.json index 310f1c6d0f0..da6753b3599 100644 --- a/docs/data/elasticsearch/generated/metricsets.json +++ b/docs/data/elasticsearch/generated/metricsets.json @@ -30,10 +30,6 @@ "double_gauge": 3.141592653589793, "float_gauge": 9.16, "integer_gauge": 42767, - "labels": { - "code": "200", - "some.other.code": "abc" - }, "long_gauge": 3147483648, "negative": { "d": { diff --git a/docs/data/elasticsearch/generated/transactions.json b/docs/data/elasticsearch/generated/transactions.json index e4ae91e348c..09416a199f4 100644 --- a/docs/data/elasticsearch/generated/transactions.json +++ b/docs/data/elasticsearch/generated/transactions.json @@ -228,10 +228,6 @@ "started": 17 }, "type": "request" - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/docs/data/elasticsearch/metric.json b/docs/data/elasticsearch/metric.json index dacf0d7ef01..52a499f24df 100644 --- a/docs/data/elasticsearch/metric.json +++ b/docs/data/elasticsearch/metric.json @@ -43,10 +43,6 @@ "double_gauge": 3.141592653589793, "float_gauge": 9.16, "integer_gauge": 42767, - "labels": { - "code": "200", - "some.other.code": "abc" - }, "long_gauge": 3147483648, "negative": { "d": { diff --git a/docs/data/elasticsearch/transaction.json b/docs/data/elasticsearch/transaction.json index 9b8a98d7425..b9ac247a1ea 100644 --- a/docs/data/elasticsearch/transaction.json +++ b/docs/data/elasticsearch/transaction.json @@ -135,9 +135,5 @@ } }, "type": "request" - }, - "url": { - "port": 8080, - "scheme": "https" } } diff --git a/docs/fields.asciidoc b/docs/fields.asciidoc index c3f1a7016c6..47d78cb9a7f 100644 --- a/docs/fields.asciidoc +++ b/docs/fields.asciidoc @@ -756,372 +756,6 @@ type: keyword The ID of the parent event. --- - - -*`agent.name`*:: -+ --- -type: alias - -alias to: context.service.agent.name - --- - -*`agent.version`*:: -+ --- -type: alias - -alias to: context.service.agent.version - --- - - -*`client.ip`*:: -+ --- -type: alias - -alias to: context.user.ip - --- - - -*`observer.hostname`*:: -+ --- -type: alias - -alias to: beat.hostname - --- - -*`observer.listening`*:: -+ --- -type: alias - -alias to: listening - --- - -*`observer.type`*:: -+ --- -type: alias - -alias to: beat.name - --- - -*`observer.version`*:: -+ --- -type: alias - -alias to: beat.version - --- - - -*`host.architecture`*:: -+ --- -type: alias - -alias to: context.system.architecture - --- - -*`host.ip`*:: -+ --- -type: alias - -alias to: context.system.ip - --- - -*`host.hostname`*:: -+ --- -type: alias - -alias to: context.system.hostname - --- - - -*`host.os.platform`*:: -+ --- -type: alias - -alias to: context.system.platform - --- - - -*`http.request.method`*:: -+ --- -type: alias - -alias to: context.request.method - --- - -*`http.response.finished`*:: -+ --- -type: alias - -alias to: context.response.finished - --- - -*`http.response.status_code`*:: -+ --- -type: alias - -alias to: context.response.status_code - --- - -*`http.version`*:: -+ --- -type: alias - -alias to: context.request.http_version - --- - - -*`process.pid`*:: -+ --- -type: alias - -alias to: context.process.pid - --- - -*`process.ppid`*:: -+ --- -type: alias - -alias to: context.process.ppid - --- - -*`process.title`*:: -+ --- -type: alias - -alias to: context.process.title - --- - - -*`service.environment`*:: -+ --- -type: alias - -alias to: context.service.environment - --- - - -*`service.framework.name`*:: -+ --- -type: alias - -alias to: context.service.framework.name - --- - -*`service.framework.version`*:: -+ --- -type: alias - -alias to: context.service.framework.version - --- - - -*`service.language.name`*:: -+ --- -type: alias - -alias to: context.service.language.name - --- - -*`service.language.version`*:: -+ --- -type: alias - -alias to: context.service.language.version - --- - -*`service.name`*:: -+ --- -type: alias - -alias to: context.service.name - --- - - -*`service.runtime.name`*:: -+ --- -type: alias - -alias to: context.service.runtime.name - --- - -*`service.runtime.version`*:: -+ --- -type: alias - -alias to: context.service.runtime.version - --- - -*`service.version`*:: -+ --- -type: alias - -alias to: context.service.version - --- - - -*`url.domain`*:: -+ --- -type: alias - -alias to: context.request.url.hostname - --- - -*`url.fragment`*:: -+ --- -type: alias - -alias to: context.request.url.hash - --- - -*`url.full`*:: -+ --- -type: alias - -alias to: context.request.url.full - --- - -*`url.original`*:: -+ --- -type: alias - -alias to: context.request.url.raw - --- - -*`url.path`*:: -+ --- -type: alias - -alias to: context.request.url.pathname - --- - -*`url.port`*:: -+ --- -type: long - -The port of the request, e.g. 443. - - --- - -*`url.query`*:: -+ --- -type: alias - -alias to: context.request.url.search - --- - -*`url.scheme`*:: -+ --- -type: keyword - -The scheme of the request, e.g. "https". - - --- - - -*`user.email`*:: -+ --- -type: alias - -alias to: context.user.email - --- - -*`user.id`*:: -+ --- -type: alias - -alias to: context.user.id - --- - -*`user.name`*:: -+ --- -type: alias - -alias to: context.user.username - --- - -*`user_agent.original.text`*:: -+ --- -type: alias - -alias to: context.user.user-agent - -- [[exported-fields-apm-error]] diff --git a/include/fields.go b/include/fields.go index c5c63ef21ba..51f6bf893ab 100644 --- a/include/fields.go +++ b/include/fields.go @@ -31,5 +31,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "eJzcfX2T27bR+P/+FPidJ3N2R6Lvzj470Uza3z12Xm4S157Y7tOZtiOD4EpEjwRoADyd0ul3fwZvJEiCejnJqVP94UQUsbtY7C4W+4KbohtYzxCuygcIKaoKmKEfgIHABbp6+/oBQhlIImilKGcz9McHCCH0PYUik4jwsuQMKY5usaC8lnoEgltgSiYPEFqY12ZmyBQxXMIMFVQqYJQtzVOE1LqCmaZhxUXmnkUw6s9VlgmQEqkckARxCwJR2QJEnCUdVJXgBKTkItHfd8X31o8yUJIHIyDNLPeHaYb1gCpaglS4rDrgloLX/knIyHBkLZtHfljBG9bqD+E1UzN0Hjwa4a7+vPeUIL4wbDbkIspQSYngEghnmUSSMgLoA6N3CCpO8t58CGcK7tTobMaWl60RFilVAou1B1LjAlG24KLE+n0kYIlFple7IW+CCK5ULSBD6do8xkvzmBsUuCjWet1uada+UUsQiSdnzXBJyQwtcCFhC8dJLRUvB1zn6T+BqOAxMJwWkHmgAzhZOoARsihGQjicMqkwI9D5MS6I/kNZBnfdSfoPZrhY/9pS2/1VAhYk19MZGb1c6lVR4RtRoqXCCspWbX4fVGvqflcEa9n+4gn2xOZKVVs1IaqhaIuKlKBy3p/sfRkRmcp+zMg4md/ioga5VUVqOSc8i8tcz7qjzeZcf97rzdJARRqqN+ya70iArDiTfpPrE1OL4nfAvkZP8XK4Gw7ssn0wH5tII2lK1LDbnnmFFgVWqMRVZZyQhVHAaQYLyiAzZKEVVTmSSugX7DSS4QR6ert5U3gQWS4JInB0tq3YRrl57/ZIDc+LTMGXS8i0M2B3zwgJNDsG8usMmKILCmIP1FBiWhwD+3ca0D5zriJYew83T/etx6ZxoFUOAkLnSyIBhIsMsomGTonxaDBaQYpSwVeBK9MuH5V6IE8VNlK4ELw0MP86/Z6LFdbQ9P+hHHAGYqIpWOWU5OalBRVSIWBKrDUU/aglkgu6pAwXiBTU+LIR1EbGUc5XoJ30ki5zhRhXKAXEQHvCWNBirZVMKj0tLBFViGCm31hwsbSeGkYlLigxJ4tR/httMx5fZB0CP3SHlXjHF2qFhXMgESZKKyzVVOW4WGgOYINvgmCZdJcAPUFv3ukTUUqZcVUjGi7gUw1SHaLkKc/WkXkO7Ny4Bxr66fyGgjwWOCtK9wMX/vQQUabwDSDQfj+B3v7+MLrrP+yePpiaDvy2hxttwsMeW+41dEQWh8NjBozdHmslJCc3EFOH33QhLBUJMCLWlYI+zzxNKecFYLYZiICSK5hjGwHYn7l9Vyaud1vMw5VW76oABeiDKCZuVyc5lDBBOZcKYZahCqu8axQj6hzSJvBq4LVtcrS2unx2+xZ4NUE1q7CQkKEPv/zsDbizQhMEydL4gXL25AncYT21hPBy9uzZ0yfWIfvTp2+hwFJRYr8/VLxKxuZRCa444X2f8SiT8bBjc0jQiZ3FyShpi7r4LGRpuBNUcSlpqvdkrflTLCWUWqd+C6ZrsRs4fUeanYc9wvSA+nHOV1z0j/vHEQguVJyuZ8+ejlODVf65uKVhj3DKLew4l+zvn4MqC9m9m4J15j7VINb+PBInuSeD46TnWH4WwjXcHm1anzx9ilcnUXdQ69b8FoSknB3rJGQOyw5mn6YCsA1HcqS06xsGeLuURQISh9JkQe5LUuuO2uP/If7of4vTd4jn5ngwl/EzSMzBGQ2WbAuVbArJDYMoMd9wJMI0El/aTQ4jASYvXPaodHpxdnYa1YoFZVTmENOLGOO2OGhuiOYvJdgc31Y5qBxEhyi0wrLBjLjQh9OIgsi1VDAM9g/Ck+M0vXEpCAfKSXGyWbe27u6bzOsO4cD+vu5oa0MOmjs+5oA6J9mQOC1sVAFRtTgygSHkA4msCqwWXJTHJdBDPZC4XpRoJHi0laI2NmMOISrHyiGXLUkR8XbJzEPk+zpIzVUgFKas2XkAiZqZrw5RENrKsMKGSYQXBZDu6XBTVB+L5W2UaZHtZtNROeACjScJ9g+1/7kuQVDSTPf6VSMfIG4pAf/LmKwen5QBCacSVVhoEd1Mi6kEOJ7SvOsywIKPWVz73iEi6VGNm9rYfI9rZa/LsjZbOKoZ/VQD6phbRyCUVCmbyW6dtC4cq1yxTEyBUyjmCkptimCGTv71LxN0/fe/T3pv8grYvKDsZk7ZnNRCL/5c4XSQ49CfWgRAB9OaopIy71zP0Mllcpac9fHpjyFlhk6S5Amuqic3NMUMP3ySYZmnHIvsybPz9DL75uJs+uLri/Pp+Tm8mH5Nnr2YPr9Mv352mV6SRfr0T3P87SNzVJnZ/8ztiWX2yDlB8xUtMoJFNvt/amJfPHVlA4ljsqn8mH11cdGw56uLi9PHjx8Pqe5P7rme3BQXVY7Pf5M5Fpgta7yEWVETYLBxRn9v1/vvJ6d6OlGpjp2DDhLsv3QPQRtFOUoRsFsqONuzCmBH6xIAH0HveRzFPQwHbo3dfY5gwp8DW1EJvhS4LDVvPe36rJKNnsfjS34wUb2F35Wu5qhZM0VHLOwXyHZH7pfA6Q2kNEcogUtYcXHze2FvQ/CXwOCNxDRu5yAy8AWz12YvvwDWDghpvEuBmcREtSREqgT3KcvrOM6jxR0bCh9zCIlC1686jmPUDRu4YH+hsELvKsxk6C/s7H+N+14918S4XT3ub/VGnsLTDF6cnU1fZHBmvZH0/Pxymi2+Id+cZfgiW5zfy+MK2JbQbLuv1ZtM6GZ97jmNeFi9GTTkn4akNycUk/QYitswWLVJ3FqM0p7XsQB06mCfohUtCkQZKeoMEC4KhG8xLcyBIiiGTUbgMK48mRaSfpDjW0BSCyfiwlfXDtWSAPoyNNKoZHt8taQpHlSp2EhLCvp0LJHi/VJte8z9ImfjaPOOsqvBTwGrtgj/f+y3CNCXnClMWVN/r8c5yjuCYiTHckmT3CnJ77BKAwhr5EcmoucQHmQ1hUgCa8qxC75EJUiJlyATdB28ZYbRNtQkwVSV698JZwu6rIUNIi1oARP9nFl5tpVEVNpdRMOkpiSKcRUCmzThL4fJvf+eG1QdOib6N/Poo/76sYFj68XH6UqGTOsFaDcwrqHNRAZVLVhbjc4rEDZY7QKJnAVybggPeOeiahFqtKP4K2c7UOPf/JzUdH2MDcT0MmtGnM3iL00fioJseK70mE7+f9M9cdJR9QwrzwcBn2oqIOvsuH5PD95zCe0ZuqqXtVTo4rnK0cXZ+fMJOr+YPb2cXT5Nnj692I27to1iZQXZGyutIDYya4Kfzfz6drgtZR3rlWj6JEx9qeGWK5/T8l6BsAtlClJARBwuy6ceYmsdOnzsxFU3VM+OENrYKlPb2OiUNlA+QNehAITgYtxmx5F8pwd5C0gsRi2/OMuoy7/obVNrNsHS2C+Dp4kOjpl9Z8wGtr9XVrjB8FvSHJxkgKCXhouGe7dC10CGoHup0HtsWha6ExPfJ1ZQLNtN6sp9jUAxP/lFWRgyywormtKCqrUtnnqR3PX7xB6il3ZX0/IrQ4lsRMSYgZ6ts9Pz1OlPhVXet4seQ8HrrO3liiEh+pXEtQ2JLUhKUDiJjOgC8z07SeNM7ADPD5q7QSMgBw1uuwFthnXBlpjklEESiNAOUN2oeTOqC9R5Jmb15zusXAA5PnSwVNo27cVcNybOWwHL/vF0IzD3vhOxV5zcgNgiY9ZSgdhOdGbAJYMRQ1A7SMIA2FAMWjyltlv3AWpGerNhWNSajUYBja4YLmZY4bghee1+tUXspDNUahsfNP5l2dy8MPcgg47NMe93THsDhwDIll0/DL90KUzQW1seCK7zwxzRgFxM0JLARB/GMrqkChecAGbJKG19SzBKy7V7MThvmLyw1+rtGLZ7tA2O8DywG5aBmQj4rC6SEjJal5uxv7YgjCzuh3zMCDUU1HIKWKrpOdnigAWAkPGkaeslU2nJobJ1jzeIXGiDAlLcL9O73UXPDdG0/MD5sgCraePYO0ZuBMEv5p1t83OKbs1Aq+mv/PcIcGcjpdIbfVMIYNXc/qZ1VuZcqLn1HNvDOmYk58LjmzZaPtJ13pCF9uqvjlhodD9f6oPNAzcAEc1i3mDXeB6EMZQLA86fah0B+gCS1rRQTd98nJRetPoelLxscDLTUT+Oy4RUj9DFt6FgxXDC4mmEVgtzK7I/2m8RINf6EBEIKhcR09PKpn6+VTId7v3k8vA1+dGFI4arcSRJtwYiIuRcJsPswz3wvHnnAwdRHAtc0mJ9MAoLBj0yVccCshyrCcogpZhN0EIApDKboBVlGV/Jx0NKSkwOo+FnKk2he45FtsICpq4HBuQE1bI2vYCvr162jxupvqlTEAwUBOe1n8JnEazt741T1vWwWqAolOzNRrodtFUdOkSjvZSi4tkRjFXAgYpnVtOiqOpDFSXA9JZn6MP1qyEi/a+scKQi6r6oWohDZDyD43JQQxxh4a6mfjdEFhoqcTXEhBnjykRxj4YuABnHecztM8BLOjvpJrRHcCCieDunOlyVUx+w8wGht69t3KhvX8zDqayA0AUltgBUb6D2jqGYKbilsHJxugfjk7AoZugk4+Rv0WKp038k5uTl48NNFhBVmLKirYAdpnnjKV4zlSbHu1N+N57b3ZLX3Z7/fLF4vsDkbPqCPMc2/4nx5eX0aXqWXV6QF+fk+dlvVEW3W1b36DM6Qs1cJ/KMaIYo6YV9NgmcGZWY7Ymy5fwG1scUt2mMxtGNcUSXX2lVC69IwsxVZgioBEhgJtmDmUtScKKl2HW+Y1RyRhXXQz03PbpNCdT7uZXutqpnuxmobk7VrkTEJtZFJeiw6b4Xw3eoL8ZQf18zWxpCcFG4k7A+QtljNy2xWKMKRAVKYMXdzRUbmq9CkTnMTv/gIP0E6961FVaktZWtpQlQeKT3LW6xGYFXoDAtvsQil8vF2df46xfHN4hDNf9NC132ndeIWYzMolvsMpBSuCNQqdhZ7Z5NIjjltercI1Log4XgK+Y1OBDNTb1Ro3ck7VBC/N7bC9uyJkEFmVrzPMdVBQwy12+q3ZUUy3DUSKXgMGWIxm8jiZqdKLXNrSvQTSjGaeBZff/uDY3OQmgPC4PLX/rWFo1nHrchb4x+FFiOWVZAvC8m1iC4G0uvbX8gF532QMtb05aE62WukOQl2Kalpigkg7ZfcHio4ctDFOWqm69udMYfwLVZb64+3EtZCriFfS7zGgiEhFsQVK3b9k7CxVi1rNl+xPyQnpp+rZEF2dx7uKlW9zNpYFtMUKy7G+xmZaywwOV8E1H36nm4soBBCforZA0N6Dttrk5f8rrITN0f4YwBUUhx9JU87TcYNbdrVCDU2kNBVCKpaFE0pTMTU0kicwM2BQSfalz4Nr/ODCcorZXN7lcFJpDzwuTpBJiv2ZCCa2b0DEmqauxLGXtQfUWXRmkUyh0MkeJLo79N1Kvp2XUH0hN9In1nC5lea24R47hEuOtecr3MpX13ggp6A+jl2w+GAyWUXKxRbWfaVFz2khexKqphKsN5RrGjb6fxeGdH/6Md9tEf1yUqOGl7j92M+jUvD7riSqr6QVc8uwZsVCw/kqoeoNZ8M/mddtnHwneKK1wkjIsyqcjQXZcEF5DNFwXHKuK9ViBIt0R/y8HBDdCyxReGTtNmIStTVLr26TTTrWjvuzVmCEsVa9ULbj0zxYmixIXRSweJ1WVqr7PTmAgXJoiUIaqQwGzZu4TLCNGZlvXzs7Ovkv4SWSG85yrZwYOFcoK9z1oNlqhXt+SXJl2rzvw2LYyG62gZxtIxUXUE7T4brIHQajFkZhUWAmBzo2jbagM7XZswNvdtFxhY+jQWTyRlFkiCrk3CleCC1IUpitQOaYa49UzevEvQG4Z+pqy+M5fpcSapVLJtc2lg9pBWRa3BktzJZFovFiCkAffm3V9dwS1Gsjb97iFx+nWTX2SYKHrrn5uh/2tzIhM33uwY/e2Pe5uVuIEa+MeBwPcb1feTeDc6EHmv1z7FMTFa2Vj8wND3bOaGTHFgNu8hmLsaz02yOWpAt5jQTUZ0hwtAjmtIj21Kh8a0z7aBTuyweK/NmDaarVeJmtuSTLVt01rfDq8ELOjdDJ38zbD/Hyc7Lamkv35Oc2NqlY3JvaUitIzhmuW4M5Gmo1PKZIju+PT9ApJmWpTegULv6K+QWG+81G67loIIyZyQuqL23tYS63/sO49+uXr9OAmzF5LXgkCJq24G413wuENh84NpCJAImKAkN302Kg/r2GwMx66pRTJf0EKBaNZ5ihrkSUhG1B8MfkdjodfdM6X/Jbcs9M+IvhvdxF0blnU6hGJEHb1J3vOmKU8YLEBas6wwEgEVVvlgIfarEODExgk8G5qZCyiw2ZbdQU3j87eEmfi+6ipDZWIpoR7YJ10VqDCL5/HG/uSHSeSZ1jMvlzsm2lwvZVcVKnzPntHBKkRSElpS0G5sfwWVAGIcsUd//BY9Ty4fJ+jKbt3F2l/8EVzAUuGYKORwNx/PjexISzcTojFNEGVK8KwmIX3xAoMdxG+/PyNi/n6MFg6QdMka4cSGMh9Kk4Tb6k0cdqdESNyxkWE/En9y/OUL1MiygAJuTXTJk9jcmZNxs488guUMnWZpUnGplgLkpyIxsfXTCTr10puASPV341KfThAoEuO8rNPPMrMrtKiFCWnKOp1m9JaGzVWmZNZWM7VzmKDOZY+PIzUUJJoEOJRWE1n07L+hzKyHu0GLqtwvQ52ai/3afGXrDRqJsvMxCzHxAa/IJKTCYvfLt0M6PYS671yO3s8U4cMWXujPm8VCghrY7UA/TmXQXUbtRflrHxM2E+xbgc6f7onIYeZaHHdmzH+EM698I+bm2XUHNT1+wykicwljVau5fykE1HuR1yp8E8vXtCjoxnf13kBt4u8sdrEgI2jA8L1ayF0GA2Qng2HUYYUlgjsgtdYTjSoXnPFaFmvEBcKdJ7Eshu1Oju6NB2yN700Uf2RzdA3Rna0y8Ey67YuBg/K+80M3Zt/+tFfZ0dHvpohusb1ERFkXis43mZ64J3qfcoGxzTm8/2K4R0vKlkXrYz8yt3r+8N179KSWIOSTGc1OY9vc4W2I996qE3TqnF29HaeY3Og1ZNk/eeq25QOsYUjw8Y3ktpOPObRnHZtIZbiCv1/bKEDWxdD67H2di4UT3B/RuJjox/fv33burNUWQT+cmp0XsvD12J5ZYnHzH/pjQ50/LhT80SEjnybaa4izy9+uxNgkkj8kf9hzIiNhRP2YsuV8gYniYobOz8xndL6RXbHCbG7cg4OctEzwqhqpGNh0WxPqfcaSHV2IEeVFsfSxjbO1YStHpbuSxbaSdFU4efB/AQAA//9oJlq4" } diff --git a/model/ecs.go b/model/ecs.go deleted file mode 100644 index 161a57eabb9..00000000000 --- a/model/ecs.go +++ /dev/null @@ -1,44 +0,0 @@ -// Licensed to Elasticsearch B.V. under one or more contributor -// license agreements. See the NOTICE file distributed with -// this work for additional information regarding copyright -// ownership. Elasticsearch B.V. licenses this file to you under -// the Apache License, Version 2.0 (the "License"); you may -// not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -package model - -import ( - "strconv" - "strings" - - "github.com/elastic/apm-server/utility" - "github.com/elastic/beats/libbeat/common" -) - -func CopyECS(fields common.MapStr) { - // context.request.url.protocol -> url.scheme (minus trailing colon) - if scheme, err := fields.GetValue("context.request.url.protocol"); err == nil { - if schemeStr, ok := scheme.(string); ok { - utility.MergeAdd(fields, "url", common.MapStr{"scheme": strings.TrimSuffix(schemeStr, ":")}) - } - } - - // context.request.url.port -> url.port (as int) - if port, err := fields.GetValue("context.request.url.port"); err == nil { - if portStr, ok := port.(string); ok { - if portNum, err := strconv.Atoi(portStr); err == nil { - utility.MergeAdd(fields, "url", common.MapStr{"port": portNum}) - } - } - } -} diff --git a/model/error/event.go b/model/error/event.go index f4d5f778043..0389a70be1b 100644 --- a/model/error/event.go +++ b/model/error/event.go @@ -209,8 +209,6 @@ func (e *Event) Transform(tctx *transform.Context) []beat.Event { utility.AddId(fields, "parent", e.ParentId) utility.AddId(fields, "trace", e.TraceId) - m.CopyECS(fields) - if e.v2Event { if e.Timestamp.IsZero() { e.Timestamp = tctx.RequestTime diff --git a/model/metricset/event.go b/model/metricset/event.go index 6d0d6b20345..eb14a9a32de 100644 --- a/model/metricset/event.go +++ b/model/metricset/event.go @@ -165,7 +165,6 @@ func (me *Metricset) Transform(tctx *transform.Context) []beat.Event { context := common.MapStr{} if me.Tags != nil { context["tags"] = me.Tags - fields["labels"] = context["tags"] } fields["context"] = context diff --git a/model/metricset/event_test.go b/model/metricset/event_test.go index 17751686206..149a2099638 100644 --- a/model/metricset/event_test.go +++ b/model/metricset/event_test.go @@ -209,9 +209,6 @@ func TestTransform(t *testing.T) { "a": common.MapStr{"counter": float64(612)}, "some": common.MapStr{"gauge": float64(9.16)}, "processor": common.MapStr{"event": "metric", "name": "metric"}, - "labels": common.MapStr{ - "a.tag": "a.tag.value", - }, }, }, Msg: "Payload with valid metric.", diff --git a/model/span/event.go b/model/span/event.go index 5bbf72df355..7f51801d18d 100644 --- a/model/span/event.go +++ b/model/span/event.go @@ -187,8 +187,6 @@ func (e *Event) Transform(tctx *transform.Context) []beat.Event { utility.AddId(fields, "parent", &e.ParentId) utility.AddId(fields, "trace", &e.TraceId) - m.CopyECS(fields) - timestamp := e.Timestamp if timestamp.IsZero() { timestamp = tctx.RequestTime diff --git a/model/transaction/event.go b/model/transaction/event.go index 4bd4c1f1a8c..966f001b60c 100644 --- a/model/transaction/event.go +++ b/model/transaction/event.go @@ -23,7 +23,6 @@ import ( "github.com/santhosh-tekuri/jsonschema" - m "github.com/elastic/apm-server/model" "github.com/elastic/apm-server/model/span" "github.com/elastic/apm-server/model/transaction/generated/schema" "github.com/elastic/apm-server/transform" @@ -202,8 +201,6 @@ func (e *Event) Transform(tctx *transform.Context) []beat.Event { utility.AddId(fields, "parent", e.ParentId) utility.AddId(fields, "trace", &e.TraceId) - m.CopyECS(fields) - if e.v2Event { utility.Add(fields, "timestamp", utility.TimeAsMicros(e.Timestamp)) } diff --git a/model/transaction/event_test.go b/model/transaction/event_test.go index 4dc1e255e7f..f49dc32f19f 100644 --- a/model/transaction/event_test.go +++ b/model/transaction/event_test.go @@ -249,74 +249,6 @@ func TestEventTransform(t *testing.T) { }}, Msg: "SpanCount only contains `dropped`", }, - // duplicates some integration tests - { - Event: Event{ - Context: common.MapStr{ - "request": common.MapStr{ - "url": common.MapStr{ - "port": "80", - "protocol": "http:", - }, - }, - }, - }, - Output: common.MapStr{ - "context": common.MapStr{ - "request": common.MapStr{ - "url": common.MapStr{ - "port": "80", - "protocol": "http:", - }, - }, - }, - "transaction": common.MapStr{ - "id": "", - "type": "", - "duration": common.MapStr{"us": 0}, - "sampled": true, - }, - "url": common.MapStr{ - "port": 80, - "scheme": "http", - }, - }, - Msg: "ECS transform numeric request port and protocol with trailing colon", - }, - { - Event: Event{ - Context: common.MapStr{ - "request": common.MapStr{ - "url": common.MapStr{ - "port": "notanumber", - // protocol present so that output url.* is populated - // as tests do not check missing entries - "protocol": "http:", - }, - }, - }, - }, - Output: common.MapStr{ - "context": common.MapStr{ - "request": common.MapStr{ - "url": common.MapStr{ - "port": "notanumber", - "protocol": "http:", - }, - }, - }, - "transaction": common.MapStr{ - "id": "", - "type": "", - "duration": common.MapStr{"us": 0}, - "sampled": true, - }, - "url": common.MapStr{ - "scheme": "http", - }, - }, - Msg: "ECS transform non-numeric request port", - }, { Event: Event{ Id: id, diff --git a/processor/error/package_tests/TestProcessErrorFull.approved.json b/processor/error/package_tests/TestProcessErrorFull.approved.json index f2dd1f703ff..7bc92db3e9a 100644 --- a/processor/error/package_tests/TestProcessErrorFull.approved.json +++ b/processor/error/package_tests/TestProcessErrorFull.approved.json @@ -252,10 +252,6 @@ }, "transaction": { "id": "945254c5-67a5-417e-8a4e-aa29efcbfb79" - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/processor/error/package_tests/attrs_common.go b/processor/error/package_tests/attrs_common.go index 908a1eceea0..90f305670f8 100644 --- a/processor/error/package_tests/attrs_common.go +++ b/processor/error/package_tests/attrs_common.go @@ -50,7 +50,6 @@ func fieldsNotInPayloadAttrs(s *tests.Set) *tests.Set { "listening", "view errors", "error id icon", "context.response.headers.user-agent", "context.user.user-agent", "context.user.ip", "context.system.ip", "context.http", "context.http.method", "context.http.status_code", "context.http.url", - tests.Group("container"), tests.Group("context.db"), tests.Group("timestamp"), )) @@ -103,7 +102,7 @@ func condRequiredKeys(c map[string]tests.Condition) map[string]tests.Condition { func keywordExceptionKeys(s *tests.Set) *tests.Set { return tests.Union(s, tests.NewSet( "processor.event", "processor.name", "listening", "error.grouping_key", - "error.id", "transaction.id", "context.tags", "labels", "parent.id", "trace.id", "url.scheme", + "error.id", "transaction.id", "context.tags", "parent.id", "trace.id", "view errors", "error id icon")) } diff --git a/processor/metricset/package_tests/TestProcessMetricset.approved.json b/processor/metricset/package_tests/TestProcessMetricset.approved.json index cad3d00ba34..c543ec0ee00 100644 --- a/processor/metricset/package_tests/TestProcessMetricset.approved.json +++ b/processor/metricset/package_tests/TestProcessMetricset.approved.json @@ -46,10 +46,6 @@ "double_gauge": 3.141592653589793, "float_gauge": 9.16, "integer_gauge": 42767, - "labels": { - "code": "200", - "some.other.code": "abc" - }, "long_gauge": 3147483648, "negative": { "d": { diff --git a/processor/metricset/package_tests/TestProcessMetricsetMultipleSamples.approved.json b/processor/metricset/package_tests/TestProcessMetricsetMultipleSamples.approved.json index e8cd8ea398f..91d8dc8b606 100644 --- a/processor/metricset/package_tests/TestProcessMetricsetMultipleSamples.approved.json +++ b/processor/metricset/package_tests/TestProcessMetricsetMultipleSamples.approved.json @@ -39,9 +39,6 @@ "http": { "requests": 1 }, - "labels": { - "url": "/foo" - }, "processor": { "event": "metric", "name": "metric" @@ -86,9 +83,6 @@ "http": { "requests": 6 }, - "labels": { - "url": "/bar" - }, "processor": { "event": "metric", "name": "metric" @@ -133,9 +127,6 @@ "http": { "requests": 2 }, - "labels": { - "url": "/foo" - }, "processor": { "event": "metric", "name": "metric" diff --git a/processor/stream/approved-es-documents/testV2IntakeIntegrationErrors.approved.json b/processor/stream/approved-es-documents/testV2IntakeIntegrationErrors.approved.json index 3addb5ea23f..a166c56d3f3 100644 --- a/processor/stream/approved-es-documents/testV2IntakeIntegrationErrors.approved.json +++ b/processor/stream/approved-es-documents/testV2IntakeIntegrationErrors.approved.json @@ -268,10 +268,6 @@ }, "timestamp": { "us": 1494342245999999 - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/processor/stream/approved-es-documents/testV2IntakeIntegrationMetricsets.approved.json b/processor/stream/approved-es-documents/testV2IntakeIntegrationMetricsets.approved.json index 310f1c6d0f0..da6753b3599 100644 --- a/processor/stream/approved-es-documents/testV2IntakeIntegrationMetricsets.approved.json +++ b/processor/stream/approved-es-documents/testV2IntakeIntegrationMetricsets.approved.json @@ -30,10 +30,6 @@ "double_gauge": 3.141592653589793, "float_gauge": 9.16, "integer_gauge": 42767, - "labels": { - "code": "200", - "some.other.code": "abc" - }, "long_gauge": 3147483648, "negative": { "d": { diff --git a/processor/stream/approved-es-documents/testV2IntakeIntegrationTransactions.approved.json b/processor/stream/approved-es-documents/testV2IntakeIntegrationTransactions.approved.json index e4ae91e348c..09416a199f4 100644 --- a/processor/stream/approved-es-documents/testV2IntakeIntegrationTransactions.approved.json +++ b/processor/stream/approved-es-documents/testV2IntakeIntegrationTransactions.approved.json @@ -228,10 +228,6 @@ "started": 17 }, "type": "request" - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/processor/stream/package_tests/error_attrs_test.go b/processor/stream/package_tests/error_attrs_test.go index 7768cd9e5f5..7d27e3ef131 100644 --- a/processor/stream/package_tests/error_attrs_test.go +++ b/processor/stream/package_tests/error_attrs_test.go @@ -62,7 +62,6 @@ func errorFieldsNotInPayloadAttrs() *tests.Set { "listening", "view errors", "error id icon", "context.response.headers.user-agent", "context.user.user-agent", "context.user.ip", "context.system.ip", "context.http", "context.http.method", "context.http.status_code", "context.http.url", - tests.Group("container"), tests.Group("context.db"), // we don't support these yet @@ -131,8 +130,8 @@ func errorCondRequiredKeys() map[string]tests.Condition { func errorKeywordExceptionKeys() *tests.Set { return tests.NewSet( - "process.args", "processor.event", "processor.name", "listening", "error.grouping_key", "url.scheme", - "context.tags", "labels", + "processor.event", "processor.name", "listening", "error.grouping_key", + "context.tags", "view errors", "error id icon", // metadata fields - tested in metadata tests diff --git a/processor/stream/package_tests/metadata_attrs_test.go b/processor/stream/package_tests/metadata_attrs_test.go index 0a8961058c1..273d2e8c0cc 100644 --- a/processor/stream/package_tests/metadata_attrs_test.go +++ b/processor/stream/package_tests/metadata_attrs_test.go @@ -134,7 +134,7 @@ func TestMetadataPayloadMatchJsonSchema(t *testing.T) { func TestKeywordLimitationOnMetadataAttrs(t *testing.T) { metadataProcSetup().KeywordLimitation( t, - tests.NewSet("processor.event", "processor.name", "listening", "labels", "url.scheme", + tests.NewSet("processor.event", "processor.name", "listening", tests.Group("context.request"), tests.Group("context.tags"), tests.Group("transaction"), diff --git a/processor/stream/package_tests/span_attrs_test.go b/processor/stream/package_tests/span_attrs_test.go index 93e30d49ded..692a6e8b122 100644 --- a/processor/stream/package_tests/span_attrs_test.go +++ b/processor/stream/package_tests/span_attrs_test.go @@ -47,7 +47,6 @@ func spanPayloadAttrsNotInFields() *tests.Set { "context.http.url", "context.http.method", "context.tags.tag1", - "labels.tag1", ) } @@ -58,12 +57,6 @@ func spanFieldsNotInPayloadAttrs() *tests.Set { "view spans", "span.parent", // from v1 "transaction.sampled", - // ECS field copies - tests.Group("container"), - - "url", - "url.port", - "url.scheme", ), // not valid for the span context transactionContext(), @@ -116,14 +109,13 @@ func transactionContext() *tests.Set { tests.Group("context.response"), tests.Group("context.request"), tests.Group("context.system"), - tests.Group("process"), ) } func spanKeywordExceptionKeys() *tests.Set { return tests.Union(tests.NewSet( - "processor.event", "processor.name", "listening", "url.scheme", - "context.tags", "labels", + "processor.event", "processor.name", "listening", + "context.tags", ), transactionContext(), ) diff --git a/processor/stream/package_tests/transaction_attrs_test.go b/processor/stream/package_tests/transaction_attrs_test.go index 7e9be1c45ab..409d83df4eb 100644 --- a/processor/stream/package_tests/transaction_attrs_test.go +++ b/processor/stream/package_tests/transaction_attrs_test.go @@ -68,7 +68,6 @@ func transactionFieldsNotInPayloadAttrs() *tests.Set { "context.http.method", "context.http.status_code", "context.response.headers.user-agent", - tests.Group("container"), // we don't support these yet "kubernetes.labels", @@ -113,11 +112,9 @@ func transactionRequiredKeys() *tests.Set { func transactionKeywordExceptionKeys() *tests.Set { return tests.NewSet( - "host.name", "processor.event", "processor.name", "listening", + "processor.event", "processor.name", "listening", "transaction.marks", "context.tags", - "labels", - "url.scheme", // length always <= context.request.url.protocol // metadata fields - tested in metadata tests tests.Group("context.process"), diff --git a/processor/transaction/package_tests/TestProcessTransactionFull.approved.json b/processor/transaction/package_tests/TestProcessTransactionFull.approved.json index a586d108ab0..02090cea984 100644 --- a/processor/transaction/package_tests/TestProcessTransactionFull.approved.json +++ b/processor/transaction/package_tests/TestProcessTransactionFull.approved.json @@ -138,10 +138,6 @@ } }, "type": "request" - }, - "url": { - "port": 8080, - "scheme": "https" } }, { diff --git a/processor/transaction/package_tests/attrs_common.go b/processor/transaction/package_tests/attrs_common.go index 0e6c800fe86..07a97d275c0 100644 --- a/processor/transaction/package_tests/attrs_common.go +++ b/processor/transaction/package_tests/attrs_common.go @@ -47,7 +47,6 @@ func fieldsNotInPayloadAttrs(s *tests.Set) *tests.Set { return tests.Union(s, tests.NewSet( "listening", "view spans", "context.response.headers.user-agent", "context.user.user-agent", "context.user.ip", "context.system.ip", - tests.Group("container"), tests.Group("timestamp"))) } @@ -102,9 +101,9 @@ func condRequiredKeys(c map[string]tests.Condition) map[string]tests.Condition { func keywordExceptionKeys(s *tests.Set) *tests.Set { return tests.Union(s, tests.NewSet( - "process.args", "processor.event", "processor.name", "listening", "parent.id", "trace.id", - "transaction.id", "transaction.marks", "context.tags", "labels", "url.scheme", - "span.hex_id", "span.subtype", "span.action")) + "processor.event", "processor.name", "listening", "parent.id", "trace.id", + "transaction.id", "transaction.marks", "context.tags", "span.hex_id", + "span.subtype", "span.action")) } func templateToSchemaMapping(mapping map[string]string) map[string]string { diff --git a/script/update_beats.patch b/script/update_beats.patch deleted file mode 100644 index 3154a445c52..00000000000 --- a/script/update_beats.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff --git dev-tools/ecs-migration.yml dev-tools/ecs-migration.yml -index ea3268a0..3ec8dfde 100644 ---- dev-tools/ecs-migration.yml -+++ dev-tools/ecs-migration.yml -@@ -15,11 +15,6 @@ - - # Beat fields - --- from: beat.hostname -- to: host.hostname -- alias6: true -- alias: true -- - - from: beat.timezone - to: event.timezone - alias6: true -diff --git libbeat/_meta/fields.common.yml libbeat/_meta/fields.common.yml -index 4866b0462..d9401b8c1 100644 ---- libbeat/_meta/fields.common.yml -+++ libbeat/_meta/fields.common.yml -@@ -66,9 +66,6 @@ - Alias fields for compatibility with 7.x. - fields: - # Common Beats fields -- - name: host.hostname -- type: alias -- path: beat.hostname - - name: event.timezone - type: alias - path: beat.timezone -diff --git libbeat/processors/add_host_metadata/_meta/fields.yml libbeat/processors/add_host_metadata/_meta/fields.yml -index b579df3b2..770ca050f 100644 ---- libbeat/processors/add_host_metadata/_meta/fields.yml -+++ libbeat/processors/add_host_metadata/_meta/fields.yml -@@ -15,14 +15,6 @@ - type: keyword - description: > - Unique host id. -- - name: architecture -- type: keyword -- description: > -- Host architecture (e.g. x86_64, arm, ppc, mips). -- - name: os.platform -- type: keyword -- description: > -- OS platform (e.g. centos, ubuntu, windows). - - name: os.version - type: keyword - description: > -@@ -31,12 +23,7 @@ - type: keyword - description: > - OS family (e.g. redhat, debian, freebsd, windows). -- - name: ip -- type: ip -- description: > -- List of IP-addresses. - - name: mac - type: keyword - description: > - List of hardware-addresses, usually MAC-addresses. -- diff --git a/script/update_beats.sh b/script/update_beats.sh index 9e03433b5f3..7f7690fdcf2 100755 --- a/script/update_beats.sh +++ b/script/update_beats.sh @@ -63,8 +63,6 @@ mkdir -p $LICENSEDIR rsync -crpv --delete \ ${GIT_CLONE}/licenses/*.txt ./../licenses -# apply any patches to _beats files -patch -s -F0 -p0 -i ../script/update_beats.patch popd diff --git a/tests/fields.go b/tests/fields.go index ca11aa809c2..289e8859280 100644 --- a/tests/fields.go +++ b/tests/fields.go @@ -46,8 +46,6 @@ func (ps *ProcessorSetup) PayloadAttrsMatchFields(t *testing.T, payloadAttrsNotI //dynamically indexed: "context.tags.organization_uuid", "context.tags.span_tag", - "labels.organization_uuid", - "labels.span_tag", //known not-indexed fields: Group("context.custom"), Group("context.db"), diff --git a/tests/system/test_ecs_mappings.py b/tests/system/test_ecs_mappings.py deleted file mode 100644 index 51ddb8e1c49..00000000000 --- a/tests/system/test_ecs_mappings.py +++ /dev/null @@ -1,134 +0,0 @@ -import json - -import yaml - -from apmserver import SubCommandTest - - -def flatmap(fields, pfx=None): - if pfx is None: - pfx = [] - for field, attribs in sorted(fields.items()): - if 'properties' in attribs: - for f in flatmap(attribs['properties'], pfx + [field]): - yield f - else: - yield ".".join(pfx + [field]), attribs - - -class ECSTest(SubCommandTest): - """ - Test export template subcommand. - """ - - def start_args(self): - return { - "extra_args": ["export", "template"], - "logging_args": None, - } - - def test_ecs_migration(self): - """ - Test that all fields are aliased or otherwise accounted for in ECS migration. - """ - all_fields = set() - alias_source_fields = set() - alias_target_fields = set() - exception_fields = set() - for f, a in flatmap(yaml.load(self.command_output)["mappings"]["doc"]["properties"]): - if a.get("type") == "object" and not a.get("enabled", True): - exception_fields.add(f) - if not a.get("index", True): - exception_fields.add(f) - all_fields.add(f) - if a.get("type") == "alias": - alias_source_fields.add(f) - alias_target_fields.add(a["path"]) - - # fields with special exception, due to mapping type changes, etc - # no comment means unchanged - exception_fields.update({ - "@timestamp", - "container.labels", # target for docker.container.labels copy - "context.http.status_code", # staying put, like other context.http.* (and context.db.*) - "context.request.url.port", # field copy to url.port, keyword -> int - "context.request.url.protocol", # field copy to url.scheme, drop trailing ":" - "context.tags", # field copy, can't alias objects - "docker.container.labels", # field copy, can't alias objects - "error.code", "error.culprit", "error.exception.code", "error.exception.handled", "error.exception.message", - "error.exception.module", "error.exception.type", "error.grouping_key", "error.id", "error.log.level", - "error.log.logger_name", "error.log.message", "error.log.param_message", "error.message", "error.type", - "fields", - "labels", # target for context.tags copy - "kubernetes.annotations", "kubernetes.container.image", "kubernetes.container.name", "kubernetes.labels", - "kubernetes.namespace", "kubernetes.node.name", "kubernetes.pod.name", "kubernetes.pod.uid", - "parent.id", - "processor.event", "processor.name", - "sourcemap.bundle_filepath", "sourcemap.service.name", "sourcemap.service.version", - "span.duration.us", "span.hex_id", "span.id", "span.name", "span.parent", "span.start.us", "span.sync", - "span.action", "span.subtype", "span.type", - "system.cpu.total.norm.pct", "system.memory.actual.free", "system.memory.total", - "system.process.cpu.total.norm.pct", "system.process.memory.rss.bytes", "system.process.memory.size", - "tags", - "timestamp.us", - "trace.id", - "transaction.duration.us", "transaction.id", "transaction.marks.*.*", "transaction.name", - "transaction.result", "transaction.sampled", "transaction.span_count.dropped.total", "transaction.type", - "url.port", # field copy from context.request.url.port - "url.scheme", # field copy from context.request.url.protocol - - # scripted fields - "error id icon", - "view errors", - "view spans", - - # host processor fields, already ECS compliant - "host.id", "host.mac", "host.name", "host.os.family", "host.os.version", - }) - - should_not_be_aliased = alias_target_fields - all_fields - self.assertFalse(should_not_be_aliased, json.dumps(sorted(should_not_be_aliased))) - - # check that all fields are accounted for - not_aliased = all_fields - alias_target_fields - alias_source_fields - exception_fields - fmt = "\nall fields ({:d}):\n{}\n\naliased ({:d}):\n{}\n\naliases ({:d}):\n{}\n\nunaccounted for ({:d}):\n{}" - self.assertFalse(not_aliased, - fmt.format( - len(all_fields), json.dumps(sorted(all_fields)), - len(alias_target_fields), json.dumps(sorted(alias_target_fields)), - len(alias_source_fields), json.dumps(sorted(alias_source_fields)), - len(not_aliased), json.dumps(sorted(not_aliased)), - )) - - def test_ecs_migration_log(self): - aliases = {} - all_fields = set() - not_indexed = set() - for f, a in flatmap(yaml.load(self.command_output)["mappings"]["doc"]["properties"]): - self.assertNotIn(f, all_fields) - self.assertNotIn(f, aliases) - all_fields.add(f) - if a.get("type") == "alias": - aliases[f] = a["path"] - if not a.get("index", True): - not_indexed.add(f) - - aliases_logged = {} - for migration_log in self._beat_path_join("_meta", "ecs-migration.yml"), \ - self._beat_path_join("_beats", "dev-tools", "ecs-migration.yml"): - with open(migration_log) as f: - for m in yaml.load(f): - if m.get("index", "apm-server") != "apm-server": - continue - if m.get("alias", True): - self.assertNotIn(m["to"], aliases_logged, "duplicate log entry for: {}".format(m["to"])) - aliases_logged[m["to"]] = m["from"] - elif m.get("copy_to", False): - if m["from"] not in not_indexed and m["to"] not in not_indexed: - self.assertIn(m["from"], all_fields) - else: - self.fail(m) - self.assertIn(m["to"], all_fields) - - # false if ecs-migration.yml log does not match fields.yml - self.assertEqual(aliases, aliases_logged)