diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 18be5cf5af8c..fda61aacbbe3 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -454,6 +454,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add client address to events from http server module {pull}18336[18336] - Remove required for region/zone and make stackdriver a metricset in googlecloud. {issue}16785[16785] {pull}18398[18398] - Add memory metrics into compute googlecloud. {pull}18802[18802] +- Add new fields to HAProxy module. {issue}18523[18523] *Packetbeat* diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index f0038326cd49..8b2364b42220 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -19581,6 +19581,16 @@ type: long Process number. +type: long + +-- + +*`haproxy.info.threads`*:: ++ +-- +Number of threads. + + type: long -- @@ -19602,6 +19612,76 @@ alias to: process.pid -- +type: long + +-- + +*`haproxy.info.stopping`*:: ++ +-- +Number of stopping jobs. + + +type: long + +-- + +*`haproxy.info.jobs`*:: ++ +-- +Number of all jobs. + + +type: long + +-- + +*`haproxy.info.unstoppable_jobs`*:: ++ +-- +Number of unstoppable jobs. + + +type: long + +-- + +*`haproxy.info.listeners`*:: ++ +-- +Number of listeners. + + +type: long + +-- + +*`haproxy.info.dropped_logs`*:: ++ +-- +Number of dropped logs. + + +type: long + +-- + +*`haproxy.info.busy_polling`*:: ++ +-- +Number of busy polling. + + +type: long + +-- + +*`haproxy.info.failed_resolutions`*:: ++ +-- +Number of failed resolutions. + + type: long -- @@ -19637,6 +19717,80 @@ format: bytes -- + + +*`haproxy.info.bytes.out.total`*:: ++ +-- +Number of bytes sent out. + + +type: long + +-- + +*`haproxy.info.bytes.out.rate`*:: ++ +-- +Average bytes output rate. + + +type: long + +-- + + +*`haproxy.info.peers.active`*:: ++ +-- +Number of active peers. + + +type: long + +-- + +*`haproxy.info.peers.connected`*:: ++ +-- +Number of connected peers. + + +type: long + +-- + + +*`haproxy.info.pool.allocated`*:: ++ +-- +Size of the allocated pool. + + +type: long + +-- + +*`haproxy.info.pool.used`*:: ++ +-- +Number of members used from the allocated pool. + + +type: long + +-- + +*`haproxy.info.pool.failed`*:: ++ +-- +Number of failed connections to pool members. + + +type: long + +-- + *`haproxy.info.ulimit_n`*:: + -- @@ -20167,6 +20321,26 @@ type: long -- +*`haproxy.stat.cookie`*:: ++ +-- +Cookie value of the server or the name of the cookie of the backend. + + +type: keyword + +-- + +*`haproxy.stat.load_balancing_algorithm`*:: ++ +-- +Load balancing algorithm. + + +type: keyword + +-- + *`haproxy.stat.connection.total`*:: + @@ -20194,6 +20368,88 @@ type: long Average connect time in ms over the last 1024 requests. +type: long + +-- + +*`haproxy.stat.connection.rate`*:: ++ +-- +Number of connections over the last second. + + +type: long + +-- + +*`haproxy.stat.connection.rate_max`*:: ++ +-- +Highest value of connection.rate. + + +type: long + +-- + +*`haproxy.stat.connection.attempt.total`*:: ++ +-- +Number of connection establishment attempts. + + +type: long + +-- + +*`haproxy.stat.connection.reuse.total`*:: ++ +-- +Number of connection reuses. + + +type: long + +-- + + +*`haproxy.stat.connection.idle.total`*:: ++ +-- +Number of idle connections available for reuse. + + +type: long + +-- + +*`haproxy.stat.connection.idle.limit`*:: ++ +-- +Limit on idle connections available for reuse. + + +type: long + +-- + + +*`haproxy.stat.connection.cache.lookup.total`*:: ++ +-- +Number of cache lookups. + + +type: long + +-- + +*`haproxy.stat.connection.cache.hits`*:: ++ +-- +Number of cache hits. + + type: long -- @@ -20208,6 +20464,26 @@ Requests denied because of security concerns. * For HTTP this is because of a matched http-request or tarpit rule. +type: long + +-- + +*`haproxy.stat.request.denied_by_connection_rules`*:: ++ +-- +Requests denied because of TCP request connection rules. + + +type: long + +-- + +*`haproxy.stat.request.denied_by_session_rules`*:: ++ +-- +Requests denied because of TCP request session rules. + + type: long -- @@ -20301,6 +20577,16 @@ type: long Total number of HTTP requests received. +type: long + +-- + +*`haproxy.stat.request.intercepted`*:: ++ +-- +Number of intercepted requests. + + type: long -- @@ -20404,6 +20690,19 @@ type: long -- + + +*`haproxy.stat.header.rewrite.failed.total`*:: ++ +-- +Number of failed header rewrite warnings. + + +type: long + +-- + + *`haproxy.stat.session.current`*:: + -- @@ -20430,6 +20729,16 @@ type: long Configured session limit. +type: long + +-- + +*`haproxy.stat.session.total`*:: ++ +-- +Number of all sessions. + + type: long -- @@ -20699,6 +21008,16 @@ type: integer Proxy name. +type: keyword + +-- + +*`haproxy.stat.proxy.mode`*:: ++ +-- +Proxy mode (tcp, http, health, unknown). + + type: keyword -- @@ -20729,6 +21048,144 @@ type: integer -- +[float] +=== agent + + + + +*`haproxy.stat.agent.status`*:: ++ +-- +Status of the last health check. One of: + + UNK -> unknown + INI -> initializing + SOCKERR -> socket error + L4OK -> check passed on layer 4, no upper layers enabled + L4TOUT -> layer 1-4 timeout + L4CON -> layer 1-4 connection problem, for example + "Connection refused" (tcp rst) or "No route to host" (icmp) + L7OK -> agent reported "up" + L7STS -> agent reported "fail", "stop" or "down" + + +type: keyword + +-- + +*`haproxy.stat.agent.description`*:: ++ +-- +Human readable version of agent.status. + + +type: keyword + +-- + +*`haproxy.stat.agent.code`*:: ++ +-- +Value reported by agent. + + +type: integer + +-- + +*`haproxy.stat.agent.rise`*:: ++ +-- +Rise value of agent. + + +type: integer + +-- + +*`haproxy.stat.agent.fall`*:: ++ +-- +Fall value of agent. + + +type: integer + +-- + +*`haproxy.stat.agent.health`*:: ++ +-- +Health parameter of agent. Between 0 and `agent.rise`+`agent.fall`-1. + + +type: integer + +-- + +*`haproxy.stat.agent.duration`*:: ++ +-- +Duration of the last check in ms. + + +type: integer + +-- + + +*`haproxy.stat.agent.check.rise`*:: ++ +-- +Rise value of server. + + +type: integer + +-- + +*`haproxy.stat.agent.check.fall`*:: ++ +-- +Fall value of server. + + +type: integer + +-- + +*`haproxy.stat.agent.check.health`*:: ++ +-- +Health parameter of server. Between 0 and `agent.check.rise`+`agent.check.fall`-1. + + +type: integer + +-- + +*`haproxy.stat.agent.check.description`*:: ++ +-- +Human readable version of check. + + +type: keyword + +-- + + +*`haproxy.stat.source.address`*:: ++ +-- +Address of the source. + + +type: text + +-- + [[exported-fields-host-processor]] == Host fields diff --git a/metricbeat/module/haproxy/fields.go b/metricbeat/module/haproxy/fields.go index f5cd629e7734..378af3d10ebb 100644 --- a/metricbeat/module/haproxy/fields.go +++ b/metricbeat/module/haproxy/fields.go @@ -32,5 +32,5 @@ func init() { // AssetHaproxy returns asset data. // This is the base64 encoded gzipped contents of module/haproxy. func AssetHaproxy() string { - return "eJzsXFtv27jyf++nGORlnYXjXjbbAgFaoE13/1s0TYLEwT78cWDQ0jgiQpFakorj/fQHJHWzTF0cW04fjl7aWNLMjzPDuXHsE3jA1RlEJJHiafUKQFPN8AyO/vp8bT45egUQogokTTQV/Aw+vQIAyO7CDxGmDF8BqEhIPQsEX9D7M1gQpsynEhkShWdwT8wzqDXl9+oM/v9IKXY0hqNI6+ToP68AFhRZqM4s8RPgJMYqKHPpVWIISZEm2SceXFVsMWpJAzXJblQ5VLlQvhDFhz42LazM9X/IURJm6ciYmEeAzEWqCyCJFAEqhQUUc62LJr/qIKtACzJrd3PETPD72o0W0Oa6TOM5ShALH8A2BDOexnvCcO0oArdYutjT0MuWMErqQkmIjgrAk803Y3oviUOlZYrPQ/3tawdimfLZPylu0N9WXF7imqiHXW3BSzhNNI1xojDYk5bPUymR64wwUA4KA8HDLnuLMRZyNYnJ02S+0v0N323EM/C91AH1B3micRoDiUXKtdkcDgSkitxb6JYojHSE8MsPjGPyNPvx5Rd4JCxFCAR/RKkxBC3ck8cda0wZjame8T2JOsfPi80tEuSwoAyVkQsY3Pm2aEcWiDiRqPxSrzvIFmh15XhcXJXtPKlzbOfan3Mbd1iLCN7bLUrZHkfJTaT6kOwk0TizNjck19KGOMfAPHpgKzLLfGEzsh7hkKodXKt1hjF5GppdYUguhDSqtIFVh7eESnAqTbXJMVbxaKEJGwDN1NDdEotSbDK8fG5vL56Ba1g5PQ+T32x3RZRH3u0xDYtnOywRkeFsf4D8WTH+k6LSymsce8lglQgeUCuPpvdCvljAQPQTmjQku1sETHd1xclUYb00KrlRrvEe5Q6RMmezkNgcjvfHps1wd+NSWBYq9dxs5hkpzKQpidi35CyzpgRiEGbD6MqvNOX3Mj+rwg6oroMpq4+PEFwjb3ZHfdL2Z+bqD7iataqvz3L7L9nLuiub3jfjzJXNJKYKJ0nQXjqogDAMZwsmSNODedslQRn4c9H+QItuAAke/mcTe2Bs8sFzwfmNrzAuqiwSRBjOmBAPaUsbpkcO2M5iFlNPI/t5DNpd/7+MzmcxxjPbv9s1p9oyIBwqeA+f9tCQ+VxEp2todwkNCAoHpdfobX0yc6uJVhAIxjDQGJoAE+/jUMafY2iiU3/S/oCrpZB1H9ZRwt1aejC6ux7D16u/L8dweXXxZQw/Pn+7nI5BSPe/0SMlx5PJpKvNvER6H/nVt32T2RXfjiSMFkLmblodW2QK5SPKtQfcR53d8FAsuabxrucl60BzojAqTx6OJ/BnBfcYdERV1sSnynbJG7BA0UZfRoJhTmIMXGj7sUpjEIs1EsUrmRh6dN4FR65nZuFeWfi3ddc5TE7XEoHRm495zjWGtx+Lhbz76GBaXf720RXTrxlVGjnKLhXmh4Q/32EdjN5YRSyoVBooV5rwAMfwFpyFGsMYA+EhKAGCdy3UCIkGODN/7XHfO6qWB4z+vLm6nP5x+dXhLpT15fP59/zTQm1CAuEr92K55XrrjfKDHbJ9sUdolHcgEqk+MCTDsR0TI0rPgojwhmTiWfuyPInPvBMoygO0HsMwhLvrk08mCBgdm39PPt1dg5aEK2podmDWkRRaHzCA51feOs4B5FTIfd0jwjJCDoqJpdJEbpYOVAEJNH1Ea+Zc5J56Ub5jnqHcPdW5c11GsJcGZH65WFOeuxq/r4AUCySq4DsGpDpCaYXAcblBKyvNlF2tFY3Ek5CqhOggovzeBa8smGSxy2YpIDERUtsAtkHViLuOr6qCCsIui5LG6YSTBh+/vfC+fc1Dph35eZ1BogvHivJ7o17kZM46wT3jzLE1w4MDHPucp3HKiDHdioa269xL1JK2NHOfD+5yw6ZLZKDFuo1nMPocodEYJ+TRB2pXxJ8fURonk+GEfOwkViAM0MKxvn3z7rRs57fbVfbY/o0qRD6M4m6yhWUcYI4BSRVmgSaVVK+MiAKUrRbmrl+tz5meXzt3Q1WVHIHYuCYMQQfJSSYpQ1sb/y9ThpNWsn9Npx10I61LwiZ2EJnQOulGEdshrPAAp6SOUWlSvipjw1Nne95LWCwKYjnxJdWRSHW574hS9J732nSZIIY9cnTBWSxqYu8BD6UUcqe+UPtWyBhM4FbEWIQcoRSdMwRrdgqIxI4+nTFbJJKtQKOMKXdTn7a/YAgGjCLXY5jjQkiXxuWWGxFj3ybXae6Q/goSSeig1ok2vuJuW0/XPFFUPBYwoTBsDpXlC49EUpEqmJPSquugmvd2vmwTGdyObU4uYM3X5tnOgSJaFWiVuY1vXNhsze02u6W9VDvysY7cy09ySR0MsiQrK/Yewiu1OhlsP5USLIxCR0QD8kCkXKM0mHlmw1quTAanhZdUEaTLTKKn23SdFi9Re1sTbVNswlhOrFRSwlJlC+ZKMuPEBVz4NxBRSgSU6MwHA4GESE2DlJGi6TVSaRABcQBzphF5NALgfgG4mqWrRQYDTbeV10sNtdWv0rZsWlAYWIJ5l6aWxSEjiXFn7qbfGw03s1a/Nkdwm5bx4nNmTRAlBkgfvZ66ITVWieCq//lK79z4IA7MgS9yg2mlFcwDloZY998h0cTvdiThaoFSAZkLOwc+X1X9/Cj7TsvE+KZJ5uyyR4/9husyFRuAMvfUnZ/8CktJdb4iMGVaEayz4SgYLQX/RcPcVEnGY4f1loyBeNxAfkEoSyUCSRJmffuCMm2WrUWW7tQM4qcoBwtN96sH837x9Py6j1PuKOO2PoirXjcZ8n6l3EZJ5aXZXWaZ4sq2oI6ERQdBhMGDPcE96jNLqLUvDh1yBvvt09DePnOcuXpsXvD26QkCEbYVplWQ714E5LvtQP72IiB/2w7k6YuAPN0O5O8vAvL37UDagPMCMF2gM0AVjBIptAgEc3HM54O92ci2M5q9k5Hh2kdlNpLxKI4AXnx+nFcOp3pDah9N3KHNZr9gnEqb7Fs0jtVQNdN+SqItprT6VEW5HrYviFrX0f31ob2so6JCy9FkpxyXvlX1BL7HIbltqrr+oL1eyuZSvX3UfgbSvENK0DGw0FNI2cBS1lO1ZhghYTpyK53AFTe5Zmdn9e7yu8P8CVL+wMWyqTf57fJb/iDlVFPC6L+0MSbdXp1//+PmxjydFUA2qDQ8fXF69T2jbdFDQpTZUMbfkBVKOB0DF5AmRu/2EwUalTalUHZK2Uh5enU3tZQdpbcnpx1d24vT86tLqL1S6VolUswZxmNbrOATiRPW5I/K6+i8JCBxkSoMj2CkgwSk0sc26b8UIEWq0RR1kVD6CEY0iBN/TQhw8b5DZu8bX6yJ5D2Mbm8vjrvE8v7m9hrWXqP8kTAaloXeCaznEE2kPnRA/9Dy4nn1ReMB7EwGYWy1SWZNR3D65tRmPZ3KCqkyNnUi+Mnpm9NGLDUxfoCRSbFe3/6YXncK80NNmB92EObt9Had1HqLZV0INgus5sTN6ZcImyP483OKCwvy95MPlsEY6ALII6HMSLxP2Z+62bQBkE3LNoVtrlMNWogHsx8XlFMVNbjaHqW5fXxiXh0mGkxdEyhlujki9Ia5IHSIHmiZURkGGDpYfdJbco9ct0tvj9+ds+CGLTrswp2RZbJYRpRhfTwoTfpsCH/I3h/aYhqunIDzH7RXx3m9NCsnciWpvIe5Nt4LczSx3axtbEqJyKbbxJ+b1KaAq7St5yNBlB90deSI7ng1axB7k8UdBw5Doklz17p+vNtVd5sl7ZrSuqt3Tb4xgtYlmh7igWwOF6WdGk45/ceeBSgaIhA3otanI+zX254A9tVhfqJaPdXwN4Szw47QhJy1c4o8fGfHyX1Wbo80h1547UzX+S8isZgVjZFwe/JsbugIV+aul6iLNCs7/R0Qnp+AeUYemCAhzAkjPGjcv1D7Bpu3t3AYUTj2LV888Due7Ld/NpK8oSvUhil06AogbaPfLeiq18axc5azuh98WrhZEOsVC+H0UH/TEDv0sIDBF4WxHcgp3P02C5uvXHXzE+jLLcaafI7KrscuuVwUjM6v715/+dv1nXrNWeSO7+XXWGuW28UuUZZK65yLrv6Y4jr+AbfzQMHvzoVku6Tmn+GrIvF8Swf2U+q47xMa+n29a/NPAg6niT3/tkP1qnR07cqyvu4oJk/27+PaZEH2HQ4d2bH+RWN2XoyR5oRMKv8GRnlU56L/Tu6cLthJAqbaJdmQgUP67Ilzz3/+GwAA//9AvqeT" + return "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" } diff --git a/metricbeat/module/haproxy/haproxy.go b/metricbeat/module/haproxy/haproxy.go index 390c5a737e85..c14c681bd80a 100644 --- a/metricbeat/module/haproxy/haproxy.go +++ b/metricbeat/module/haproxy/haproxy.go @@ -40,68 +40,96 @@ var HostParser = parse.URLHostParserBuilder{DefaultScheme: "tcp"}.Build() // Stat is an instance of the HAProxy stat information type Stat struct { - PxName string `csv:"# pxname"` - SvName string `csv:"svname"` - Qcur string `csv:"qcur"` - Qmax string `csv:"qmax"` - Scur string `csv:"scur"` - Smax string `csv:"smax"` - Slim string `csv:"slim"` - Stot string `csv:"stot"` - Bin string `csv:"bin"` - Bout string `csv:"bout"` - Dreq string `csv:"dreq"` - Dresp string `csv:"dresp"` - Ereq string `csv:"ereq"` - Econ string `csv:"econ"` - Eresp string `csv:"eresp"` - Wretr string `csv:"wretr"` - Wredis string `csv:"wredis"` - Status string `csv:"status"` - Weight string `csv:"weight"` - Act string `csv:"act"` - Bck string `csv:"bck"` - ChkFail string `csv:"chkfail"` - ChkDown string `csv:"chkdown"` - Lastchg string `csv:"lastchg"` - Downtime string `csv:"downtime"` - Qlimit string `csv:"qlimit"` - Pid string `csv:"pid"` - Iid string `csv:"iid"` - Sid string `csv:"sid"` - Throttle string `csv:"throttle"` - Lbtot string `csv:"lbtot"` - Tracked string `csv:"tracked"` - Type string `csv:"type"` - Rate string `csv:"rate"` - RateLim string `csv:"rate_lim"` - RateMax string `csv:"rate_max"` - CheckStatus string `csv:"check_status"` - CheckCode string `csv:"check_code"` - CheckDuration string `csv:"check_duration"` - Hrsp1xx string `csv:"hrsp_1xx"` - Hrsp2xx string `csv:"hrsp_2xx"` - Hrsp3xx string `csv:"hrsp_3xx"` - Hrsp4xx string `csv:"hrsp_4xx"` - Hrsp5xx string `csv:"hrsp_5xx"` - HrspOther string `csv:"hrsp_other"` - Hanafail string `csv:"hanafail"` - ReqRate string `csv:"req_rate"` - ReqRateMax string `csv:"req_rate_max"` - ReqTot string `csv:"req_tot"` - CliAbrt string `csv:"cli_abrt"` - SrvAbrt string `csv:"srv_abrt"` - CompIn string `csv:"comp_in"` - CompOut string `csv:"comp_out"` - CompByp string `csv:"comp_byp"` - CompRsp string `csv:"comp_rsp"` - LastSess string `csv:"lastsess"` - LastChk string `csv:"last_chk"` - LastAgt string `csv:"last_agt"` - Qtime string `csv:"qtime"` - Ctime string `csv:"ctime"` - Rtime string `csv:"rtime"` - Ttime string `csv:"ttime"` + PxName string `csv:"# pxname"` + SvName string `csv:"svname"` + Qcur string `csv:"qcur"` + Qmax string `csv:"qmax"` + Scur string `csv:"scur"` + Smax string `csv:"smax"` + Slim string `csv:"slim"` + Stot string `csv:"stot"` + Bin string `csv:"bin"` + Bout string `csv:"bout"` + Dreq string `csv:"dreq"` + Dresp string `csv:"dresp"` + Ereq string `csv:"ereq"` + Econ string `csv:"econ"` + Eresp string `csv:"eresp"` + Wretr string `csv:"wretr"` + Wredis string `csv:"wredis"` + Status string `csv:"status"` + Weight string `csv:"weight"` + Act string `csv:"act"` + Bck string `csv:"bck"` + ChkFail string `csv:"chkfail"` + ChkDown string `csv:"chkdown"` + Lastchg string `csv:"lastchg"` + Downtime string `csv:"downtime"` + Qlimit string `csv:"qlimit"` + Pid string `csv:"pid"` + Iid string `csv:"iid"` + Sid string `csv:"sid"` + Throttle string `csv:"throttle"` + Lbtot string `csv:"lbtot"` + Tracked string `csv:"tracked"` + Type string `csv:"type"` + Rate string `csv:"rate"` + RateLim string `csv:"rate_lim"` + RateMax string `csv:"rate_max"` + CheckStatus string `csv:"check_status"` + CheckCode string `csv:"check_code"` + CheckDuration string `csv:"check_duration"` + Hrsp1xx string `csv:"hrsp_1xx"` + Hrsp2xx string `csv:"hrsp_2xx"` + Hrsp3xx string `csv:"hrsp_3xx"` + Hrsp4xx string `csv:"hrsp_4xx"` + Hrsp5xx string `csv:"hrsp_5xx"` + HrspOther string `csv:"hrsp_other"` + Hanafail string `csv:"hanafail"` + ReqRate string `csv:"req_rate"` + ReqRateMax string `csv:"req_rate_max"` + ReqTot string `csv:"req_tot"` + CliAbrt string `csv:"cli_abrt"` + SrvAbrt string `csv:"srv_abrt"` + CompIn string `csv:"comp_in"` + CompOut string `csv:"comp_out"` + CompByp string `csv:"comp_byp"` + CompRsp string `csv:"comp_rsp"` + LastSess string `csv:"lastsess"` + LastChk string `csv:"last_chk"` + LastAgt string `csv:"last_agt"` + Qtime string `csv:"qtime"` + Ctime string `csv:"ctime"` + Rtime string `csv:"rtime"` + Ttime string `csv:"ttime"` + AgentStatus string `csv:"agent_status"` + AgentCode string `csv:"agent_code"` + AgentDuration string `csv:"agent_duration"` + CheckDescription string `csv:"check_desc"` + AgentDescription string `csv:"agent_desc"` + CheckRise string `csv:"check_rise"` + CheckFail string `csv:"check_fall"` + CheckHealth string `csv:"check_health"` + AgentRise string `csv:"agent_rise"` + AgentFall string `csv:"agent_fall"` + AgentHealth string `csv:"agent_health"` + Addr string `csv:"addr"` + Cookie string `csv:"cookie"` + Mode string `csv:"mode"` + Algo string `csv:"algo"` + ConnRate string `csv:"conn_rate"` + ConnRateMax string `csv:"conn_rate_max"` + ConnTot string `csv:"conn_tot"` + Intercepted string `csv:"intercepted"` + Dcon string `csv:"dcon"` + Dses string `csv:"dses"` + Wrew string `csv:"wrew"` + Connect string `csv:"connect"` + Reuse string `csv:"reuse"` + CacheLookups string `csv:"cache_lookups"` + CacheHits string `csv:"cache_hits"` + SrvIcur string `csv:"srv_icur"` + SrcIlim string `csv:"src_ilim"` } // Info represents the show info response from HAProxy @@ -109,12 +137,16 @@ type Info struct { Name string `mapstructure:"Name"` Version string `mapstructure:"Version"` ReleaseDate string `mapstructure:"Release_date"` + Nbthread string `mapstructure:"Nbthread"` Nbproc string `mapstructure:"Nbproc"` ProcessNum string `mapstructure:"Process_num"` Pid string `mapstructure:"Pid"` Uptime string `mapstructure:"Uptime"` UptimeSec string `mapstructure:"Uptime_sec"` MemMax string `mapstructure:"Memmax_MB"` + PoolAlloc string `mapstructure:"PoolAlloc_MB"` + PoolUsed string `mapstructure:"PoolUsed_MB"` + PoolFailed string `mapstructure:"PoolFailed"` UlimitN string `mapstructure:"Ulimit-n"` Maxsock string `mapstructure:"Maxsock"` Maxconn string `mapstructure:"Maxconn"` @@ -154,6 +186,17 @@ type Info struct { IdlePct string `mapstructure:"Idle_pct"` Node string `mapstructure:"Node"` Description string `mapstructure:"Description"` + Stopping string `mapstructure:"Stopping,omitempty"` + Jobs string `mapstructure:"Jobs,omitempty"` + UnstoppableJobs string `mapstructure:"Unstoppable Jobs,omitempty"` + Listeners string `mapstructure:"Listeners,omitempty"` + ActivePeers string `mapstructure:"ActivePeers,omitempty"` + ConnectedPeers string `mapstructure:"ConnectedPeers,omitempty"` + DroppedLogs string `mapstructure:"DroppedLogs,omitempty"` + BusyPolling string `mapstructure:"BusyPolling,omitempty"` + FailedResolutions string `mapstructure:"FailedResolutions,omitempty"` + TotalBytesOut string `mapstructure:"TotalBytesOut,omitempty"` + BytesOutRate string `mapstructure:"BytesOutRate,omitempty"` } // Client is an instance of the HAProxy client diff --git a/metricbeat/module/haproxy/info/_meta/fields.yml b/metricbeat/module/haproxy/info/_meta/fields.yml index f023cdd3efcb..ba7ce5a88f1a 100644 --- a/metricbeat/module/haproxy/info/_meta/fields.yml +++ b/metricbeat/module/haproxy/info/_meta/fields.yml @@ -14,6 +14,11 @@ description: > Process number. + - name: threads + type: long + description: > + Number of threads. + - name: pid type: alias path: process.pid @@ -25,6 +30,41 @@ type: long description: > + - name: stopping + type: long + description: > + Number of stopping jobs. + + - name: jobs + type: long + description: > + Number of all jobs. + + - name: unstoppable_jobs + type: long + description: > + Number of unstoppable jobs. + + - name: listeners + type: long + description: > + Number of listeners. + + - name: dropped_logs + type: long + description: > + Number of dropped logs. + + - name: busy_polling + type: long + description: > + Number of busy polling. + + - name: failed_resolutions + type: long + description: > + Number of failed resolutions. + - name: tasks type: long description: > @@ -40,6 +80,61 @@ description: > Maximum amount of memory usage in bytes (the 'Memmax_MB' value converted to bytes). + + - name: bytes + type: group + fields: + + - name: out + type: group + fields: + + - name: total + type: long + description: > + Number of bytes sent out. + + - name: rate + type: long + description: > + Average bytes output rate. + + + - name: peers + type: group + fields: + + - name: active + type: long + description: > + Number of active peers. + + - name: connected + type: long + description: > + Number of connected peers. + + + - name: pool + type: group + fields: + + - name: allocated + type: long + description: > + Size of the allocated pool. + + - name: used + type: long + description: > + Number of members used from the allocated pool. + + - name: failed + type: long + description: > + Number of failed connections to pool members. + + - name: ulimit_n type: long description: > diff --git a/metricbeat/module/haproxy/info/data.go b/metricbeat/module/haproxy/info/data.go index 1503945cb447..948370227890 100644 --- a/metricbeat/module/haproxy/info/data.go +++ b/metricbeat/module/haproxy/info/data.go @@ -33,12 +33,20 @@ import ( var ( schema = s.Schema{ - "processes": c.Int("Nbproc"), - "process_num": c.Int("ProcessNum"), - "pid": c.Int("Pid"), - "ulimit_n": c.Int("UlimitN"), - "tasks": c.Int("Tasks"), - "run_queue": c.Int("RunQueue"), + "threads": c.Int("Nbthread", s.Optional), + "processes": c.Int("Nbproc"), + "process_num": c.Int("ProcessNum"), + "pid": c.Int("Pid"), + "ulimit_n": c.Int("UlimitN"), + "tasks": c.Int("Tasks"), + "run_queue": c.Int("RunQueue"), + "stopping": c.Int("Stopping"), + "jobs": c.Int("Jobs"), + "unstoppable_jobs": c.Int("UnstoppableJobs", s.Optional), + "listeners": c.Int("Listeners", s.Optional), + "dropped_logs": c.Int("DroppedLogs", s.Optional), + "busy_polling": c.Int("BusyPolling", s.Optional), + "failed_resolutions": c.Int("FailedResolutions", s.Optional), "uptime": s.Object{ "sec": c.Int("UptimeSec"), @@ -50,6 +58,24 @@ var ( }, }, + "peers": s.Object{ + "active": c.Int("ActivePeers", s.Optional), + "connected": c.Int("ConnectedPeers", s.Optional), + }, + + "bytes": s.Object{ + "out": s.Object{ + "total": c.Int("TotalBytesOut", s.Optional), + "rate": c.Int("BytesOutRate", s.Optional), + }, + }, + + "pool": s.Object{ + "allocated": c.Int("PoolAlloc", s.Optional), + "used": c.Int("PoolUsed", s.Optional), + "failed": c.Int("PoolFailed", s.Optional), + }, + "compress": s.Object{ "bps": s.Object{ "in": c.Int("CompressBpsIn"), @@ -160,7 +186,11 @@ func eventMapping(info *haproxy.Info, r mb.ReporterV2) (mb.Event, error) { } source[typeOfT.Field(i).Name] = strconv.Itoa((val * 1024 * 1024)) } else { - source[typeOfT.Field(i).Name] = f.Interface() + if f.Interface().(string) == "" { + source[typeOfT.Field(i).Name] = "0" + } else { + source[typeOfT.Field(i).Name] = f.Interface() + } } } diff --git a/metricbeat/module/haproxy/stat/_meta/fields.yml b/metricbeat/module/haproxy/stat/_meta/fields.yml index 5e199a36ef73..9ac49ba706a9 100644 --- a/metricbeat/module/haproxy/stat/_meta/fields.yml +++ b/metricbeat/module/haproxy/stat/_meta/fields.yml @@ -74,6 +74,16 @@ description: > ID of the proxy/server if tracking is enabled. + - name: cookie + type: keyword + description: > + Cookie value of the server or the name of the cookie of the backend. + + - name: load_balancing_algorithm + type: keyword + description: > + Load balancing algorithm. + - name: connection type: group fields: @@ -93,6 +103,54 @@ description: > Average connect time in ms over the last 1024 requests. + - name: rate + type: long + description: > + Number of connections over the last second. + + - name: rate_max + type: long + description: > + Highest value of connection.rate. + + - name: attempt.total + type: long + description: > + Number of connection establishment attempts. + + - name: reuse.total + type: long + description: > + Number of connection reuses. + + - name: idle + type: group + fields: + + - name: total + type: long + description: > + Number of idle connections available for reuse. + + - name: limit + type: long + description: > + Limit on idle connections available for reuse. + + - name: cache + type: group + fields: + + - name: lookup.total + type: long + description: > + Number of cache lookups. + + - name: hits + type: long + description: > + Number of cache hits. + - name: request type: group fields: @@ -105,6 +163,16 @@ * For TCP this is because of a matched tcp-request content rule. * For HTTP this is because of a matched http-request or tarpit rule. + - name: denied_by_connection_rules + type: long + description: > + Requests denied because of TCP request connection rules. + + - name: denied_by_session_rules + type: long + description: > + Requests denied because of TCP request session rules. + - name: queued.current type: long description: > @@ -162,6 +230,11 @@ description: > Total number of HTTP requests received. + - name: intercepted + type: long + description: > + Number of intercepted requests. + - name: response type: group @@ -225,6 +298,24 @@ HTTP responses with other codes (protocol error). + - name: header + type: group + fields: + + - name: rewrite + type: group + fields: + + - name: failed + type: group + fields: + + - name: total + type: long + description: > + Number of failed header rewrite warnings. + + - name: session type: group fields: @@ -244,6 +335,11 @@ description: > Configured session limit. + - name: total + type: long + description: > + Number of all sessions. + - name: rate type: group fields: @@ -404,6 +500,11 @@ description: > Proxy name. + - name: mode + type: keyword + description: > + Proxy mode (tcp, http, health, unknown). + - name: queue type: group @@ -422,5 +523,89 @@ The average queue time in ms over the last 1024 requests. + - name: agent + type: group + description: > + + fields: + - name: status + type: keyword + description: > + Status of the last health check. One of: + + UNK -> unknown + INI -> initializing + SOCKERR -> socket error + L4OK -> check passed on layer 4, no upper layers enabled + L4TOUT -> layer 1-4 timeout + L4CON -> layer 1-4 connection problem, for example + "Connection refused" (tcp rst) or "No route to host" (icmp) + L7OK -> agent reported "up" + L7STS -> agent reported "fail", "stop" or "down" + + - name: description + type: keyword + description: > + Human readable version of agent.status. + + - name: code + type: integer + description: > + Value reported by agent. + + - name: rise + type: integer + description: > + Rise value of agent. + + - name: fall + type: integer + description: > + Fall value of agent. + + - name: health + type: integer + description: > + Health parameter of agent. Between 0 and `agent.rise`+`agent.fall`-1. + + - name: duration + type: integer + description: > + Duration of the last check in ms. + + - name: check + type: group + fields: + + - name: rise + type: integer + description: > + Rise value of server. + + - name: fall + type: integer + description: > + Fall value of server. + + - name: health + type: integer + description: > + Health parameter of server. Between 0 and `agent.check.rise`+`agent.check.fall`-1. + + - name: description + type: keyword + description: > + Human readable version of check. + + + - name: source + type: group + fields: + + - name: address + type: text + description: > + Address of the source. + diff --git a/metricbeat/module/haproxy/stat/data.go b/metricbeat/module/haproxy/stat/data.go index 5911180be4fb..f0657a9b4330 100644 --- a/metricbeat/module/haproxy/stat/data.go +++ b/metricbeat/module/haproxy/stat/data.go @@ -29,37 +29,54 @@ import ( var ( schema = s.Schema{ - "status": c.Str("Status"), - "weight": c.Int("Weight", s.Optional), - "downtime": c.Int("Downtime", s.Optional), - "component_type": c.Int("Type"), - "process_id": c.Int("Pid"), - "service_name": c.Str("SvName"), - "in.bytes": c.Int("Bin"), - "out.bytes": c.Int("Bout"), - "last_change": c.Int("Lastchg", s.Optional), - "throttle.pct": c.Int("Throttle", s.Optional), - "selected.total": c.Int("Lbtot", s.Optional), - "tracked.id": c.Int("Tracked", s.Optional), + "status": c.Str("Status"), + "weight": c.Int("Weight", s.Optional), + "downtime": c.Int("Downtime", s.Optional), + "component_type": c.Int("Type"), + "process_id": c.Int("Pid"), + "service_name": c.Str("SvName"), + "in.bytes": c.Int("Bin"), + "out.bytes": c.Int("Bout"), + "last_change": c.Int("Lastchg", s.Optional), + "throttle.pct": c.Int("Throttle", s.Optional), + "selected.total": c.Int("Lbtot", s.Optional), + "tracked.id": c.Int("Tracked", s.Optional), + "cookie": c.Str("Cookie", s.Optional), + "load_balancing_algorithm": c.Str("Algo", s.Optional), "connection": s.Object{ - "total": c.Int("Stot"), - "retried": c.Int("Wretr", s.Optional), - "time.avg": c.Int("Ctime", s.Optional), + "retried": c.Int("Wretr", s.Optional), + "time.avg": c.Int("Ctime", s.Optional), + "rate": c.Int("ConnRate", s.Optional), + "rate_max": c.Int("ConnRateMax", s.Optional), + "total": c.Int("ConnTot", s.Optional), + "attempt.total": c.Int("Connect", s.Optional), + "reuse.total": c.Int("Reuse", s.Optional), + "idle": s.Object{ + "total": c.Int("SrvIcur", s.Optional), + "limit": c.Int("SrcIlim", s.Optional), + }, + "cache": s.Object{ + "lookup.total": c.Int("CacheLookups", s.Optional), + "hits": c.Int("CacheHits", s.Optional), + }, }, "request": s.Object{ - "denied": c.Int("Dreq", s.Optional), - "queued.current": c.Int("Qcur", s.Optional), - "queued.max": c.Int("Qmax", s.Optional), - "errors": c.Int("Ereq", s.Optional), - "redispatched": c.Int("Wredis", s.Optional), - "connection.errors": c.Int("Econ", s.Optional), + "denied": c.Int("Dreq", s.Optional), + "denied_by_connection_rules": c.Int("Dcon", s.Optional), + "denied_by_session_rules": c.Int("Dses", s.Optional), + "queued.current": c.Int("Qcur", s.Optional), + "queued.max": c.Int("Qmax", s.Optional), + "errors": c.Int("Ereq", s.Optional), + "redispatched": c.Int("Wredis", s.Optional), + "connection.errors": c.Int("Econ", s.Optional), "rate": s.Object{ "value": c.Int("ReqRate", s.Optional), "max": c.Int("ReqRateMax", s.Optional), }, - "total": c.Int("ReqTot", s.Optional), + "total": c.Int("ReqTot", s.Optional), + "intercepted": c.Int("Intercepted", s.Optional), }, "response": s.Object{ @@ -76,10 +93,19 @@ var ( }, }, + "header": s.Object{ + "rewrite": s.Object{ + "failed": s.Object{ + "total": c.Int("Wrew", s.Optional), + }, + }, + }, + "session": s.Object{ "current": c.Int("Scur"), "max": c.Int("Smax"), "limit": c.Int("Slim", s.Optional), + "total": c.Int("Stot"), "rate": s.Object{ "value": c.Int("Rate", s.Optional), "limit": c.Int("RateLim", s.Optional), @@ -117,12 +143,33 @@ var ( "proxy": s.Object{ "id": c.Int("Iid"), "name": c.Str("PxName"), + "mode": c.Str("Mode", s.Optional), }, "queue": s.Object{ "time.avg": c.Int("Qtime", s.Optional), "limit": c.Int("Qlimit", s.Optional), }, + + "agent": s.Object{ + "status": c.Str("AgentStatus", s.Optional), + "code": c.Int("AgentCode", s.Optional), + "description": c.Str("AgentDescription", s.Optional), + "rise": c.Str("AgentRise", s.Optional), + "fall": c.Str("AgentFall", s.Optional), + "health": c.Str("AgentHealth", s.Optional), + "duration": c.Int("AgentDuration", s.Optional), + "check": s.Object{ + "description": c.Str("CheckDescription", s.Optional), + "rise": c.Str("CheckRise", s.Optional), + "fall": c.Str("CheckFall", s.Optional), + "health": c.Str("CheckHealth", s.Optional), + }, + }, + + "source": s.Object{ + "address": c.Str("Addr", s.Optional), + }, } )