From 7b6690ee1bc4ce004a4455a6643eb4ec2ad13b9f Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Tue, 22 Jan 2019 17:01:23 +0100 Subject: [PATCH] Support Percona extended slow log (#10227) Fix #6665 (cherry picked from commit 84844b3c10b56c5fb9a5eba1fa19cc2543ce6d98) Co-authored-by: Hagen Montag --- CHANGELOG.next.asciidoc | 1 + filebeat/docs/fields.asciidoc | 162 ++++++++++++++++++ filebeat/include/fields.go | 2 +- .../module/mysql/slowlog/_meta/fields.yml | 73 ++++++++ .../module/mysql/slowlog/ingest/pipeline.json | 9 +- .../test/percona-ubuntu-5.7.19-innodb.log | 36 ++++ ...ona-ubuntu-5.7.19-innodb.log-expected.json | 88 ++++++++++ .../slowlog/test/percona-ubuntu-5.7.19.log | 121 +++++++++++++ 8 files changed, 483 insertions(+), 9 deletions(-) create mode 100644 filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log create mode 100644 filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log-expected.json create mode 100644 filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19.log diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index b6f0ac1848a..70cd0402bf9 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -140,6 +140,7 @@ https://github.com/elastic/beats/compare/v6.6.0...6.x[Check the HEAD diff] - Add support for iis 7.5 log format. {issue}9753[9753] {pull}9967[9967] - Add support for MariaDB in the `slowlog` fileset of `mysql` module. {pull}9731[9731] - Add convert_timezone to nginx module. {issue}9839[9839] {pull}10148[10148] +- Add support for Percona in the `slowlog` fileset of `mysql` module. {issue}6665[6665] {pull}10227[10227] *Heartbeat* - Made monitors.d configuration part of the default config. {pull}9004[9004] diff --git a/filebeat/docs/fields.asciidoc b/filebeat/docs/fields.asciidoc index bdc1f1b5ac6..eb1cc30d785 100644 --- a/filebeat/docs/fields.asciidoc +++ b/filebeat/docs/fields.asciidoc @@ -4125,6 +4125,18 @@ type: long The unix timestamp taken from the `SET timestamp` query. +-- + +*`mysql.slowlog.bytes_sent`*:: ++ +-- +type: long + +format: bytes + +The size of the query result. + + -- *`mysql.slowlog.query`*:: @@ -4163,6 +4175,26 @@ type: keyword Current authenticated user, used to determine access privileges. Can differ from the value for user. +-- + +*`mysql.slowlog.last_errno`*:: ++ +-- +type: keyword + +Last SQL error seen. + + +-- + +*`mysql.slowlog.killed`*:: ++ +-- +type: keyword + +Code of the reason if the query was killed. + + -- *`mysql.slowlog.query_cache_hit`*:: @@ -4193,6 +4225,37 @@ type: boolean Whether the query needed temporary tables on disk. +-- + +*`mysql.slowlog.tmp_tables`*:: ++ +-- +type: long + +Number of temporary tables created for this query + + +-- + +*`mysql.slowlog.tmp_disk_tables`*:: ++ +-- +type: long + +Number of temporary tables created on disk for this query. + + +-- + +*`mysql.slowlog.tmp_table_sizes`*:: ++ +-- +type: long + +format: bytes + +Size of temporary tables created for this query. + -- *`mysql.slowlog.filesort`*:: @@ -4253,6 +4316,105 @@ type: long Number of merge passes executed for the query. +-- + +*`mysql.slowlog.log_slow_rate_type`*:: ++ +-- +type: keyword + +Type of slow log rate limit, it can be `session` if the rate limit is applied per session, or `query` if it applies per query. + + +-- + +*`mysql.slowlog.log_slow_rate_limit`*:: ++ +-- +type: keyword + +Slow log rate limit, a value of 100 means that one in a hundred queries or sessions are being logged. + + +-- + +[float] +== innodb fields + +Contains fields relative to InnoDB engine + + + +*`mysql.slowlog.innodb.trx_id`*:: ++ +-- +type: keyword + +Transaction ID + + +-- + +*`mysql.slowlog.innodb.io_r_ops`*:: ++ +-- +type: long + +Number of page read operations. + + +-- + +*`mysql.slowlog.innodb.io_r_bytes`*:: ++ +-- +type: long + +format: bytes + +Bytes read during page read operations. + + +-- + +*`mysql.slowlog.innodb.io_r_wait.sec`*:: ++ +-- +type: long + +How long it took to read all needed data from storage. + + +-- + +*`mysql.slowlog.innodb.rec_lock_wait.sec`*:: ++ +-- +type: long + +How long the query waited for locks. + + +-- + +*`mysql.slowlog.innodb.queue_wait.sec`*:: ++ +-- +type: long + +How long the query waited to enter the InnoDB queue and to be executed once in the queue. + + +-- + +*`mysql.slowlog.innodb.pages_distinct`*:: ++ +-- +type: long + +Approximated count of pages accessed to execute the query. + + -- [[exported-fields-nginx]] diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index b16afdf2e4c..db4ba885a3d 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 "eJzsfVtz3DiS7nv/CoT2YeyNcrVv7Z32xtlYr2R3a8YXjSXPnFlPRwlFoqrQIgE2AEqq3pj/fgIJgARJ8FZFSd1ny08Wi8z8kAASiURm4gm6ItvXKOHrbxBSVCXkNXrP12hFE4IizhRh6huEYiIjQTNFOXuN/uMbhBA65kxhyqT+1ryeUEbk/BuEVpQksXwNrz1BDKfkNZI8FxGBRwipbUZea843XMT2mSC/5FSQ+DVSIncvBvjqfxcbYliuBE/RzYZGG6Q2BgG6wRIJguM5uthQacBAUwCtfg0vJU9yRVCG1QYpDg81vXnB4R0XiNziNNMCufz2GotvE77+Vm6lIuk84evL+TeV9vHVShJVaV/C2brRuBVO5NDWGZqATpCMC0Vi00SpsFASYVUDkRIp8boqZUVuHSy6ZlyQBV7ya/IaPd1R8HZUIL4qZa7lbToDHtkRUUMnlSA4HTQEBkhJj1JDEd1sCAMIlK1dTxOhYcgZijBDS4L+IFXMc/UHxAX8nwjxhyq8THCZkUhxMdfguqWTCRJhpR+/mr/olxllWa6gzfUhS661LPWYXRNGhKZZGbhUIhgDZpBe4yQnSMOkK0rigseKC/j9UrO4RBxAIMrgoWEuSQQPbbe9owlZEqy0vFbU9hd6dPL27PPb4zcXb09eI0kIuoSPQSCXj6vyKn/ZcSD9ToRSbbUeZgtFUyIVTrPuRp4yFGFJLL81kQplNCMwYzIsJDHqqKBWnUF2nskZogpJxQWRBWX9Dhd0TRlO0OV/FhQu0SOhx6YkTOnJ4MibKeIoV9TkYyMRWhIHGdearSUhiZqnPM6TAX1bSNJ8gNQGq7IzgZ/p5RY++q8RXOxng9mYZzFWuFTaQ/jYLwbzkVuZ8PV8hSOaULWdbnmwBBG5VQJHGkMxdjJBuaBqG4bifp0MiiPo5pDh0yUNSa6J/mKR4CVJploPNJZNnmKzEuBlQpBj1N0pdw7DMZo31puISDnPBF+L6dZFDUAzcP1hybcxp/F0I4HGHlMgH5p1rlcm4+sIOubBoUfENY2Ir1dCkm7hcm6+Blo1wnokJeS6cwC1WzBrraTh8wDZVYLXsq/5YQsXPu2SB8xDMMnnOI4FkXIn/NasR5ZGqBF6CdV29l70NYHgYIoE0Rq4QjzGqmfUVL6tSk5/jDgLGiP2g3mxsPNVQbLQedKsBlR2rLlouS3WFEONpxkWVHJWECwXdU3Lm1R6vQlbDJrHHJ2u0JKrDcKCIBprQyDCSUGWs2Tr05YbniextpBzSeqrvpGTZ+KN6L03xrJb02stBW6kckUZ6AgrU5CxNdA1ezDZ1oLnGWXrGpaNUtlcEJlxJslcKqxyuYh4TNr0SAuuHy8uzpCjgzw6bvNXbPtePn3ZBYEkOJPEGIMjMbw1nxrTbEnUDYENzC+5NhExi0t8lKGUJgnVlipncX2GVRFZi3GRELauTbh+TMd2W2c+drqjKq0lj+urmEUA0OcpURsejx8rn23Tzfd11Q0qYEGiqoqCYWKf+A4Hb4OSlfYyfOI9aAGC0OmZU2aFQWPU5DfeS8dmyHKmrXCU5omiWULQ6dn1S/3g9Oz6laNCZPFlsfZyoWrIvO7pwHbGhWpB5WivCa+R9uVUpe1R/oHwhEcY9kJ6Djrq7veqgEt2esRRpsect7C2dX5n2xD66BktBV1P7CXPnCmxXVDJ/fm/I9djQw2dnn9CRgs0GDrJNBitCV9knDI1jNV7ztZU5TGBKZ5gBX8EGAqyppxNINLPQMg3WyqC1Mbv/kyOtenVwsK2ZJqusq2p9ZRjFROpKPM7qk9PBDVFQFd0gmrqCw9IRWnsqjZaFEdQdXRC9dVHGGRIi4T1SKsmaeqSCqvytXpfDFAq7aOms939qmWQctmZe4eK6VQyXWqmh2WvqulTNjs3NqxyupXO7pINqJ4hymff1rWooFwSscBrUvSUPVD5IolA/vOOzWxJw84QxLhIcZJs9SbBekoxWgp+o6k6y0t/qzfAipQjSG74DcozbUPekKXbAoNbXNPSW8/SaYSFNkjzAimSSoAR7striC51bklPcrDBfY3IrSIsJvF+q8AXZrFeEyE9320puIBCi4lu+l1B8tVLttlKveGyLANYLO67AvPXqlj68aT4Zy5GoBm+4HzQlEP9hNr6KaXsrrBoyqOwZFhFm7vqpTNNfBScms4cj6bY1x5vBK/QGji0O+FxOd8b4UAcPCMCw/GGPY4NolnlSVJfaCaF9C5PkoqntY4LPaIsSvKYSNfRj8NQ71cjDBPfPWuFgaDuVz20gCqWe5F0r+dfPr93i3gm+DXV5hi4+hKiiP51hm6o2iAZbUhKZmjDpZqBxQb+TrAHvnx+X9Djy59JpJzDTBBwmVGGuNoQgTJBVvSWyBmSebRBWKJLTXCei2T+r5faFC8IWVUwR38mJDPuBCXySOUC7GNJpTL+OcLINRFoy3M9+70GFf0z1BmjoVRmY3ggt3bRj/Z71zfW8Ckbe0QSLBWN5hE/8vcZpwxJbThFWBKJMLQhxVskyIoIpDjCDDZxLP6WC9hioZgKEqlka7qH5wphfxTxFFNr4Wrq4NjU1GcAzNsQ3oBrdc3dQfWlE8Jl6xlr94B6BzEv1REVE4VpIhFeaqAERxv/2HqM5eZ56YdMrh4ddNaIrWkwlPTXpkuga85C+/VXetQvt4pI9KiICADPNo5jEhvPuz329w629b9LjeXSKeJ/QW8SiqXxvyu6NIeqRkCVvjGe8Mrpt4GL9ff2iRZg46j8GxtitSRYlTFW/2X+6oqriniacobs+Tb0Ob7GNIEzRcoQThLrR9dIKoFXFehwyDDsPN2fYBohkoTFLo4g4WsXYCThlKF4Cz7z5CyJcmEWJpAiF9YdQBMzS5g5QTeRG1SaswdNkyr9J+PKJ2Ymlps85fsXHLn4qALHDBQVzDaYaaXyrIR/NHHNm0Kr6ayuE1+HDQ54VC4YgUOeoFlQOV0C4J7sRM5Yse+qoFE0Jb9yNgCNe/Mu0VRtlg4wtTUVhvPQ8Imj8qDqqDLrvCO+YNTRSu+ZVeW9wvx9k69zqdDzV2qDnj999mqGnj1//eK719+9mL948XyYdM3ZWXHAZ6ahniCCRFzEtdClaqNU76nuG7GkSmCxhXeNtOyir8d7RoTpKLAU9CImMJM4qriPtJwa60uh1pwcjUVhH5k/FiPObQpdBVuDYk4ti1Wqfp4oRGGFNNeltsMy/ZHTgPasVo9fHMdUv4sTRNmK65ltD2UNHznvWe+q0ZIoFDHZAauEZunMGwyCLu/hNqmh7h9NeoOoPJNFu+0KDHU7TOwa5RYzu0i9sX8GqJhl03bKCmD6KyiYtf82v61HA/8LOjarmh6/MrTQgslaU7xtK21TSdcOrqsas5NM8a7DmfA8dkfuxfirMIn0K3Nrh4keJilReB74okqMMqkwi8i8FpbTSc99tLAftZAcINAQ0YZsze8pjjaUkWZwQCdV+9Wi+KpK1No3JixrQM95lMOfNrpKa7hRwrXfhGVrPMzDidn37RA74dEV7Nu6xpiLZu4HHQO5eeOLJqkBI6FBrDkMSj6p1n67EIUvnfIBEZXKp5iAMFdAijFWOKyOPthfjUM7qnwq7abAGkA4jhfwwsKRLHug1YZum72eWUGiHtuhcghVQThHZ1xKqpdNsIglxO6Q6PkMrSMyQ1ygmK6pwgmPCGaNoP9WTdARmWxeRKcnDpLWo8jN6n4O/XZxwcPfVQzj0lATnpzV83lKYpqn3dw/GBImCGkU8zYlVCDI5ROCpXryLOox4zxCCOxxWtraVBo4VJZGdseQ83WQB8X+8uR2+NCzn2gsP3C+ToiZae3cK0quNYBnbTdXXe2zE92ogXKmn7i/A8StjpRKmwsRTxJSBjub3/SclRsu1MLYn2XYKGbRhgvH70kxy1sylApYaJTXJKCh0a4nW/SXnHgJLDQO2ZRV5bkXR39cALnihNwA0NuYZU4Thfyz+84FZUckxwVPc5zbzguitWWDW2Ung7p3Mz1YTkEShk8xaPVgLofsj+avAJFTvRXxBqrNQamqnnJs6ue9I9PyHjcu9+8T53Jt9sZEI90oiMAgxyLaUEXAIb1/Gyrk0CMyX8/R7R9fLV69nCEs0hnKsmiGUprJx00oXM6zBKsVF+l+SD6dI0fIYogIU1zOUL7Mmcpn6IaymN+0gGieEe2GwdIJ8ljhlCbbvVkYMraRgsQbrGYoJkuK2QytBCFLGXe1do9orPdUQojT6dkTL5CqziDF0X6NdGw2WMQ3WJCS2QzlModojQ9vjn0MTo9c5UsiGFHE22f/2X8WYFv+XpjBVZu2JIp8XdK9LJYf9SqgCmg07lCBxxMsD54EMh4b3RZkle+rmjxOZzxGX05PwkfxMsPRdI0qKTaZ8ZhMK0FNsUWEQxfXYYwMNZTirMkJM8YVeN8nY+eRDPOc0mDx+EYV26WL7QQmW5BvZR+NMxxtyPNSvRy9MU+OWlx55lf0wR1uVdWG9aqH1ELJCY1x6DqGzkVsnrYpEBxFZXZSmE+PyAovteeu1FrT4fjx4uLsxPKB6LjuMFU/wDDliiwqi1NXt/bgBKwJJUx5h8jzIGcpE70rVDziyXTMz8/fI0e1aSjU+Uc02xAxLXdDs7YHQPUQy0b46F58XdSl8VNATAUc7CyxpBHCudqYHCpzfGjPHoPgKukvQ5AV+/gf3l6MB+0ShiBHx6XOBIUmJhwkDc5fPr8Ps90olS2adusE/IFv5wB1KUvNyN+Wc5gxnIt8qOrZjM9/yePtQhKm5hCmMBSBO7cMfTQAHcvTJRHaMjXBES5XiIhriBWupHGFxbYiQkw5qz2hGdJhxn50dJVr7TRuAMtjP58zZ09aY5vRJ5ZskS2XgGgZ5dggaT57ayKMJNEbSpQl+ZoyG67ghWZwAQ/a1UQjTLza4PrKNrbFtrll0LkNNpqqtWVLMYsDzQyvmagrGrsqgPA4GyAGFEp/r8c/t4GqBzxWMQXm6ghAaV8gdCuoWsDjpKD6IqLbQNUDo6ug9u69rC80ug1XwCwYAqs9LnokcNYSK92Gl9c1/BC0O2BphrG2I1rc+zQYh+6+58ModDsOwLvt0mY6ThVXYH3V/yiLyW21BMdIzJ9cfSJv4TUBf0uy4sIsVLoJy62tjvREv/nEvGnWm/ACuia8Zc+1z9r5A+GnZxBKpG0wPQbWWG2IILHeCpAYcWYjj+2uzwXxNhoeWGcN8UFLaoPeLktsRw6lL69JB6WXWdkOqyO9cjJgzYTLNjzBrEsfRzj3cpSIkpZczDZMbQmZk4nH7OC8NM02JOFczUlxRGUGZ4887nbINBI76yj80EW0ixfqnXU+uYxL430ydEd5nfxqQ0MkMGCDVlRQAtpuPjfiGlElAIq2bWB2htHMpTdcmvHCVm5tbph6XCfaYzdppvB6TeJugWQ07PnZzc9gT2TQ6UmYm5qUm9pAVaI2ZpW0hyq/nfva1gXMBI/zyEsxqMjZebTzmKrYd2jDgxZ/tvFjg5fXWRiGQDHLhju4HWM0xr9dn+k17qjD2W3q8FZFvIeOeU9Zfmv4QzEu9JEryBtx+SSCoJhHeUqYnlfa2EFLEuG8ZvOpDdmal7cMpzSClewai6223Qz5MhNluPc84iJe1CKZBw6fLqae8ZvEC5w3pkoP/XdGIVNWL+gFlncSW+anJ2XNqmLLB9UQkeINokADqIahMnIzNVRGbgqoc09qpyeVmlshsAJHBK1yCJhwlHnZSv3IWrZU2CJjaouiDdZ2PHqU0KvmOr0ktuiA4Fw9bu8wOdbz2dtfkkjY003fY9Ni1R1WYp2jU1XrKKQoqeQimn/QDsVrHbbc+sSCTZDkl5ywhitun6XEn5iOvPVLt3h+o2iHFdnsKSPYT5hNCJaSRxTsA8g+8Cofhtg2l+shBspJo8BlkPZdEqeKpHsdDQABSCBkXQLSr41no79yRZpZTCOsiLQxofATz4sSRIornNRxNbcBUOLSvkUl+pUI/gT24/+OsPUn8BV6ilKCmbT5gybnVEgFRFvG3dPxrTM0sVjDiulUok2ki3CStB5GjecliMwT5VXVdTzQI5mbs2ou0ArTJBekRZ0+rKPk0hg+c215aLv+skGy42Di4DC5ry14BRGUKW4Dcy+eCVZJ8l83TnjRwZ20izvpnt0ndudG/PnrbeAqz1v2cZV3yuik0D6tzgYN3661hk8Hwu4qBI784Hn99pH3ZnGmdHT9t49/kv/94qixravLu1h3WUxuuzmf6lfg9TDPlS0t/EQRqZ7ATQdj+dPWcDTLncZh3vjTD+uTm+WXz6vjv373b2/Oo1+Wx+ub4ezlBou4k31RZBxeDaN4OpwhLFK7b7o7PXV42zhdrzYGJrR+q3oDhkuHd6c3cNGIgHInkOsNVUq4QDRbrGiiiDiqcSklob+q/9o+4Sv5s71bc4DvEqzsXnyDFeJRlAtIyceMs23Kc7kw4XWLmDBK4lktrGqhzRh4XHvL/LkWmCn9d8QZMzd2BJ+5zxROM22OLIoiMSJnC+wRsn+bD9qFV+U/Xoym+/rl+DfwvHhlbRodjx41f3G1AD+/Pb9Ab85O3ceP/VFSfGdqj0eEXpcWWvma3rozkjyewRqWLCBG+JHxyUXaTNd/Uylz6351rNplV9LZWW7VyvTtQ9DzG9cukmkKrR3ws++fz5+9+uP82fzl8zDkmi1dbPcEZRHNGmesTaDFm+iR3sDqzx+bKWMmQG1atGNdFBNrvHBrhSLasPp2mPnEINXjiNySKO8UZpTkUhHxOuWMKi6+TTFtNKcfai5oL04Y/YTFYFahL59PW0F9u7jNcHT1rSRRLqjafrvwxD3cvV0aVjC2BitINxZHSPE4IVicR4IniS2RPl6Glu1iyeNtL1b9UqPCFl0hwvRmqwOp/jCMrXLiUkaAmQu0glW1d116i11vM7tnhA/9h+PiNqFqgHqIpc822+BGqMTOm23rybeXWkVIcQ0MWIzd2d7dds23gH84dlmPWlMEgXrdbwsvLSSJWqGtEo533Ccd15AUDMFlKExJK+O8+RO+xuiaCpXjxE/QDAOXkciXC7lNlzxZKD0n4PqHu2oHOsNQzYqmkDtu74BAUUIwlMDJM2SwIMAS8J7VgEPc6z0AH4AboPTiviH4aiHISi6sUxTw3yHyC41ZZhCCVHAEGCaCmbCISK9RXWGSAicJSRaCyAiz+0LtyTvF4gouGKLXxCZVgTM2IQhnWeLlNEjFs6zpNPOP+7GUi5wl3F5/dw8tMdxgvDA4AAEQA6UfZbl/M0sTY0gpD8R4Zg/nj8++mDFuxwsRKy5ScwmlU0ABiO0qG9WjxMNCRr2CHtgQ/a/WCJ4rSWOzGbkigpEk1ABPsWzlA6CkrA4SdaIUBCf3AfMCzjTszUB10IqXxV+N+7dYpWDbAre6wjkeZVRuwi79n6/ThchZyxRsb8iQKBDq6sv/6a8fLBpTPt7OthnCEmFDXo9yY3J3He6ZwBK5gLOehdYybcpjZ+Q/YLHE64o0LVd7wqS52m4IKY1iIGsVCKuLwzy1iDUExfmV7mIDyuLsxOWVC6xC2Cn05odjCLIxS++6heWG4MlOjX4kOEM4KW4EwSx2/UJ/HW3L6m8WV8tWpU6ZIutARsuwpQdg6cYXNWavaMIhlap9odEr051B+iIhLAdnHWD82Ik1CWfa7dBxn5LYhdxBPHwU5Rlm0fa334PQeXwFoR9eC34D3dkq0/7e3fKcrafs379rgr/zHt7W2/Ab6OMOuYbRlcE44rrCtOqeOTdJnO5u9eYBR30MdF2wlGac1cN3q+zeww3U9r2qZ6f0+vA5mUfzdP6BKHyCFT6GCzLhgMhemVr9sm3hCnpu6ojM0hUi2Bz9XX4aGDRdc+XIdOEPx+3urrCrKzQLw7Ol0NmsuUGpYqlz6kLREblVWBM3zUC3O2BYtO+aiA3B8UKSXzpFfl4NFWuV/IuXL7///vvnQfG3oihNw4VzBM27Y6iOqhvqH45nxU2c1lhrRfjs1dN6ZFGbyVhIaannPh4HEBQhmLVayO4u1dIIvsHSEibxCPR/HIS+0FkJv6nGLNe61fzuQhJhc/G2fvbfAHH09fnTZ3988vTVk+ffXzx7+vrpq9fPXs6+f/Hip6+nH999Qj99NYfUhsTcgpj/khOx/Ql9vV789U+bn//6E/qaEiVoBEfhr+Yv5k+faLrzp6/mz1/99PXpT2CNf305/y6VP83gj4UR0teX8Lfes2yokl+fff/yxXf60TYj8utPM1OPEP4DEOCE7+tfvrz9/PfFxY9vPy7evb04/rGgAQfV8usz/T5crPn1f/5xBGj/cfT6f/5xlGIVbRY4ScyfS86l+sfR62fzp//85z9/mu2j6iGiXnTr+bWtfdGm5YPCXhFV7b1+7a4F3IEEphxVxRbJHo/AVhmE1YbvxdOnqQxBqSV7FDh0L3YB0b+3MRvXZBgnHazOFVYUZsMYfi3t8sZiF0sTT6PfauNZH8gj22zu64Uu68KR8Jvufh0xSUZIidwqgRcGZAe8t/o1d/24F+s4QT95iqZvOsBc6NTd5W3Vz0dORqfdujCYHTFVkzI16rCXre57SmIT5tMG4Pk4AILnitashCrvz+aNtm6WT5/9+N/P//JfV9//fPNyrdb4nWLjpgftuG7yNJ5E6/RogIuOqR/zqIuXK4aKM8Fvt15An33SEspnf20E8RmnbeF2Kqii8fF7DdOkeR9wg8ZJ+Yo/xfdYbms39Nb4tVzA69d39dmCPRsaQVnHCDprZdCQkD3fqsfzVujVKkdDKbYmofZwvbNGVkNDutVmtuaXVpvpBZ+bi6+8bNGYu3zCZojG2A7tkXU4XdXmOzCqaJGvenF85oWqafvGDvfg1bXd40jTyryx1MG2ZDnvHWGO+UpwpgiLBw8M9wF6xAVK4PI4Ih5bPEXMGdxWY8ZAAFwDxRJHV2NA2PeDGPReSBJbkllxlGLmFbv2+qSslhW6rgx+GAxIb3Nc6S3FvaA0j6UBFrxQ06yVN5iq4si7siWsjohyN1izFuwm1tJx119dY0F5LvUam5PBU7KMtNTkJsPk0vGqXUGkwsuESu8SOYaTppesCzF42haC4Fb9dFFLQjJ10yAuMqXKDpfKHLNXPuldLZWImLfmAwGByEDod9OTo3C4GWbl/hD9OEPmilRIC9Wb9eFNsLNxgDDL3rXrgctIuyGCeCrJlqWB8Gt7W4NXPQ8YDQXnRHv36CynP0i0TvjSmM0jcNIRGtZoVXv1lrngsqrhe3U6FG1YNOszVFhWLtVyJQGWW/TjmzMwIuv3fDXbWtt3NYdOffMX/KzaVxtSALCbQicVz/3V4FRPwBsdjTg66c7oqXm4OtGUiXb1JLsul3tnct3g0+yP/alzAxPDBrPsTv3qSfvqTvmq8PlMbK9IhPUXJrKiyGMekvPVn6S3k6Art7/UhNySmzhcuuHiP8My1wZzcX1Xa1FzTSQitRumhVTViPDaoGDm5kG7PJgce23Kwf03pPocLs8N6MJSUbZaUMXkd4s8DGvYbXhfQ3T+dbEgBJLHh256qjkC1505K/XFK+IMkn6YqmDjFVBN6WipGRVfP64N74Gbu5TpQBbbmAlR2uV5ApAbzOKkvPLBbXcmxNowrXeFKhVNEjcsecWKmhCutRc7FZmP1Nmk9jtEbjMiKGGREyqVJSqAKbY2UNx+Xd8htuKtQ01DF4F2mRv6A5MoUhmY2vQrKj8+ujg+Q1xAdeXHDZYbpVpNjLOEaAMKx7H/fKjCQE1zp1LqAGpMtzsvbGaDIAn2tleVutoBT8W4I36tvnMZWjUqUICpedesEMVlyZVN34CODq+POFO5IHqDxa/oyCJHn+AXnKAjTez/QKGLI0TAGrGVNYyXC1d8Xxtsr1M2PN2i4CQ7H4h4Q3BMxMiqFcWtOObjglodBIpz4iRszJ7Smj6yH5UvG2pH0E8ktQfy/qwId09ldgUHajN7a/g4bX67yzC91wFiFfDGvxMcu2ECliZV0jXtgceJSZQbNkzMuxOPEm+c4BuXRrxIaCNcp2av2ehuf5Qg/ZXv5zClFdWGx7PiHW3W+5cauAr1/aA7oIOTx6zCi+5oEnPW6IlekBRTGCGFbWnd1TPnZpZeEZ+gc8hFwS+JuiF21TcFdJZbRWpZhtX0ZAhAdC5U93ahEUqnaUg6/XoZ5AIeTD3sea4WMVa4T0RjvWCl51fqpRujVZ4k1XVuBhcFgFGvv9Qo9m/ThM2oYjb9VNQWtAvOo0oTljzePkZ4pYio97ffwWNaWbQwarVntCEEcZHgG9lh41M7EQs73FvDzIYKODQhcBSRTFUHfJTwig3U4n//TaC0B8I0omyNvfPgU3jQchxsfuwu6VJQDPfjqFouMVnme9XVbLtByjYE6I+q4bvCEVwLvKtPI3B7kskUhmprWJWhu3AbooFpXam9pX1dNeDpwIWutz4CqR3N0BHjikZE/8+Ps5mhoxssGGXrIxSo+X8UCapohJOjhy4CXHDEdI9k9t5Bpskfxtj/8jEGSXn5NCcK4WFmORxG2v+ykeYWcir9Vfz0fHiR7dPT8yI7BYZOcFmn7VfItqD2i1o3eKB7vzlSQ9jhrkh7XD3lXZEX5S6j777Iw82EFbYQVmyrYdwNf+Bgd/FQQQezliv3GqFeHVk8IwBAfFhXavZv+ibNO7hZ9aLcs/bNlge7BfGhb62UUCMGq3zwhZVDmct86Tnaw9xvKHvxfHr+fzMXzaNe/s7NF9pUTzMpQxvulp6gitzB7NRkzezUe3nKpMJ99dnDUY8TYGFelIFdxuDkzYVJunXe+rRvsCyvgGmpW/CAF84GXfj7qitwXZdhvsZXL01h0MKZ1r28bLhU0/edpmp97sCnG8Pv9DJcgF24LH9L0I02aUd+uE13n8oIodt088Ntuupwm+7hNt1eWIfbdD1Eh9t0D7fpwr/DbbqH23RHDsrDbbpBER1u0z3cptvhmR9/ne5DuxqB+8ROYMu81wf8sIcSlvvEbbfMe9v+kM6iw3FMhe1Du70FwZKzRbYRbRX893X6a/rI0G89kcrvwuELp5Vere+M86Qj5epgCx5swYMteLAFJ8TSdjXgFV5d+RGjf9Z/t0SbwG/lNfShwBJHDu0fLrrnJewGbMLXEPk/2A5VNCVS4XSkknWF2+HTMjrbsW9JWCbXpL7SlzWg/vbm88d6gchhEUWG8EMHy6GKWgyVut1rWT0ugtG8OiD2anMt/xYgCW7cZLZr4+HOGiA4CgLc6j7V4o7QBVwST1nHeBuwmgbEgqZRPDUpmTvtu+SEekcr6vPzDYCF0Adb2iLDZQknQNcOZ5Uno32Og7DArdZ5kjjx1HvTKWu6xMzX1uZBi7o2P3bH9xcU0e9WYU96McOfjcz6L2eolybYk++xzd8Gsno0GiCt+1YcZG0uF6r9ZB4ughUEE76WCkv/TmD3qGVQuZ+7h5VHF00+sCzQ9x7QqhhGDDo/qlVPOUd0lO9q2jW15aRfT4wQoy5jYs9da2FKOPVo+c9cbrMwu3pIy33P1y9/Nq+3Rb+6ETMhREMTcWGXmJviCtfazb1dF+NM1HHhaogiZ8zkm2pWHkAt3R54CV8voB3DZ3sPxiti7pUwZ1YQLb82ZcwK7IGk40LpNeqMj55wTRKHmXWYWfc+s9pn1Xh0n/ENivM0K86x3Rlxk0kRbQKesYkdjZUiscCgi7dq3oa9z4ixt+uWvF+jU5blSs7QO7gbXc7Qp1zpJ3pMHfOYRG1XbXF+taAsVJt7d0f0WyhjD9Wi4H41m27lXJRDgoEdLoZZI8rlzmABsy5UtjszLHBLsPT4EX1ubgU1i0SlV1HE2Yqu7e0Y/YAWwUVqv/XryX9UkVUgmXwHW52pHm8x6D/WNE45W/N46VnG9snwVKwP+oOT/+pPxyp5oTEpWVXz1ePWm5O15yIeOPhtQxBC0ZMV2Dc47TflAhpavAs/2mnlcZuK63ZU9SB6lzOoB4ATFGFF1lzQX+2lUz3gjj99+PDm48lIiKwxowcYPuRW9cKhjCrMYlNhdBSoENkhRob1wXS6rzwt5ubmVv6SeDPzw/b8L++Hz0vNCj6pzky54UItjDZ5jZTI23a3jj3aNX+yBQDqmLHTh2pUgYyP2LhPT7kx8RY0bFCOX3bfQDC/afl383+bP7eGtyunYyxKGs/ROy7sezaUQKJMUA4VZbwvGxxAcjBXyxh2W32Rthz79xwH2LzljoZ2bzUe+jxgwk1kz1jWHEYN5UDCwICGGmYQCArlvSK4ds/kwkPiaXsq0HhmkOoD7Sz3OR2sXS+0RZs2wguGBDGUFy1MB8TkAGuFMJ/6HuWyuE6JRtvws73uUk54dHUneHHKc5tlVsV8g6kWqdsbaABa+yxJGVYx1xQaVI2VTOVe7RX8RkLW2ESqt5pYpamXhfCs2d4xeQCNVoqUkakWgwAiGWE2AhBereBSi7sDlPKYruggRG3r8j5ockZvvVVb4SvCSq17ef72ovz1sgtc8zqyYdGExS1lLepsStF7RWphyoEtcHpSTMAOHDLakDR8NrN7GCfQ9LRtKQzIxrUX9LUYFbYw8CKwxE1wXOUVE7DZeTOzAVccxcSU8iauTkcm6DVNyJrIOTrGDMV0tSKiHEZGXWkpa0I9tS/NuhHhaEMWGxpWTkvOE4LrsU89TfvbhqgN8XoaARMQ9Ya2FLpXabZQWhFPjwMjRdKMC6xXLwih00ickAWRPLkmvTrB4VtwtoipvLpLeTFCYo2uChvqe2vWYYSwCWoLQd4LmKOMeKZo6nbmTojdaO5OXN2oTF0AtZsoYX9C1bZx7clE0HHBwcTLlqj13HUNaxFsniQLvbreBSwTQQFzRLMAXFaCRTnQnoUE8P3M6d3h08S7kaFHjJtUNSLN9TOFcPXH8nHbTk6sySLDUg5PkO87USiMECCODPFixamviNY7w9aU3XremY/673HeGfhkR++MY4/28c4EAKB7r3FVAtmh0lURxb1IaGPDaeBhIfBIY+wNM1+ZSsCag7ct1Av7qYJ4b7ilCC1JhHMJ1wmbiK/UXEZlqjCTGVoSSWMivUq2DY4l+VmFlekrV7w6oVcEXf7fJ++4uMEiJrH+3+UcnROCcCJN+erLQiaXodD2O0xFOm6kIZmQL6jLm+XLhEaN7XUVMfTipRH+HJ2uEOPlhw1+pZSwcGW7lfVxBTxTFoeg11g19/khIE2OAKzVu/KbLXF1yAGqsH3IdKyHzj/6ndbHebAyaYfyNlOXt/lyKG9zKG9zKG9zKG9zKG9zKG9zKG9zSGkOyeuQ0nxIaT6kND9YeZvSKTc+ZGriTAJzRbcJg3xE5uu5gTRD7hqDFk9xNtlx6VkR0kSYoitKBHp0dnrSwldNeExrA7Qc27a04+KqpslYH5enw33sp4+tIv6l7M7fzqU7VXce90/mSYvP3fq6yW3GhSpDCi4tncvuDP+SG9o/s08QmSf9V4V1TlFwKq/CbTL0UUqU0Eu4GjpRp/dW+ouuDUXaYFWW0ja+WcgYafG2RIFFbw9Q77hAlEUCrmnUe22s8AylWFxBrk9xpluW/cZx3AhxQaYEdsqvSQzO/wgztCSIM2jtEXxzNENH9p2jmf7gSDKcyQ1XLfesbLhUi3J2TdsTnq5y+hyC6ypVz+0otyYwlS7ZqLnkfdSmZ5JsC0LNlbFwIjF6C6FjE6miL9WoHDu6YAz5MW5IUhbZ1K2MR5s5+uLOEyOeZrlyp26X/+kF8UQ8ydO2Kus4ISzGItiYfOfesWknwt3CX8TQG0s1Saze1VwhkM2Y/Xa+2y4rjiEzLtVakGqk+Jl5ODpcvPxux1PJChq0e5ZHFchdJ3rUj0XbxOD+/WbixWlKfuXd18S2s/rVaq+C7f0EpZfGVIsxI8iUZowgbZwCDuYyDh3HKWWjotBdXmKDbOFbxgovmzXfSp7p1qRdjWYZpDws3v7dm4s376eOto9DiXNdccMlnhdP509HwTlxGXF8hfDYmMyS7/nb92+PL9C/onefP32APpT/PgrHX+wdTPZG6IdKQ7CrgiBx5W61z/rvlrUAfusudOHIoQcvn2LAFlp5oFKebit44WW4nJ64VdugMoeZbQHUU2eua4pV/u6GHRN3WpqnlymWiojLGbqUCb4m+j/RhibxJXqkLYDPJ+++ffPpHboR5jZm+O3xLGQDX2qDhTKSXA5P7pmqiECjWVDXQTfmmogll9AucyHiJdjfl/YSxBasdzIZG1QnzAc6dwk/EO4i9G6PXGsTV1sLZghcU4wwYkTdcHHlOQaGWi9ROiZIZFCUeZpiFveEb7sFYz7ZXVw/gqjYGlEF2TBIcYfB2tkGF6TER6I7+XxS7VFqjY7F6opMeIWo5npFttWtnxNAf2w9FlOWnoIcILHO9SIp0Q1VmxZQEU4SDcmuaOY0yVvSzuHB8P2NIbDjvqbgjvYJtwxBQF3xlrnaTLmveU9ZfgtUy9zte8+FhZv5cVyi0ni66yq2XCs2MJ8QfFI7cM0EXwuc7m4f7Mx4Un1zViocBwx8ctIVlewHNP1KOSgjfr+8VXAblSmbpePRxHtJpHhP8o2U9ViSnY9y7UyU5qbpSK9G5+c/6nZTZlDJYeeoXZV9BhwnacHUGNfNqqM3UUQyZfyZ7zBNCnfmKbvGCY2P5t47AR4pwUwijGQO4dyrPDHs5iUF+47tGBuTYsPVXJ2T4lg7wMKGFhT46vTKJmKlSJoptMESreDlupw7Q2RHiLQWjmujXuvCzbCUetE8Aoma0OYrsj1qQ9WIJnCDMPDDIKjlVRG17OaqvPQKnOLmYXBhsQmeZSRuho9PjE9LtjRjbRdr85dnhJn8oTQlMcWKJFuHqg104PKHzgCdMYDhCoi9RCrpmmGVi+aAH4Sj+LxwJVtgJnz+imzbGIeCVrp03QBAo0NXLu2U1rNo3pK5YP5NHcMSjmJpj2MZEcnSf/4/KAJgVDzLsBiJu0NGVWOcocEhJHcGy7DtlFZ//M9k6PqjgAbFAQ2JBBohr6HRQGPiXyYTWWsUjI9H5jG/Q4vN2GlF8Q8XUKC5Xrqt60grrha6Y/4VXmkwiz5+uoBTzjzmRDTjcgetDZWACk0twtJm2ecxL7bd3QaSUnWfxEDuFxd/9/P6fY60zfngLdo3OxpltiYAiqkgkeJiuweIYDJC0U+C8x1tcYXFmii7TeGeJ6QOUN5QFW0CR/NeSbc0tLwNE1XNSwd+RA2hZ4ekceM4vFu90zlnGe847YKrzyBBldl4S0LZ2gSLtA6axj5+sLXZxf70pNWQm5whdGIHx00oLWEAXf0dWvEk9sJTGLmplcSo8pIbEriXYACzmKxwnihDoINdcIiDBB5kjDvO9z7IfcNJSwmA3MGYawVQeqwC7D2X7F3VVzOkPXftA3tILZ5795EO4XtHXtJBrBtDbwp36BDO9+gQtccfSmCyolfe+ceFeTIuwMt+1F+rt+SH9jnxCPJDD1JiwkHZp8hEsMMnKpUQ5NwZSTP+PMAPlgHXv5EFBL/+DqsaALi7CKA9NfnKn98do2cvn72wwbRqW3WttaiGQ6WFQ6WFQ6WFFqEdKi2wQ6WF32ylhWVOkxDPiTAB+VFFFg6VHw6VHw6VHw6VHw6VH9Ch8kPH8fmh8oP9d6j8cKj88P995YcqEtiGL2AUT7jJ9SrzGw4yyH4lOFOExe0+ot38of4cdjxA6YR32ji60iDanBw9GIIIclFcW2nJ2/Nj5/ig4Fs0dVi/+X8BAAD//1jKI6U=" + return "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" } diff --git a/filebeat/module/mysql/slowlog/_meta/fields.yml b/filebeat/module/mysql/slowlog/_meta/fields.yml index 442da6c8b11..67efb18cc3d 100644 --- a/filebeat/module/mysql/slowlog/_meta/fields.yml +++ b/filebeat/module/mysql/slowlog/_meta/fields.yml @@ -37,6 +37,11 @@ type: long description: > The unix timestamp taken from the `SET timestamp` query. + - name: bytes_sent + type: long + format: bytes + description: > + The size of the query result. - name: query description: > The slow query. @@ -52,6 +57,14 @@ type: keyword description: > Current authenticated user, used to determine access privileges. Can differ from the value for user. + - name: last_errno + type: keyword + description: > + Last SQL error seen. + - name: killed + type: keyword + description: > + Code of the reason if the query was killed. - name: query_cache_hit type: boolean @@ -65,6 +78,19 @@ type: boolean description: > Whether the query needed temporary tables on disk. + - name: tmp_tables + type: long + description: > + Number of temporary tables created for this query + - name: tmp_disk_tables + type: long + description: > + Number of temporary tables created on disk for this query. + - name: tmp_table_sizes + type: long + format: bytes + description: + Size of temporary tables created for this query. - name: filesort type: boolean description: > @@ -89,3 +115,50 @@ type: long description: > Number of merge passes executed for the query. + - name: log_slow_rate_type + type: keyword + description: > + Type of slow log rate limit, it can be `session` if the rate limit + is applied per session, or `query` if it applies per query. + - name: log_slow_rate_limit + type: keyword + description: > + Slow log rate limit, a value of 100 means that one in a hundred queries + or sessions are being logged. + + # https://www.percona.com/doc/percona-server/5.7/diagnostics/slow_extended.html + - name: innodb + type: group + description: > + Contains fields relative to InnoDB engine + fields: + - name: trx_id + type: keyword + description: > + Transaction ID + - name: io_r_ops + type: long + description: > + Number of page read operations. + - name: io_r_bytes + type: long + format: bytes + description: > + Bytes read during page read operations. + - name: io_r_wait.sec + type: long + description: > + How long it took to read all needed data from storage. + - name: rec_lock_wait.sec + type: long + description: > + How long the query waited for locks. + - name: queue_wait.sec + type: long + description: > + How long the query waited to enter the InnoDB queue and to be executed once + in the queue. + - name: pages_distinct + type: long + description: > + Approximated count of pages accessed to execute the query. diff --git a/filebeat/module/mysql/slowlog/ingest/pipeline.json b/filebeat/module/mysql/slowlog/ingest/pipeline.json index 5bc0e1bddcc..d818d7ddff1 100644 --- a/filebeat/module/mysql/slowlog/ingest/pipeline.json +++ b/filebeat/module/mysql/slowlog/ingest/pipeline.json @@ -4,7 +4,7 @@ "grok": { "field": "message", "patterns":[ - "^# User@Host: %{USER:mysql.slowlog.user}(\\[%{USER:mysql.slowlog.current_user}\\])? @ %{HOSTNAME:mysql.slowlog.host}? \\[%{IP:mysql.slowlog.ip}?\\](\\s*Id:\\s* %{NUMBER:mysql.slowlog.id})?\n(# Thread_id:%{SPACE}%{NUMBER:mysql.slowlog.id}%{METRICSPACE}Schema: %{WORD:mysql.slowlog.schema}?%{METRICSPACE}QC_hit: %{WORD:mysql.slowlog.query_cache_hit}\n)?%{METRICSPACE}Query_time: %{NUMBER:mysql.slowlog.query_time.sec}%{METRICSPACE}Lock_time: %{NUMBER:mysql.slowlog.lock_time.sec}%{METRICSPACE}Rows_sent: %{NUMBER:mysql.slowlog.rows_sent}%{METRICSPACE}Rows_examined: %{NUMBER:mysql.slowlog.rows_examined}%{METRICSPACE}(Rows_affected: %{NUMBER:mysql.slowlog.rows_affected}%{METRICSPACE})?(Full_scan: %{WORD:mysql.slowlog.full_scan}%{METRICSPACE})?(Full_join: %{WORD:mysql.slowlog.full_join}%{METRICSPACE})?(Tmp_table: %{WORD:mysql.slowlog.tmp_table}%{METRICSPACE})?(Tmp_table_on_disk: %{WORD:mysql.slowlog.tmp_table_on_disk}%{METRICSPACE})?(Filesort: %{WORD:mysql.slowlog.filesort}%{METRICSPACE})?(Filesort_on_disk: %{WORD:mysql.slowlog.filesort_on_disk}%{METRICSPACE})?(Merge_passes: %{NUMBER:mysql.slowlog.merge_passes}%{METRICSPACE})?(Priority_queue: %{WORD:mysql.slowlog.priority_queue}%{METRICSPACE})?%{EXPLAIN}?(use %{WORD:mysql.slowlog.schema};\n)?SET timestamp=%{NUMBER:mysql.slowlog.timestamp};\n%{GREEDYMULTILINE:mysql.slowlog.query}" + "^# User@Host: %{USER:mysql.slowlog.user}(\\[%{USER:mysql.slowlog.current_user}\\])? @ %{HOSTNAME:mysql.slowlog.host}? \\[%{IP:mysql.slowlog.ip}?\\]%{METRICSPACE}(Id:%{SPACE}%{NUMBER:mysql.slowlog.id}%{METRICSPACE})?(Thread_id:%{SPACE}%{NUMBER:mysql.slowlog.id}%{METRICSPACE})?(Schema:%{SPACE}%{WORD:mysql.slowlog.schema}?%{METRICSPACE})?(Last_errno: %{NUMBER:mysql.slowlog.last_errno}%{METRICSPACE})?(Killed: %{NUMBER:mysql.slowlog.killed}%{METRICSPACE})?(QC_hit: %{WORD:mysql.slowlog.query_cache_hit}%{METRICSPACE})?(Query_time: %{NUMBER:mysql.slowlog.query_time.sec}%{METRICSPACE})?(Lock_time: %{NUMBER:mysql.slowlog.lock_time.sec}%{METRICSPACE})?(Rows_sent: %{NUMBER:mysql.slowlog.rows_sent}%{METRICSPACE})?(Rows_examined: %{NUMBER:mysql.slowlog.rows_examined}%{METRICSPACE})?(Rows_affected: %{NUMBER:mysql.slowlog.rows_affected}%{METRICSPACE})?(Bytes_sent: %{NUMBER:mysql.slowlog.bytes_sent}%{METRICSPACE})?(Tmp_tables: %{NUMBER:mysql.slowlog.tmp_tables}%{METRICSPACE})?(Tmp_disk_tables: %{NUMBER:mysql.slowlog.tmp_disk_tables}%{METRICSPACE})?(Tmp_table_sizes: %{NUMBER:mysql.slowlog.tmp_table_sizes}%{METRICSPACE})?(InnoDB_trx_id: %{WORD:mysql.slowlog.innodb.trx_id}%{METRICSPACE})?(QC_Hit: %{WORD:mysql.slowlog.query_cache_hit}%{METRICSPACE})?(Full_scan: %{WORD:mysql.slowlog.full_scan}%{METRICSPACE})?(Full_join: %{WORD:mysql.slowlog.full_join}%{METRICSPACE})?(Tmp_table: %{WORD:mysql.slowlog.tmp_table}%{METRICSPACE})?(Tmp_table_on_disk: %{WORD:mysql.slowlog.tmp_table_on_disk}%{METRICSPACE})?(Filesort: %{WORD:mysql.slowlog.filesort}%{METRICSPACE})?(Filesort_on_disk: %{WORD:mysql.slowlog.filesort_on_disk}%{METRICSPACE})?(Merge_passes: %{NUMBER:mysql.slowlog.merge_passes}%{METRICSPACE})?(Priority_queue: %{WORD:mysql.slowlog.priority_queue}%{METRICSPACE})?(No InnoDB statistics available for this query%{METRICSPACE})?(InnoDB_IO_r_ops: %{NUMBER:mysql.slowlog.innodb.io_r_ops}%{METRICSPACE})?(InnoDB_IO_r_bytes: %{NUMBER:mysql.slowlog.innodb.io_r_bytes}%{METRICSPACE})?(InnoDB_IO_r_wait: %{NUMBER:mysql.slowlog.innodb.io_r_wait.sec}%{METRICSPACE})?(InnoDB_rec_lock_wait: %{NUMBER:mysql.slowlog.innodb.rec_lock_wait.sec}%{METRICSPACE})?(InnoDB_queue_wait: %{NUMBER:mysql.slowlog.innodb.queue_wait.sec}%{METRICSPACE})?(InnoDB_pages_distinct: %{NUMBER:mysql.slowlog.innodb.pages_distinct}%{METRICSPACE})?(Log_slow_rate_type: %{WORD:mysql.slowlog.log_slow_rate_type}%{METRICSPACE})?(Log_slow_rate_limit: %{NUMBER:mysql.slowlog.log_slow_rate_limit}%{METRICSPACE})?%{EXPLAIN}?(use %{WORD:mysql.slowlog.schema};\n)?SET timestamp=%{NUMBER:mysql.slowlog.timestamp};\n%{GREEDYMULTILINE:mysql.slowlog.query}" ], "pattern_definitions" : { "GREEDYMULTILINE": "(.|\n)*", @@ -45,13 +45,6 @@ "formats": ["UNIX"], "ignore_failure": true } - }, { - "gsub": { - "field": "mysql.slowlog.query", - "pattern": "\n# Time: [0-9]+ [0-9][0-9]:[0-9][0-9]:[0-9][0-9](\\.[0-9]+)?$", - "replacement": "", - "ignore_failure": true - } }], "on_failure" : [{ "set" : { diff --git a/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log new file mode 100644 index 00000000000..36bdace36c9 --- /dev/null +++ b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log @@ -0,0 +1,36 @@ +# Time: 2019-01-21T06:36:03.868128Z +# User@Host: exporter[exporter] @ localhost [] Id: 14367293 +# Schema: Last_errno: 1370 Killed: 0 +# Query_time: 0.050365 Lock_time: 0.010733 Rows_sent: 16 Rows_examined: 3146 Rows_affected: 0 +# Bytes_sent: 1362 Tmp_tables: 376 Tmp_disk_tables: 71 Tmp_table_sizes: 606208 +# QC_Hit: No Full_scan: Yes Full_join: Yes Tmp_table: Yes Tmp_table_on_disk: Yes +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052563; +SELECT t.table_schema, t.table_name, column_name, `auto_increment`, + pow(2, case data_type + when 'tinyint' then 7 + when 'smallint' then 15 + when 'mediumint' then 23 + when 'int' then 31 + when 'bigint' then 63 + end+(column_type like '% unsigned'))-1 as max_int + FROM information_schema.tables t + JOIN information_schema.columns c + ON BINARY t.table_schema = c.table_schema AND BINARY t.table_name = c.table_name + WHERE c.extra = 'auto_increment' AND t.auto_increment IS NOT NULL; +# Time: 2019-01-21T09:15:36.487710Z +# User@Host: test[test] @ [192.168.123.123] Id: 14370752 +# Schema: test Last_errno: 3170 Killed: 0 +# Query_time: 153.883481 Lock_time: 0.024022 Rows_sent: 0 Rows_examined: 120309968 Rows_affected: 19198 +# Bytes_sent: 62 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# InnoDB_trx_id: 69BB9C7F9 +# QC_Hit: No Full_scan: No Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# InnoDB_IO_r_ops: 9744 InnoDB_IO_r_bytes: 79822848 InnoDB_IO_r_wait: 0.883446 +# InnoDB_rec_lock_wait: 0.003038 InnoDB_queue_wait: 0.000000 +# InnoDB_pages_distinct: 64872 +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548062136; +UPDATE test SET test.state = 'NOT_RELEVANT', modified = now() WHERE test.id IN (26328833, 390, 149386, 152268, 160997, 165304, 168524, 184105, 193022, 194533, 194862, 196469, 196487, 246398, 256594, 260566, 261862, 262342, 263701, 264166, 264607, 267671, 274879, 276704, 280964, 284366, 289323, 289843, 290004, 298999, 301213, 303494, 307920, 311905, 316311, 318404, 330846, 340751, 341433, 357191, 369184, 376876, 378360, 378492, 379470, 382131, 384077, 388368, 396815, 396881, 398272, 398950, 399589, 401299, 408787, 411293, 419109, 425953, 427659, 433183, 437030, 438332, 438386, 447037, 454231, 455257, 455344, 456385, 460420, 460425, 461252, 462338, 462531, 462684, 463104, 463395, 471073, 480069, 480078, 482399, 485205, 487971, 497191, 500261, 501855, 517585, 519310, 519654, 522575, 538425, 543560, 562315, 573934, 583466, 583490, 583502, 597605, 600875, 601546, 603879, 604467, 604619, 757786, 797285, 799155, 802905, 806268, 806798, 811974, 819684, 822629, 826406, 837733, 840128, 840131, 840251, 840277, 840302, 842966, 844294, 844300, 847837, 852503, 854272, 854299, 862983, 881405, 881461, 881467, 881560, 881908, 882435, 882453, 882651, 882711, 882811, 888265, 888286, 914091, 916288, 916316, 917708, 918238, 918887, 919222, 926607, 976977, 977010, 977067, 977131, 977185, 988249, 988276, 988336, 988360, 988504, 990994); diff --git a/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log-expected.json b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log-expected.json new file mode 100644 index 00000000000..d32dbdf8d61 --- /dev/null +++ b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19-innodb.log-expected.json @@ -0,0 +1,88 @@ +[ + { + "@timestamp": "2019-01-21T06:36:03.000Z", + "event.dataset": "mysql.slowlog", + "fileset.module": "mysql", + "fileset.name": "slowlog", + "input.type": "log", + "log.flags": [ + "multiline" + ], + "mysql.slowlog.bytes_sent": "1362", + "mysql.slowlog.current_user": "exporter", + "mysql.slowlog.filesort": false, + "mysql.slowlog.filesort_on_disk": false, + "mysql.slowlog.full_join": true, + "mysql.slowlog.full_scan": true, + "mysql.slowlog.host": "localhost", + "mysql.slowlog.id": "14367293", + "mysql.slowlog.killed": "0", + "mysql.slowlog.last_errno": "1370", + "mysql.slowlog.lock_time.sec": "0.010733", + "mysql.slowlog.log_slow_rate_limit": "100", + "mysql.slowlog.log_slow_rate_type": "query", + "mysql.slowlog.merge_passes": "0", + "mysql.slowlog.query": "SELECT t.table_schema, t.table_name, column_name, `auto_increment`,\n pow(2, case data_type\n when 'tinyint' then 7\n when 'smallint' then 15\n when 'mediumint' then 23\n when 'int' then 31\n when 'bigint' then 63\n end+(column_type like '% unsigned'))-1 as max_int\n FROM information_schema.tables t\n JOIN information_schema.columns c\n ON BINARY t.table_schema = c.table_schema AND BINARY t.table_name = c.table_name\n WHERE c.extra = 'auto_increment' AND t.auto_increment IS NOT NULL;", + "mysql.slowlog.query_cache_hit": false, + "mysql.slowlog.query_time.sec": "0.050365", + "mysql.slowlog.rows_affected": "0", + "mysql.slowlog.rows_examined": "3146", + "mysql.slowlog.rows_sent": "16", + "mysql.slowlog.timestamp": "1548052563", + "mysql.slowlog.tmp_disk_tables": "71", + "mysql.slowlog.tmp_table": true, + "mysql.slowlog.tmp_table_on_disk": true, + "mysql.slowlog.tmp_table_sizes": "606208", + "mysql.slowlog.tmp_tables": "376", + "mysql.slowlog.user": "exporter", + "offset": 36, + "prospector.type": "log" + }, + { + "@timestamp": "2019-01-21T09:15:36.000Z", + "event.dataset": "mysql.slowlog", + "fileset.module": "mysql", + "fileset.name": "slowlog", + "input.type": "log", + "log.flags": [ + "multiline" + ], + "mysql.slowlog.bytes_sent": "62", + "mysql.slowlog.current_user": "test", + "mysql.slowlog.filesort": false, + "mysql.slowlog.filesort_on_disk": false, + "mysql.slowlog.full_join": false, + "mysql.slowlog.full_scan": false, + "mysql.slowlog.id": "14370752", + "mysql.slowlog.innodb.io_r_bytes": "79822848", + "mysql.slowlog.innodb.io_r_ops": "9744", + "mysql.slowlog.innodb.io_r_wait.sec": "0.883446", + "mysql.slowlog.innodb.pages_distinct": "64872", + "mysql.slowlog.innodb.queue_wait.sec": "0.000000", + "mysql.slowlog.innodb.rec_lock_wait.sec": "0.003038", + "mysql.slowlog.innodb.trx_id": "69BB9C7F9", + "mysql.slowlog.ip": "192.168.123.123", + "mysql.slowlog.killed": "0", + "mysql.slowlog.last_errno": "3170", + "mysql.slowlog.lock_time.sec": "0.024022", + "mysql.slowlog.log_slow_rate_limit": "100", + "mysql.slowlog.log_slow_rate_type": "query", + "mysql.slowlog.merge_passes": "0", + "mysql.slowlog.query": "UPDATE test SET test.state = 'NOT_RELEVANT', modified = now() WHERE test.id IN (26328833, 390, 149386, 152268, 160997, 165304, 168524, 184105, 193022, 194533, 194862, 196469, 196487, 246398, 256594, 260566, 261862, 262342, 263701, 264166, 264607, 267671, 274879, 276704, 280964, 284366, 289323, 289843, 290004, 298999, 301213, 303494, 307920, 311905, 316311, 318404, 330846, 340751, 341433, 357191, 369184, 376876, 378360, 378492, 379470, 382131, 384077, 388368, 396815, 396881, 398272, 398950, 399589, 401299, 408787, 411293, 419109, 425953, 427659, 433183, 437030, 438332, 438386, 447037, 454231, 455257, 455344, 456385, 460420, 460425, 461252, 462338, 462531, 462684, 463104, 463395, 471073, 480069, 480078, 482399, 485205, 487971, 497191, 500261, 501855, 517585, 519310, 519654, 522575, 538425, 543560, 562315, 573934, 583466, 583490, 583502, 597605, 600875, 601546, 603879, 604467, 604619, 757786, 797285, 799155, 802905, 806268, 806798, 811974, 819684, 822629, 826406, 837733, 840128, 840131, 840251, 840277, 840302, 842966, 844294, 844300, 847837, 852503, 854272, 854299, 862983, 881405, 881461, 881467, 881560, 881908, 882435, 882453, 882651, 882711, 882811, 888265, 888286, 914091, 916288, 916316, 917708, 918238, 918887, 919222, 926607, 976977, 977010, 977067, 977131, 977185, 988249, 988276, 988336, 988360, 988504, 990994);", + "mysql.slowlog.query_cache_hit": false, + "mysql.slowlog.query_time.sec": "153.883481", + "mysql.slowlog.rows_affected": "19198", + "mysql.slowlog.rows_examined": "120309968", + "mysql.slowlog.rows_sent": "0", + "mysql.slowlog.schema": "test", + "mysql.slowlog.timestamp": "1548062136", + "mysql.slowlog.tmp_disk_tables": "0", + "mysql.slowlog.tmp_table": false, + "mysql.slowlog.tmp_table_on_disk": false, + "mysql.slowlog.tmp_table_sizes": "0", + "mysql.slowlog.tmp_tables": "0", + "mysql.slowlog.user": "test", + "offset": 1311, + "prospector.type": "log" + } +] \ No newline at end of file diff --git a/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19.log b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19.log new file mode 100644 index 00000000000..1572af7ff2c --- /dev/null +++ b/filebeat/module/mysql/slowlog/test/percona-ubuntu-5.7.19.log @@ -0,0 +1,121 @@ +# Time: 2018-11-16T06:25:56.646222Z +# User@Host: check[check] @ localhost [] Id: 1098148226 +# Schema: Last_errno: 0 Killed: 0 +# Query_time: 0.010569 Lock_time: 0.000067 Rows_sent: 1 Rows_examined: 928 Rows_affected: 0 +# Bytes_sent: 180 Tmp_tables: 1 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# QC_Hit: No Full_scan: Yes Full_join: No Tmp_table: Yes Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1542349556; +SHOW GLOBAL STATUS LIKE 'wsrep_local_state'; +# Time: 2018-11-16T13:02:59.046552Z +# User@Host: select[select] @ [192.168.123.123] Id: 1101779094 +# Schema: database Last_errno: 0 Killed: 0 +# Query_time: 0.036112 Lock_time: 0.000165 Rows_sent: 1 Rows_examined: 1 Rows_affected: 0 +# Bytes_sent: 529 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# QC_Hit: No Full_scan: No Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# InnoDB_IO_r_ops: 0 InnoDB_IO_r_bytes: 0 InnoDB_IO_r_wait: 0.000000 +# InnoDB_rec_lock_wait: 0.000000 InnoDB_queue_wait: 0.000000 +# InnoDB_pages_distinct: 3 +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1542373379; +select config.id as id, config.active as active from config where config.id='123456'; +# Time: 2019-01-21T06:33:10.615939Z +# User@Host: exporter[exporter] @ localhost [] Id: 14366748 +# Schema: Last_errno: 0 Killed: 0 +# Query_time: 0.023385 Lock_time: 0.000039 Rows_sent: 390 Rows_examined: 390 Rows_affected: 0 +# Bytes_sent: 20195 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# QC_Hit: No Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052390; +SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT + FROM performance_schema.events_waits_summary_global_by_event_name; +# Time: 2019-01-21T06:34:30.932734Z +# User@Host: test[test] @ [192.168.123.123] Id: 14349788 +# Schema: test Last_errno: 0 Killed: 0 +# Query_time: 0.010278 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 Rows_affected: 0 +# Bytes_sent: 11 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# InnoDB_trx_id: 69B884E82 +# QC_Hit: No Full_scan: No Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052470; +commit; +# Time: 2019-01-21T06:35:33.840616Z +# User@Host: exporter[exporter] @ localhost [] Id: 14367106 +# Schema: Last_errno: 1370 Killed: 0 +# Query_time: 0.014315 Lock_time: 0.000095 Rows_sent: 101 Rows_examined: 101 Rows_affected: 0 +# Bytes_sent: 7131 Tmp_tables: 111 Tmp_disk_tables: 24 Tmp_table_sizes: 114688 +# QC_Hit: No Full_scan: Yes Full_join: No Tmp_table: Yes Tmp_table_on_disk: Yes +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052533; +SELECT + TABLE_SCHEMA, + TABLE_NAME, + TABLE_TYPE, + ifnull(ENGINE, 'NONE') as ENGINE, + ifnull(VERSION, '0') as VERSION, + ifnull(ROW_FORMAT, 'NONE') as ROW_FORMAT, + ifnull(TABLE_ROWS, '0') as TABLE_ROWS, + ifnull(DATA_LENGTH, '0') as DATA_LENGTH, + ifnull(INDEX_LENGTH, '0') as INDEX_LENGTH, + ifnull(DATA_FREE, '0') as DATA_FREE, + ifnull(CREATE_OPTIONS, 'NONE') as CREATE_OPTIONS + FROM information_schema.tables + WHERE TABLE_SCHEMA = 'sys'; +# Time: 2019-01-21T06:36:03.868128Z +# User@Host: exporter[exporter] @ localhost [] Id: 14367293 +# Schema: Last_errno: 1370 Killed: 0 +# Query_time: 0.050365 Lock_time: 0.010733 Rows_sent: 16 Rows_examined: 3146 Rows_affected: 0 +# Bytes_sent: 1362 Tmp_tables: 376 Tmp_disk_tables: 71 Tmp_table_sizes: 606208 +# QC_Hit: No Full_scan: Yes Full_join: Yes Tmp_table: Yes Tmp_table_on_disk: Yes +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# No InnoDB statistics available for this query +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052563; +SELECT t.table_schema, t.table_name, column_name, `auto_increment`, + pow(2, case data_type + when 'tinyint' then 7 + when 'smallint' then 15 + when 'mediumint' then 23 + when 'int' then 31 + when 'bigint' then 63 + end+(column_type like '% unsigned'))-1 as max_int + FROM information_schema.tables t + JOIN information_schema.columns c + ON BINARY t.table_schema = c.table_schema AND BINARY t.table_name = c.table_name + WHERE c.extra = 'auto_increment' AND t.auto_increment IS NOT NULL; +# Time: 2019-01-21T06:36:40.896376Z +# User@Host: test[test] @ [192.168.123.123] Id: 14360213 +# Schema: test Last_errno: 0 Killed: 0 +# Query_time: 32.463767 Lock_time: 0.000084 Rows_sent: 267 Rows_examined: 267 Rows_affected: 0 +# Bytes_sent: 43805 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# QC_Hit: No Full_scan: No Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# InnoDB_IO_r_ops: 2 InnoDB_IO_r_bytes: 16384 InnoDB_IO_r_wait: 0.000213 +# InnoDB_rec_lock_wait: 0.000000 InnoDB_queue_wait: 0.000000 +# InnoDB_pages_distinct: 64832 +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548052600; +select test.id as id, test.modified as mo, test.product as pr from test where (test.state in ('NOT_RELEVANT')) and test.last<='2019-01-21 06:36:08.432' and test.modified<='2019-01-07 06:36:08.432' limit 100000; +# Time: 2019-01-21T09:15:36.487710Z +# User@Host: test[test] @ [192.168.123.123] Id: 14370752 +# Schema: test Last_errno: 3170 Killed: 0 +# Query_time: 153.883481 Lock_time: 0.024022 Rows_sent: 0 Rows_examined: 120309968 Rows_affected: 19198 +# Bytes_sent: 62 Tmp_tables: 0 Tmp_disk_tables: 0 Tmp_table_sizes: 0 +# InnoDB_trx_id: 69BB9C7F9 +# QC_Hit: No Full_scan: No Full_join: No Tmp_table: No Tmp_table_on_disk: No +# Filesort: No Filesort_on_disk: No Merge_passes: 0 +# InnoDB_IO_r_ops: 9744 InnoDB_IO_r_bytes: 79822848 InnoDB_IO_r_wait: 0.883446 +# InnoDB_rec_lock_wait: 0.003038 InnoDB_queue_wait: 0.000000 +# InnoDB_pages_distinct: 64872 +# Log_slow_rate_type: query Log_slow_rate_limit: 100 +SET timestamp=1548062136; +UPDATE test SET test.state = 'NOT_RELEVANT', modified = now() WHERE test.id IN (26328833, 390, 149386, 152268, 160997, 165304, 168524, 184105, 193022, 194533, 194862, 196469, 196487, 246398, 256594, 260566, 261862, 262342, 263701, 264166, 264607, 267671, 274879, 276704, 280964, 284366, 289323, 289843, 290004, 298999, 301213, 303494, 307920, 311905, 316311, 318404, 330846, 340751, 341433, 357191, 369184, 376876, 378360, 378492, 379470, 382131, 384077, 388368, 396815, 396881, 398272, 398950, 399589, 401299, 408787, 411293, 419109, 425953, 427659, 433183, 437030, 438332, 438386, 447037, 454231, 455257, 455344, 456385, 460420, 460425, 461252, 462338, 462531, 462684, 463104, 463395, 471073, 480069, 480078, 482399, 485205, 487971, 497191, 500261, 501855, 517585, 519310, 519654, 522575, 538425, 543560, 562315, 573934, 583466, 583490, 583502, 597605, 600875, 601546, 603879, 604467, 604619, 757786, 797285, 799155, 802905, 806268, 806798, 811974, 819684, 822629, 826406, 837733, 840128, 840131, 840251, 840277, 840302, 842966, 844294, 844300, 847837, 852503, 854272, 854299, 862983, 881405, 881461, 881467, 881560, 881908, 882435, 882453, 882651, 882711, 882811, 888265, 888286, 914091, 916288, 916316, 917708, 918238, 918887, 919222, 926607, 976977, 977010, 977067, 977131, 977185, 988249, 988276, 988336, 988360, 988504, 990994);