Fix RabbitMQ regression in #9383 (#9443)

This commit is contained in:
Sven Rebhan 2021-06-29 23:01:46 +02:00 committed by GitHub
parent eba6191239
commit e2ab2188db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 1683 additions and 215 deletions

View File

@ -48,6 +48,12 @@ For additional details reference the [RabbitMQ Management HTTP Stats][management
## specified, metrics for all exchanges are gathered.
# exchanges = ["telegraf"]
## Metrics to include and exclude. Globs accepted.
## Note that an empty array for both will include all metrics
## Currently the following metrics are supported: "exchange", "federation", "node", "overview", "queue"
# metric_include = []
# metric_exclude = []
## Queues to include and exclude. Globs accepted.
## Note that an empty array for both will include all queues
# queue_name_include = []

View File

@ -3,6 +3,7 @@ package rabbitmq
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
"sync"
@ -47,15 +48,18 @@ type RabbitMQ struct {
Queues []string `toml:"queues"`
Exchanges []string `toml:"exchanges"`
MetricInclude []string `toml:"metric_include"`
MetricExclude []string `toml:"metric_exclude"`
QueueInclude []string `toml:"queue_name_include"`
QueueExclude []string `toml:"queue_name_exclude"`
FederationUpstreamInclude []string `toml:"federation_upstream_include"`
FederationUpstreamExclude []string `toml:"federation_upstream_exclude"`
Client *http.Client `toml:"-"`
Log telegraf.Logger `toml:"-"`
filterCreated bool
client *http.Client
excludeEveryQueue bool
metricFilter filter.Filter
queueFilter filter.Filter
upstreamFilter filter.Filter
}
@ -163,11 +167,11 @@ type Node struct {
GcNumDetails Details `json:"gc_num_details"`
GcBytesReclaimed int64 `json:"gc_bytes_reclaimed"`
GcBytesReclaimedDetails Details `json:"gc_bytes_reclaimed_details"`
IoReadAvgTime int64 `json:"io_read_avg_time"`
IoReadAvgTime float64 `json:"io_read_avg_time"`
IoReadAvgTimeDetails Details `json:"io_read_avg_time_details"`
IoReadBytes int64 `json:"io_read_bytes"`
IoReadBytesDetails Details `json:"io_read_bytes_details"`
IoWriteAvgTime int64 `json:"io_write_avg_time"`
IoWriteAvgTime float64 `json:"io_write_avg_time"`
IoWriteAvgTimeDetails Details `json:"io_write_avg_time_details"`
IoWriteBytes int64 `json:"io_write_bytes"`
IoWriteBytesDetails Details `json:"io_write_bytes_details"`
@ -226,32 +230,44 @@ type MemoryResponse struct {
// Memory details
type Memory struct {
ConnectionReaders int64 `json:"connection_readers"`
ConnectionWriters int64 `json:"connection_writers"`
ConnectionChannels int64 `json:"connection_channels"`
ConnectionOther int64 `json:"connection_other"`
QueueProcs int64 `json:"queue_procs"`
QueueSlaveProcs int64 `json:"queue_slave_procs"`
Plugins int64 `json:"plugins"`
OtherProc int64 `json:"other_proc"`
Metrics int64 `json:"metrics"`
MgmtDb int64 `json:"mgmt_db"`
Mnesia int64 `json:"mnesia"`
OtherEts int64 `json:"other_ets"`
Binary int64 `json:"binary"`
MsgIndex int64 `json:"msg_index"`
Code int64 `json:"code"`
Atom int64 `json:"atom"`
OtherSystem int64 `json:"other_system"`
AllocatedUnused int64 `json:"allocated_unused"`
ReservedUnallocated int64 `json:"reserved_unallocated"`
Total int64 `json:"total"`
ConnectionReaders int64 `json:"connection_readers"`
ConnectionWriters int64 `json:"connection_writers"`
ConnectionChannels int64 `json:"connection_channels"`
ConnectionOther int64 `json:"connection_other"`
QueueProcs int64 `json:"queue_procs"`
QueueSlaveProcs int64 `json:"queue_slave_procs"`
Plugins int64 `json:"plugins"`
OtherProc int64 `json:"other_proc"`
Metrics int64 `json:"metrics"`
MgmtDb int64 `json:"mgmt_db"`
Mnesia int64 `json:"mnesia"`
OtherEts int64 `json:"other_ets"`
Binary int64 `json:"binary"`
MsgIndex int64 `json:"msg_index"`
Code int64 `json:"code"`
Atom int64 `json:"atom"`
OtherSystem int64 `json:"other_system"`
AllocatedUnused int64 `json:"allocated_unused"`
ReservedUnallocated int64 `json:"reserved_unallocated"`
Total interface{} `json:"total"`
}
// Error response
type ErrorResponse struct {
Error string `json:"error"`
Reason string `json:"reason"`
}
// gatherFunc ...
type gatherFunc func(r *RabbitMQ, acc telegraf.Accumulator)
var gatherFunctions = []gatherFunc{gatherOverview, gatherNodes, gatherQueues, gatherExchanges, gatherFederationLinks}
var gatherFunctions = map[string]gatherFunc{
"exchange": gatherExchanges,
"federation": gatherFederationLinks,
"node": gatherNodes,
"overview": gatherOverview,
"queue": gatherQueues,
}
var sampleConfig = `
## Management Plugin url. (default: http://localhost:15672)
@ -291,6 +307,12 @@ var sampleConfig = `
## specified, metrics for all exchanges are gathered.
# exchanges = ["telegraf"]
## Metrics to include and exclude. Globs accepted.
## Note that an empty array for both will include all metrics
## Currently the following metrics are supported: "exchange", "federation", "node", "overview", "queue"
# metric_include = []
# metric_exclude = []
## Queues to include and exclude. Globs accepted.
## Note that an empty array for both will include all queues
queue_name_include = []
@ -323,39 +345,47 @@ func (r *RabbitMQ) Description() string {
return "Reads metrics from RabbitMQ servers via the Management Plugin"
}
func (r *RabbitMQ) Init() error {
var err error
// Create gather filters
if err := r.createQueueFilter(); err != nil {
return err
}
if err := r.createUpstreamFilter(); err != nil {
return err
}
// Create a filter for the metrics
if r.metricFilter, err = filter.NewIncludeExcludeFilter(r.MetricInclude, r.MetricExclude); err != nil {
return err
}
tlsCfg, err := r.ClientConfig.TLSConfig()
if err != nil {
return err
}
tr := &http.Transport{
ResponseHeaderTimeout: time.Duration(r.ResponseHeaderTimeout),
TLSClientConfig: tlsCfg,
}
r.client = &http.Client{
Transport: tr,
Timeout: time.Duration(r.ClientTimeout),
}
return nil
}
// Gather ...
func (r *RabbitMQ) Gather(acc telegraf.Accumulator) error {
if r.Client == nil {
tlsCfg, err := r.ClientConfig.TLSConfig()
if err != nil {
return err
}
tr := &http.Transport{
ResponseHeaderTimeout: time.Duration(r.ResponseHeaderTimeout),
TLSClientConfig: tlsCfg,
}
r.Client = &http.Client{
Transport: tr,
Timeout: time.Duration(r.ClientTimeout),
}
}
// Create gather filters if not already created
if !r.filterCreated {
err := r.createQueueFilter()
if err != nil {
return err
}
err = r.createUpstreamFilter()
if err != nil {
return err
}
r.filterCreated = true
}
var wg sync.WaitGroup
wg.Add(len(gatherFunctions))
for _, f := range gatherFunctions {
for name, f := range gatherFunctions {
// Query only metrics that are supported
if !r.metricFilter.Match(name) {
continue
}
wg.Add(1)
go func(gf gatherFunc) {
defer wg.Done()
gf(r, acc)
@ -366,15 +396,16 @@ func (r *RabbitMQ) Gather(acc telegraf.Accumulator) error {
return nil
}
func (r *RabbitMQ) requestJSON(u string, target interface{}) error {
func (r *RabbitMQ) requestEndpoint(u string) ([]byte, error) {
if r.URL == "" {
r.URL = DefaultURL
}
u = fmt.Sprintf("%s%s", r.URL, u)
endpoint := r.URL + u
r.Log.Debugf("Requesting %q...", endpoint)
req, err := http.NewRequest("GET", u, nil)
req, err := http.NewRequest("GET", endpoint, nil)
if err != nil {
return err
return nil, err
}
username := r.Username
@ -389,14 +420,39 @@ func (r *RabbitMQ) requestJSON(u string, target interface{}) error {
req.SetBasicAuth(username, password)
resp, err := r.Client.Do(req)
resp, err := r.client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
r.Log.Debugf("HTTP status code: %v %v", resp.StatusCode, http.StatusText(resp.StatusCode))
if resp.StatusCode < 200 || resp.StatusCode > 299 {
return nil, fmt.Errorf("getting %q failed: %v %v", u, resp.StatusCode, http.StatusText(resp.StatusCode))
}
return ioutil.ReadAll(resp.Body)
}
func (r *RabbitMQ) requestJSON(u string, target interface{}) error {
buf, err := r.requestEndpoint(u)
if err != nil {
return err
}
if err := json.Unmarshal(buf, target); err != nil {
if _, ok := err.(*json.UnmarshalTypeError); ok {
// Try to get the error reason from the response
var errResponse ErrorResponse
if json.Unmarshal(buf, &errResponse) == nil && errResponse.Error != "" {
// Return the error reason in the response
return fmt.Errorf("error response trying to get %q: %q (reason: %q)", u, errResponse.Error, errResponse.Reason)
}
}
defer resp.Body.Close()
return fmt.Errorf("decoding answer from %q failed: %v", u, err)
}
return json.NewDecoder(resp.Body).Decode(target)
return nil
}
func gatherOverview(r *RabbitMQ, acc telegraf.Accumulator) {
@ -533,7 +589,27 @@ func gatherNodes(r *RabbitMQ, acc telegraf.Accumulator) {
fields["mem_other_system"] = memory.Memory.OtherSystem
fields["mem_allocated_unused"] = memory.Memory.AllocatedUnused
fields["mem_reserved_unallocated"] = memory.Memory.ReservedUnallocated
fields["mem_total"] = memory.Memory.Total
switch v := memory.Memory.Total.(type) {
case float64:
fields["mem_total"] = int64(v)
case map[string]interface{}:
var foundEstimator bool
for _, estimator := range []string{"rss", "allocated", "erlang"} {
if x, found := v[estimator]; found {
if total, ok := x.(float64); ok {
fields["mem_total"] = int64(total)
foundEstimator = true
break
}
acc.AddError(fmt.Errorf("unknown type %T for %q total memory", x, estimator))
}
}
if !foundEstimator {
acc.AddError(fmt.Errorf("no known memory estimation in %v", v))
}
default:
acc.AddError(fmt.Errorf("unknown type %T for total memory", memory.Memory.Total))
}
}
acc.AddFields("rabbitmq_node", fields, tags)

View File

@ -1,36 +1,40 @@
package rabbitmq
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"time"
"testing"
"io/ioutil"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestRabbitMQGeneratesMetrics(t *testing.T) {
func TestRabbitMQGeneratesMetricsSet1(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var jsonFilePath string
switch r.URL.Path {
case "/api/overview":
jsonFilePath = "testdata/overview.json"
jsonFilePath = "testdata/set1/overview.json"
case "/api/nodes":
jsonFilePath = "testdata/nodes.json"
jsonFilePath = "testdata/set1/nodes.json"
case "/api/queues":
jsonFilePath = "testdata/queues.json"
jsonFilePath = "testdata/set1/queues.json"
case "/api/exchanges":
jsonFilePath = "testdata/exchanges.json"
jsonFilePath = "testdata/set1/exchanges.json"
case "/api/federation-links":
jsonFilePath = "testdata/federation-links.json"
jsonFilePath = "testdata/set1/federation-links.json"
case "/api/nodes/rabbit@vagrant-ubuntu-trusty-64/memory":
jsonFilePath = "testdata/memory.json"
jsonFilePath = "testdata/set1/memory.json"
default:
require.Fail(t, "Cannot handle request")
http.Error(w, fmt.Sprintf("unknown path %q", r.URL.Path), http.StatusNotFound)
return
}
data, err := ioutil.ReadFile(jsonFilePath)
@ -41,155 +45,627 @@ func TestRabbitMQGeneratesMetrics(t *testing.T) {
}))
defer ts.Close()
r := &RabbitMQ{
URL: ts.URL,
// Define test cases
expected := []telegraf.Metric{
testutil.MustMetric("rabbitmq_overview",
map[string]string{
"url": ts.URL,
},
map[string]interface{}{
"messages": int64(5),
"messages_ready": int64(32),
"messages_unacked": int64(27),
"messages_acked": int64(5246),
"messages_delivered": int64(5234),
"messages_delivered_get": int64(3333),
"messages_published": int64(5258),
"channels": int64(44),
"connections": int64(44),
"consumers": int64(65),
"exchanges": int64(43),
"queues": int64(62),
"clustering_listeners": int64(2),
"amqp_listeners": int64(2),
"return_unroutable": int64(10),
"return_unroutable_rate": float64(3.3),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_queue",
map[string]string{
"auto_delete": "false",
"durable": "false",
"node": "rabbit@rmqlocal-0.rmqlocal.ankorabbitstatefulset3.svc.cluster.local",
"queue": "reply_a716f0523cd44941ad2ea6ce4a3869c3",
"url": ts.URL,
"vhost": "sorandomsorandom",
},
map[string]interface{}{
"consumers": int64(3),
"consumer_utilisation": float64(1.0),
"memory": int64(143776),
"message_bytes": int64(3),
"message_bytes_ready": int64(4),
"message_bytes_unacked": int64(5),
"message_bytes_ram": int64(6),
"message_bytes_persist": int64(7),
"messages": int64(44),
"messages_ready": int64(32),
"messages_unack": int64(44),
"messages_ack": int64(3457),
"messages_ack_rate": float64(9.9),
"messages_deliver": int64(22222),
"messages_deliver_rate": float64(333.4),
"messages_deliver_get": int64(3457),
"messages_deliver_get_rate": float64(0.2),
"messages_publish": int64(3457),
"messages_publish_rate": float64(11.2),
"messages_redeliver": int64(33),
"messages_redeliver_rate": float64(2.5),
"idle_since": "2015-11-01 8:22:14",
"slave_nodes": int64(1),
"synchronised_slave_nodes": int64(1),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_node",
map[string]string{
"node": "rabbit@vagrant-ubuntu-trusty-64",
"url": ts.URL,
},
map[string]interface{}{
"disk_free": int64(3776),
"disk_free_limit": int64(50000000),
"disk_free_alarm": int64(0),
"fd_total": int64(1024),
"fd_used": int64(63),
"mem_limit": int64(2503),
"mem_used": int64(159707080),
"mem_alarm": int64(1),
"proc_total": int64(1048576),
"proc_used": int64(783),
"run_queue": int64(0),
"sockets_total": int64(829),
"sockets_used": int64(45),
"uptime": int64(7464827),
"running": int64(1),
"mnesia_disk_tx_count": int64(16),
"mnesia_ram_tx_count": int64(296),
"mnesia_disk_tx_count_rate": float64(1.1),
"mnesia_ram_tx_count_rate": float64(2.2),
"gc_num": int64(57280132),
"gc_bytes_reclaimed": int64(2533),
"gc_num_rate": float64(274.2),
"gc_bytes_reclaimed_rate": float64(16490856.3),
"io_read_avg_time": float64(983.0),
"io_read_avg_time_rate": float64(88.77),
"io_read_bytes": int64(1111),
"io_read_bytes_rate": float64(99.99),
"io_write_avg_time": float64(134.0),
"io_write_avg_time_rate": float64(4.32),
"io_write_bytes": int64(823),
"io_write_bytes_rate": float64(32.8),
"mem_connection_readers": int64(1234),
"mem_connection_writers": int64(5678),
"mem_connection_channels": int64(1133),
"mem_connection_other": int64(2840),
"mem_queue_procs": int64(2840),
"mem_queue_slave_procs": int64(0),
"mem_plugins": int64(1755976),
"mem_other_proc": int64(23056584),
"mem_metrics": int64(196536),
"mem_mgmt_db": int64(491272),
"mem_mnesia": int64(115600),
"mem_other_ets": int64(2121872),
"mem_binary": int64(418848),
"mem_msg_index": int64(42848),
"mem_code": int64(25179322),
"mem_atom": int64(1041593),
"mem_other_system": int64(14741981),
"mem_allocated_unused": int64(38208528),
"mem_reserved_unallocated": int64(0),
"mem_total": int64(83025920),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "true",
"durable": "false",
"exchange": "reply_a716f0523cd44941ad2ea6ce4a3869c3",
"internal": "false",
"type": "direct",
"url": ts.URL,
"vhost": "sorandomsorandom",
},
map[string]interface{}{
"messages_publish_in": int64(3678),
"messages_publish_in_rate": float64(3.2),
"messages_publish_out": int64(3677),
"messages_publish_out_rate": float64(5.1),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_federation",
map[string]string{
"queue": "exampleLocalQueue",
"type": "queue",
"upstream": "ExampleFederationUpstream",
"upstream_queue": "exampleUpstreamQueue",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"acks_uncommitted": int64(1),
"consumers": int64(2),
"messages_unacknowledged": int64(3),
"messages_uncommitted": int64(4),
"messages_unconfirmed": int64(5),
"messages_confirm": int64(67),
"messages_publish": int64(890),
"messages_return_unroutable": int64(1),
},
time.Unix(0, 0),
),
}
// Run the test
plugin := &RabbitMQ{
URL: ts.URL,
Log: testutil.Logger{},
}
require.NoError(t, plugin.Init())
acc := &testutil.Accumulator{}
require.NoError(t, plugin.Gather(acc))
err := acc.GatherError(r.Gather)
require.NoError(t, err)
acc.Wait(len(expected))
require.Len(t, acc.Errors, 0)
overviewMetrics := map[string]interface{}{
"messages": 5,
"messages_ready": 32,
"messages_unacked": 27,
"messages_acked": 5246,
"messages_delivered": 5234,
"messages_delivered_get": 3333,
"messages_published": 5258,
"channels": 44,
"connections": 44,
"consumers": 65,
"exchanges": 43,
"queues": 62,
"clustering_listeners": 2,
"amqp_listeners": 2,
"return_unroutable": 10,
"return_unroutable_rate": 3.3,
}
compareMetrics(t, overviewMetrics, acc, "rabbitmq_overview")
queuesMetrics := map[string]interface{}{
"consumers": 3,
"consumer_utilisation": 1.0,
"memory": 143776,
"message_bytes": 3,
"message_bytes_ready": 4,
"message_bytes_unacked": 5,
"message_bytes_ram": 6,
"message_bytes_persist": 7,
"messages": 44,
"messages_ready": 32,
"messages_unack": 44,
"messages_ack": 3457,
"messages_ack_rate": 9.9,
"messages_deliver": 22222,
"messages_deliver_rate": 333.4,
"messages_deliver_get": 3457,
"messages_deliver_get_rate": 0.2,
"messages_publish": 3457,
"messages_publish_rate": 11.2,
"messages_redeliver": 33,
"messages_redeliver_rate": 2.5,
"idle_since": "2015-11-01 8:22:14",
"slave_nodes": 1,
"synchronised_slave_nodes": 1,
}
compareMetrics(t, queuesMetrics, acc, "rabbitmq_queue")
nodeMetrics := map[string]interface{}{
"disk_free": 3776,
"disk_free_limit": 50000000,
"disk_free_alarm": 0,
"fd_total": 1024,
"fd_used": 63,
"mem_limit": 2503,
"mem_used": 159707080,
"mem_alarm": 1,
"proc_total": 1048576,
"proc_used": 783,
"run_queue": 0,
"sockets_total": 829,
"sockets_used": 45,
"uptime": 7464827,
"running": 1,
"mnesia_disk_tx_count": 16,
"mnesia_ram_tx_count": 296,
"mnesia_disk_tx_count_rate": 1.1,
"mnesia_ram_tx_count_rate": 2.2,
"gc_num": 57280132,
"gc_bytes_reclaimed": 2533,
"gc_num_rate": 274.2,
"gc_bytes_reclaimed_rate": 16490856.3,
"io_read_avg_time": 983,
"io_read_avg_time_rate": 88.77,
"io_read_bytes": 1111,
"io_read_bytes_rate": 99.99,
"io_write_avg_time": 134,
"io_write_avg_time_rate": 4.32,
"io_write_bytes": 823,
"io_write_bytes_rate": 32.8,
"mem_connection_readers": 1234,
"mem_connection_writers": 5678,
"mem_connection_channels": 1133,
"mem_connection_other": 2840,
"mem_queue_procs": 2840,
"mem_queue_slave_procs": 0,
"mem_plugins": 1755976,
"mem_other_proc": 23056584,
"mem_metrics": 196536,
"mem_mgmt_db": 491272,
"mem_mnesia": 115600,
"mem_other_ets": 2121872,
"mem_binary": 418848,
"mem_msg_index": 42848,
"mem_code": 25179322,
"mem_atom": 1041593,
"mem_other_system": 14741981,
"mem_allocated_unused": 38208528,
"mem_reserved_unallocated": 0,
"mem_total": 83025920,
}
compareMetrics(t, nodeMetrics, acc, "rabbitmq_node")
exchangeMetrics := map[string]interface{}{
"messages_publish_in": 3678,
"messages_publish_in_rate": 3.2,
"messages_publish_out": 3677,
"messages_publish_out_rate": 5.1,
}
compareMetrics(t, exchangeMetrics, acc, "rabbitmq_exchange")
federationLinkMetrics := map[string]interface{}{
"acks_uncommitted": 1,
"consumers": 2,
"messages_unacknowledged": 3,
"messages_uncommitted": 4,
"messages_unconfirmed": 5,
"messages_confirm": 67,
"messages_publish": 890,
"messages_return_unroutable": 1,
}
compareMetrics(t, federationLinkMetrics, acc, "rabbitmq_federation")
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime(), testutil.SortMetrics())
}
func compareMetrics(t *testing.T, expectedMetrics map[string]interface{},
accumulator *testutil.Accumulator, measurementKey string) {
measurement, exist := accumulator.Get(measurementKey)
func TestRabbitMQGeneratesMetricsSet2(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var jsonFilePath string
assert.True(t, exist, "There is measurement %s", measurementKey)
assert.Equal(t, len(expectedMetrics), len(measurement.Fields))
for metricName, metricValue := range expectedMetrics {
actualMetricValue := measurement.Fields[metricName]
if accumulator.HasStringField(measurementKey, metricName) {
assert.Equal(t, metricValue, actualMetricValue,
"Metric name: %s", metricName)
} else {
assert.InDelta(t, metricValue, actualMetricValue, 0e5,
"Metric name: %s", metricName)
switch r.URL.Path {
case "/api/overview":
jsonFilePath = "testdata/set2/overview.json"
case "/api/nodes":
jsonFilePath = "testdata/set2/nodes.json"
case "/api/queues":
jsonFilePath = "testdata/set2/queues.json"
case "/api/exchanges":
jsonFilePath = "testdata/set2/exchanges.json"
case "/api/federation-links":
jsonFilePath = "testdata/set2/federation-links.json"
case "/api/nodes/rabbit@rmqserver/memory":
jsonFilePath = "testdata/set2/memory.json"
default:
http.Error(w, fmt.Sprintf("unknown path %q", r.URL.Path), http.StatusNotFound)
return
}
data, err := ioutil.ReadFile(jsonFilePath)
require.NoErrorf(t, err, "could not read from data file %s", jsonFilePath)
_, err = w.Write(data)
require.NoError(t, err)
}))
defer ts.Close()
// Define test cases
expected := []telegraf.Metric{
testutil.MustMetric("rabbitmq_overview",
map[string]string{
"url": ts.URL,
},
map[string]interface{}{
"messages": int64(30),
"messages_ready": int64(30),
"messages_unacked": int64(0),
"messages_acked": int64(3736443),
"messages_delivered": int64(3736446),
"messages_delivered_get": int64(3736446),
"messages_published": int64(770025),
"channels": int64(43),
"connections": int64(43),
"consumers": int64(37),
"exchanges": int64(8),
"queues": int64(34),
"clustering_listeners": int64(1),
"amqp_listeners": int64(2),
"return_unroutable": int64(0),
"return_unroutable_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_queue",
map[string]string{
"auto_delete": "false",
"durable": "false",
"node": "rabbit@rmqserver",
"queue": "39fd2caf-63e5-41e3-c15a-ba8fa11434b2",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"consumers": int64(1),
"consumer_utilisation": float64(1.0),
"memory": int64(15840),
"message_bytes": int64(0),
"message_bytes_ready": int64(0),
"message_bytes_unacked": int64(0),
"message_bytes_ram": int64(0),
"message_bytes_persist": int64(0),
"messages": int64(0),
"messages_ready": int64(0),
"messages_unack": int64(0),
"messages_ack": int64(180),
"messages_ack_rate": float64(0.0),
"messages_deliver": int64(180),
"messages_deliver_rate": float64(0.0),
"messages_deliver_get": int64(180),
"messages_deliver_get_rate": float64(0.0),
"messages_publish": int64(180),
"messages_publish_rate": float64(0.0),
"messages_redeliver": int64(0),
"messages_redeliver_rate": float64(0.0),
"idle_since": "2021-06-28 15:54:14",
"slave_nodes": int64(0),
"synchronised_slave_nodes": int64(0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_queue",
map[string]string{
"auto_delete": "false",
"durable": "false",
"node": "rabbit@rmqserver",
"queue": "39fd2cb4-aa2d-c08b-457a-62d0893523a1",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"consumers": int64(1),
"consumer_utilisation": float64(1.0),
"memory": int64(15600),
"message_bytes": int64(0),
"message_bytes_ready": int64(0),
"message_bytes_unacked": int64(0),
"message_bytes_ram": int64(0),
"message_bytes_persist": int64(0),
"messages": int64(0),
"messages_ready": int64(0),
"messages_unack": int64(0),
"messages_ack": int64(177),
"messages_ack_rate": float64(0.0),
"messages_deliver": int64(177),
"messages_deliver_rate": float64(0.0),
"messages_deliver_get": int64(177),
"messages_deliver_get_rate": float64(0.0),
"messages_publish": int64(177),
"messages_publish_rate": float64(0.0),
"messages_redeliver": int64(0),
"messages_redeliver_rate": float64(0.0),
"idle_since": "2021-06-28 15:54:14",
"slave_nodes": int64(0),
"synchronised_slave_nodes": int64(0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_queue",
map[string]string{
"auto_delete": "false",
"durable": "false",
"node": "rabbit@rmqserver",
"queue": "39fd2cb5-3820-e01b-6e20-ba29d5553fc3",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"consumers": int64(1),
"consumer_utilisation": float64(1.0),
"memory": int64(15584),
"message_bytes": int64(0),
"message_bytes_ready": int64(0),
"message_bytes_unacked": int64(0),
"message_bytes_ram": int64(0),
"message_bytes_persist": int64(0),
"messages": int64(0),
"messages_ready": int64(0),
"messages_unack": int64(0),
"messages_ack": int64(175),
"messages_ack_rate": float64(0.0),
"messages_deliver": int64(175),
"messages_deliver_rate": float64(0.0),
"messages_deliver_get": int64(175),
"messages_deliver_get_rate": float64(0.0),
"messages_publish": int64(175),
"messages_publish_rate": float64(0.0),
"messages_redeliver": int64(0),
"messages_redeliver_rate": float64(0.0),
"idle_since": "2021-06-28 15:54:15",
"slave_nodes": int64(0),
"synchronised_slave_nodes": int64(0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_node",
map[string]string{
"node": "rabbit@rmqserver",
"url": ts.URL,
},
map[string]interface{}{
"disk_free": int64(25086496768),
"disk_free_limit": int64(50000000),
"disk_free_alarm": int64(0),
"fd_total": int64(65536),
"fd_used": int64(78),
"mem_limit": int64(1717546188),
"mem_used": int64(387645440),
"mem_alarm": int64(0),
"proc_total": int64(1048576),
"proc_used": int64(1128),
"run_queue": int64(1),
"sockets_total": int64(58893),
"sockets_used": int64(43),
"uptime": int64(4150152129),
"running": int64(1),
"mnesia_disk_tx_count": int64(103),
"mnesia_ram_tx_count": int64(2257),
"mnesia_disk_tx_count_rate": float64(0.0),
"mnesia_ram_tx_count_rate": float64(0.0),
"gc_num": int64(329526389),
"gc_bytes_reclaimed": int64(13660012170840),
"gc_num_rate": float64(125.2),
"gc_bytes_reclaimed_rate": float64(6583379.2),
"io_read_avg_time": float64(0.0),
"io_read_avg_time_rate": float64(0.0),
"io_read_bytes": int64(1),
"io_read_bytes_rate": float64(0.0),
"io_write_avg_time": float64(0.0),
"io_write_avg_time_rate": float64(0.0),
"io_write_bytes": int64(193066),
"io_write_bytes_rate": float64(0.0),
"mem_connection_readers": int64(1246768),
"mem_connection_writers": int64(72108),
"mem_connection_channels": int64(308588),
"mem_connection_other": int64(4883596),
"mem_queue_procs": int64(780996),
"mem_queue_slave_procs": int64(0),
"mem_plugins": int64(11932828),
"mem_other_proc": int64(39203520),
"mem_metrics": int64(626932),
"mem_mgmt_db": int64(3341264),
"mem_mnesia": int64(396016),
"mem_other_ets": int64(3771384),
"mem_binary": int64(209324208),
"mem_msg_index": int64(32648),
"mem_code": int64(32810827),
"mem_atom": int64(1458513),
"mem_other_system": int64(14284124),
"mem_allocated_unused": int64(61026048),
"mem_reserved_unallocated": int64(0),
"mem_total": int64(385548288),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "",
"internal": "false",
"type": "direct",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(284725),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(284572),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.direct",
"internal": "false",
"type": "direct",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.fanout",
"internal": "false",
"type": "fanout",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.headers",
"internal": "false",
"type": "headers",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.match",
"internal": "false",
"type": "headers",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.rabbitmq.trace",
"internal": "true",
"type": "topic",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "false",
"durable": "true",
"exchange": "amq.topic",
"internal": "false",
"type": "topic",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(0),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(0),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
testutil.MustMetric("rabbitmq_exchange",
map[string]string{
"auto_delete": "true",
"durable": "false",
"exchange": "Exchange",
"internal": "false",
"type": "topic",
"url": ts.URL,
"vhost": "/",
},
map[string]interface{}{
"messages_publish_in": int64(18006),
"messages_publish_in_rate": float64(0.0),
"messages_publish_out": int64(60798),
"messages_publish_out_rate": float64(0.0),
},
time.Unix(0, 0),
),
}
expectedErrors := []error{
fmt.Errorf("error response trying to get \"/api/federation-links\": \"Object Not Found\" (reason: \"Not Found\")"),
}
// Run the test
plugin := &RabbitMQ{
URL: ts.URL,
Log: testutil.Logger{},
}
require.NoError(t, plugin.Init())
acc := &testutil.Accumulator{}
require.NoError(t, plugin.Gather(acc))
acc.Wait(len(expected))
require.Len(t, acc.Errors, len(expectedErrors))
require.ElementsMatch(t, expectedErrors, acc.Errors)
testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime(), testutil.SortMetrics())
}
func TestRabbitMQMetricFilerts(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.Error(w, fmt.Sprintf("unknown path %q", r.URL.Path), http.StatusNotFound)
}))
defer ts.Close()
metricErrors := map[string]error{
"exchange": fmt.Errorf("getting \"/api/exchanges\" failed: 404 Not Found"),
"federation": fmt.Errorf("getting \"/api/federation-links\" failed: 404 Not Found"),
"node": fmt.Errorf("getting \"/api/nodes\" failed: 404 Not Found"),
"overview": fmt.Errorf("getting \"/api/overview\" failed: 404 Not Found"),
"queue": fmt.Errorf("getting \"/api/queues\" failed: 404 Not Found"),
}
// Include test
for name, expected := range metricErrors {
plugin := &RabbitMQ{
URL: ts.URL,
Log: testutil.Logger{},
MetricInclude: []string{name},
}
require.NoError(t, plugin.Init())
acc := &testutil.Accumulator{}
require.NoError(t, plugin.Gather(acc))
require.Len(t, acc.Errors, 1)
require.ElementsMatch(t, []error{expected}, acc.Errors)
}
// Exclude test
for name := range metricErrors {
// Exclude the current metric error from the list of expected errors
var expected []error
for n, e := range metricErrors {
if n != name {
expected = append(expected, e)
}
}
plugin := &RabbitMQ{
URL: ts.URL,
Log: testutil.Logger{},
MetricExclude: []string{name},
}
require.NoError(t, plugin.Init())
acc := &testutil.Accumulator{}
require.NoError(t, plugin.Gather(acc))
require.Len(t, acc.Errors, len(expected))
require.ElementsMatch(t, expected, acc.Errors)
}
}

View File

@ -0,0 +1,104 @@
[
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"message_stats": {
"publish_in": 284725,
"publish_in_details": {
"rate": 0
},
"publish_out": 284572,
"publish_out_details": {
"rate": 0
}
},
"name": "",
"type": "direct",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {
"x-expires": 300000
},
"auto_delete": true,
"durable": false,
"internal": false,
"message_stats": {
"publish_in": 18006,
"publish_in_details": {
"rate": 0
},
"publish_out": 60798,
"publish_out_details": {
"rate": 0
}
},
"name": "Exchange",
"type": "topic",
"user_who_performed_action": "user",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"name": "amq.direct",
"type": "direct",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"name": "amq.fanout",
"type": "fanout",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"name": "amq.headers",
"type": "headers",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"name": "amq.match",
"type": "headers",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": true,
"name": "amq.rabbitmq.trace",
"type": "topic",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
},
{
"arguments": {},
"auto_delete": false,
"durable": true,
"internal": false,
"name": "amq.topic",
"type": "topic",
"user_who_performed_action": "rmq-internal",
"vhost": "/"
}
]

View File

@ -0,0 +1 @@
{"error":"Object Not Found","reason":"Not Found"}

View File

@ -0,0 +1,31 @@
{
"memory": {
"connection_readers": 1246768,
"connection_writers": 72108,
"connection_channels": 308588,
"connection_other": 4883596,
"queue_procs": 780996,
"queue_slave_procs": 0,
"quorum_queue_procs": 0,
"plugins": 11932828,
"other_proc": 39203520,
"metrics": 626932,
"mgmt_db": 3341264,
"mnesia": 396016,
"quorum_ets": 47920,
"other_ets": 3771384,
"binary": 209324208,
"msg_index": 32648,
"code": 32810827,
"atom": 1458513,
"other_system": 14284124,
"allocated_unused": 61026048,
"reserved_unallocated": 0,
"strategy": "rss",
"total": {
"erlang": 324522240,
"rss": 385548288,
"allocated": 385548288
}
}
}

View File

@ -0,0 +1,417 @@
[
{
"partitions": [],
"os_pid": "8268",
"fd_total": 65536,
"sockets_total": 58893,
"mem_limit": 1717546188,
"mem_alarm": false,
"disk_free_limit": 50000000,
"disk_free_alarm": false,
"proc_total": 1048576,
"rates_mode": "basic",
"uptime": 4150152129,
"run_queue": 1,
"processors": 4,
"exchange_types": [
{
"name": "topic",
"description": "AMQP topic exchange, as per the AMQP specification",
"enabled": true
},
{
"name": "fanout",
"description": "AMQP fanout exchange, as per the AMQP specification",
"enabled": true
},
{
"name": "direct",
"description": "AMQP direct exchange, as per the AMQP specification",
"enabled": true
},
{
"name": "headers",
"description": "AMQP headers exchange, as per the AMQP specification",
"enabled": true
}
],
"auth_mechanisms": [
{
"name": "PLAIN",
"description": "SASL PLAIN authentication mechanism",
"enabled": true
},
{
"name": "AMQPLAIN",
"description": "QPid AMQPLAIN mechanism",
"enabled": true
},
{
"name": "RABBIT-CR-DEMO",
"description": "RabbitMQ Demo challenge-response authentication mechanism",
"enabled": false
}
],
"applications": [
{
"name": "amqp_client",
"description": "RabbitMQ AMQP Client",
"version": "3.8.14"
},
{
"name": "asn1",
"description": "The Erlang ASN1 compiler version 5.0.14",
"version": "5.0.14"
},
{
"name": "aten",
"description": "Erlang node failure detector",
"version": "0.5.5"
},
{
"name": "compiler",
"description": "ERTS CXC 138 10",
"version": "7.6.6"
},
{
"name": "cowboy",
"description": "Small, fast, modern HTTP server.",
"version": "2.8.0"
},
{
"name": "cowlib",
"description": "Support library for manipulating Web protocols.",
"version": "2.9.1"
},
{
"name": "credentials_obfuscation",
"description": "Helper library that obfuscates sensitive values in process state",
"version": "2.4.0"
},
{
"name": "crypto",
"description": "CRYPTO",
"version": "4.8.3"
},
{
"name": "cuttlefish",
"description": "cuttlefish configuration abstraction",
"version": "2.6.0"
},
{
"name": "gen_batch_server",
"description": "Generic batching server",
"version": "0.8.4"
},
{
"name": "goldrush",
"description": "Erlang event stream processor",
"version": "0.1.9"
},
{
"name": "inets",
"description": "INETS CXC 138 49",
"version": "7.3.2"
},
{
"name": "jsx",
"description": "a streaming, evented json parsing toolkit",
"version": "2.11.0"
},
{
"name": "kernel",
"description": "ERTS CXC 138 10",
"version": "7.2.1"
},
{
"name": "lager",
"description": "Erlang logging framework",
"version": "3.8.2"
},
{
"name": "mnesia",
"description": "MNESIA CXC 138 12",
"version": "4.18.1"
},
{
"name": "observer_cli",
"description": "Visualize Erlang Nodes On The Command Line",
"version": "1.6.1"
},
{
"name": "os_mon",
"description": "CPO CXC 138 46",
"version": "2.6.1"
},
{
"name": "public_key",
"description": "Public key infrastructure",
"version": "1.9.2"
},
{
"name": "ra",
"description": "Raft library",
"version": "1.1.8"
},
{
"name": "rabbit",
"description": "RabbitMQ",
"version": "3.8.14"
},
{
"name": "rabbit_common",
"description": "Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"version": "3.8.14"
},
{
"name": "rabbitmq_management",
"description": "RabbitMQ Management Console",
"version": "3.8.14"
},
{
"name": "rabbitmq_management_agent",
"description": "RabbitMQ Management Agent",
"version": "3.8.14"
},
{
"name": "rabbitmq_prelaunch",
"description": "RabbitMQ prelaunch setup",
"version": "3.8.14"
},
{
"name": "rabbitmq_web_dispatch",
"description": "RabbitMQ Web Dispatcher",
"version": "3.8.14"
},
{
"name": "ranch",
"description": "Socket acceptor pool for TCP protocols.",
"version": "1.7.1"
},
{
"name": "recon",
"description": "Diagnostic tools for production use",
"version": "2.5.1"
},
{
"name": "sasl",
"description": "SASL CXC 138 11",
"version": "4.0.1"
},
{
"name": "ssl",
"description": "Erlang/OTP SSL application",
"version": "10.2.4"
},
{
"name": "stdlib",
"description": "ERTS CXC 138 10",
"version": "3.14"
},
{
"name": "stdout_formatter",
"description": "Tools to format paragraphs, lists and tables as plain text",
"version": "0.2.4"
},
{
"name": "syntax_tools",
"description": "Syntax tools",
"version": "2.4"
},
{
"name": "sysmon_handler",
"description": "Rate-limiting system_monitor event handler",
"version": "1.3.0"
},
{
"name": "tools",
"description": "DEVTOOLS CXC 138 16",
"version": "3.4.3"
},
{
"name": "xmerl",
"description": "XML parser",
"version": "1.3.26"
}
],
"contexts": [
{
"description": "RabbitMQ Management",
"path": "/",
"cowboy_opts": "[{sendfile,false}]",
"port": "15672"
}
],
"log_files": [
"c:/Users/user/AppData/Roaming/RabbitMQ/log/rabbit@rmqserver.log",
"c:/Users/user/AppData/Roaming/RabbitMQ/log/rabbit@rmqserver_upgrade.log"
],
"db_dir": "c:/Users/user/AppData/Roaming/RabbitMQ/db/rabbit@rmqserver-mnesia",
"config_files": [
"c:/Users/user/AppData/Roaming/RabbitMQ/advanced.config"
],
"net_ticktime": 60,
"enabled_plugins": [
"rabbitmq_management"
],
"mem_calculation_strategy": "rss",
"ra_open_file_metrics": {
"ra_log_wal": 1,
"ra_log_segment_writer": 0
},
"name": "rabbit@rmqserver",
"type": "disc",
"running": true,
"mem_used": 387645440,
"mem_used_details": {
"rate": 419430.4
},
"fd_used": 78,
"fd_used_details": {
"rate": 0
},
"sockets_used": 43,
"sockets_used_details": {
"rate": 0
},
"proc_used": 1128,
"proc_used_details": {
"rate": 0
},
"disk_free": 25086496768,
"disk_free_details": {
"rate": -118784
},
"gc_num": 329526389,
"gc_num_details": {
"rate": 125.2
},
"gc_bytes_reclaimed": 13660012170840,
"gc_bytes_reclaimed_details": {
"rate": 6583379.2
},
"context_switches": 974149754,
"context_switches_details": {
"rate": 270
},
"io_read_count": 1,
"io_read_count_details": {
"rate": 0
},
"io_read_bytes": 1,
"io_read_bytes_details": {
"rate": 0
},
"io_read_avg_time": 0,
"io_read_avg_time_details": {
"rate": 0
},
"io_write_count": 45,
"io_write_count_details": {
"rate": 0
},
"io_write_bytes": 193066,
"io_write_bytes_details": {
"rate": 0
},
"io_write_avg_time": 0,
"io_write_avg_time_details": {
"rate": 0
},
"io_sync_count": 45,
"io_sync_count_details": {
"rate": 0
},
"io_sync_avg_time": 0,
"io_sync_avg_time_details": {
"rate": 0
},
"io_seek_count": 31,
"io_seek_count_details": {
"rate": 0
},
"io_seek_avg_time": 0,
"io_seek_avg_time_details": {
"rate": 0
},
"io_reopen_count": 0,
"io_reopen_count_details": {
"rate": 0
},
"mnesia_ram_tx_count": 2257,
"mnesia_ram_tx_count_details": {
"rate": 0
},
"mnesia_disk_tx_count": 103,
"mnesia_disk_tx_count_details": {
"rate": 0
},
"msg_store_read_count": 0,
"msg_store_read_count_details": {
"rate": 0
},
"msg_store_write_count": 1,
"msg_store_write_count_details": {
"rate": 0
},
"queue_index_journal_write_count": 165,
"queue_index_journal_write_count_details": {
"rate": 0
},
"queue_index_write_count": 0,
"queue_index_write_count_details": {
"rate": 0
},
"queue_index_read_count": 0,
"queue_index_read_count_details": {
"rate": 0
},
"io_file_handle_open_attempt_count": 882,
"io_file_handle_open_attempt_count_details": {
"rate": 0
},
"io_file_handle_open_attempt_avg_time": 0.05442176870748299,
"io_file_handle_open_attempt_avg_time_details": {
"rate": 0
},
"connection_created": 2310,
"connection_created_details": {
"rate": 0
},
"connection_closed": 2268,
"connection_closed_details": {
"rate": 0
},
"channel_created": 2310,
"channel_created_details": {
"rate": 0
},
"channel_closed": 2267,
"channel_closed_details": {
"rate": 0
},
"queue_declared": 144281,
"queue_declared_details": {
"rate": 0
},
"queue_created": 663,
"queue_created_details": {
"rate": 0
},
"queue_deleted": 629,
"queue_deleted_details": {
"rate": 0
},
"cluster_links": [],
"metrics_gc_queue_length": {
"connection_closed": 0,
"channel_closed": 0,
"consumer_deleted": 0,
"exchange_deleted": 0,
"queue_deleted": 0,
"vhost_deleted": 0,
"node_node_deleted": 0,
"channel_consumer_deleted": 0
}
}
]

View File

@ -0,0 +1 @@
{"management_version":"3.8.14","rates_mode":"basic","sample_retention_policies":{"global":[600,3600,28800,86400],"basic":[600,3600],"detailed":[600]},"exchange_types":[{"name":"direct","description":"AMQP direct exchange, as per the AMQP specification","enabled":true},{"name":"fanout","description":"AMQP fanout exchange, as per the AMQP specification","enabled":true},{"name":"headers","description":"AMQP headers exchange, as per the AMQP specification","enabled":true},{"name":"topic","description":"AMQP topic exchange, as per the AMQP specification","enabled":true}],"product_version":"3.8.14","product_name":"RabbitMQ","rabbitmq_version":"3.8.14","cluster_name":"rabbit@rmqserver","erlang_version":"23.2.7","erlang_full_version":"Erlang/OTP 23 [erts-11.1.8] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]","disable_stats":false,"enable_queue_totals":false,"message_stats":{"ack":3736443,"ack_details":{"rate":0.0},"confirm":0,"confirm_details":{"rate":0.0},"deliver":3736446,"deliver_details":{"rate":0.0},"deliver_get":3736446,"deliver_get_details":{"rate":0.0},"deliver_no_ack":0,"deliver_no_ack_details":{"rate":0.0},"disk_reads":0,"disk_reads_details":{"rate":0.0},"disk_writes":55,"disk_writes_details":{"rate":0.0},"drop_unroutable":0,"drop_unroutable_details":{"rate":0.0},"get":0,"get_details":{"rate":0.0},"get_empty":0,"get_empty_details":{"rate":0.0},"get_no_ack":0,"get_no_ack_details":{"rate":0.0},"publish":770025,"publish_details":{"rate":0.0},"redeliver":1,"redeliver_details":{"rate":0.0},"return_unroutable":0,"return_unroutable_details":{"rate":0.0}},"churn_rates":{"channel_closed":2267,"channel_closed_details":{"rate":0.0},"channel_created":2310,"channel_created_details":{"rate":0.0},"connection_closed":2268,"connection_closed_details":{"rate":0.0},"connection_created":2310,"connection_created_details":{"rate":0.0},"queue_created":663,"queue_created_details":{"rate":0.0},"queue_declared":144281,"queue_declared_details":{"rate":0.0},"queue_deleted":629,"queue_deleted_details":{"rate":0.0}},"queue_totals":{"messages":30,"messages_details":{"rate":0.0},"messages_ready":30,"messages_ready_details":{"rate":0.0},"messages_unacknowledged":0,"messages_unacknowledged_details":{"rate":0.0}},"object_totals":{"channels":43,"connections":43,"consumers":37,"exchanges":8,"queues":34},"statistics_db_event_queue":0,"node":"rabbit@rmqserver","listeners":[{"node":"rabbit@rmqserver","protocol":"amqp","ip_address":"0.0.0.0","port":5672,"socket_opts":{"backlog":128,"nodelay":true,"linger":[true,0],"exit_on_close":false}},{"node":"rabbit@rmqserver","protocol":"amqp","ip_address":"::","port":5672,"socket_opts":{"backlog":128,"nodelay":true,"linger":[true,0],"exit_on_close":false}},{"node":"rabbit@rmqserver","protocol":"amqp/ssl","ip_address":"0.0.0.0","port":5671,"socket_opts":{"backlog":128,"nodelay":true,"linger":[true,0],"exit_on_close":false,"versions":["tlsv1.3","tlsv1.2","tlsv1.1","tlsv1"],"cacertfile":"C:\\ProgramData\\Chain.pem","certfile":"C:\\ProgramData\\server.crt","keyfile":"C:\\ProgramData\\server.key","verify":"verify_peer","depth":3,"fail_if_no_peer_cert":false}},{"node":"rabbit@rmqserver","protocol":"amqp/ssl","ip_address":"::","port":5671,"socket_opts":{"backlog":128,"nodelay":true,"linger":[true,0],"exit_on_close":false,"versions":["tlsv1.3","tlsv1.2","tlsv1.1","tlsv1"],"cacertfile":"C:\\ProgramData\\Chain.pem","certfile":"C:\\ProgramData\\server.crt","keyfile":"C:\\ProgramData\\server.key","verify":"verify_peer","depth":3,"fail_if_no_peer_cert":false}},{"node":"rabbit@rmqserver","protocol":"clustering","ip_address":"::","port":25672,"socket_opts":[]},{"node":"rabbit@rmqserver","protocol":"http","ip_address":"0.0.0.0","port":15672,"socket_opts":{"cowboy_opts":{"sendfile":false},"port":15672}},{"node":"rabbit@rmqserver","protocol":"http","ip_address":"::","port":15672,"socket_opts":{"cowboy_opts":{"sendfile":false},"port":15672}}],"contexts":[{"ssl_opts":[],"node":"rabbit@rmqserver","description":"RabbitMQ Management","path":"/","cowboy_opts":"[{sendfile,false}]","port":"15672"}]}

View File

@ -0,0 +1,356 @@
[
{
"arguments": {
"x-expires": 300000
},
"auto_delete": false,
"backing_queue_status": {
"avg_ack_egress_rate": 0,
"avg_ack_ingress_rate": 0,
"avg_egress_rate": 0,
"avg_ingress_rate": 0,
"delta": [
"delta",
"undefined",
0,
0,
"undefined"
],
"len": 0,
"mode": "default",
"next_seq_id": 180,
"q1": 0,
"q2": 0,
"q3": 0,
"q4": 0,
"target_ram_count": "infinity"
},
"consumer_capacity": 1,
"consumer_utilisation": 1,
"consumers": 1,
"durable": false,
"effective_policy_definition": {},
"exclusive": false,
"exclusive_consumer_tag": null,
"garbage_collection": {
"fullsweep_after": 65535,
"max_heap_size": 0,
"min_bin_vheap_size": 46422,
"min_heap_size": 233,
"minor_gcs": 16174
},
"head_message_timestamp": null,
"idle_since": "2021-06-28 15:54:14",
"memory": 15840,
"message_bytes": 0,
"message_bytes_paged_out": 0,
"message_bytes_persistent": 0,
"message_bytes_ram": 0,
"message_bytes_ready": 0,
"message_bytes_unacknowledged": 0,
"message_stats": {
"ack": 180,
"ack_details": {
"rate": 0
},
"deliver": 180,
"deliver_details": {
"rate": 0
},
"deliver_get": 180,
"deliver_get_details": {
"rate": 0
},
"deliver_no_ack": 0,
"deliver_no_ack_details": {
"rate": 0
},
"get": 0,
"get_details": {
"rate": 0
},
"get_empty": 0,
"get_empty_details": {
"rate": 0
},
"get_no_ack": 0,
"get_no_ack_details": {
"rate": 0
},
"publish": 180,
"publish_details": {
"rate": 0
},
"redeliver": 0,
"redeliver_details": {
"rate": 0
}
},
"messages": 0,
"messages_details": {
"rate": 0
},
"messages_paged_out": 0,
"messages_persistent": 0,
"messages_ram": 0,
"messages_ready": 0,
"messages_ready_details": {
"rate": 0
},
"messages_ready_ram": 0,
"messages_unacknowledged": 0,
"messages_unacknowledged_details": {
"rate": 0
},
"messages_unacknowledged_ram": 0,
"name": "39fd2caf-63e5-41e3-c15a-ba8fa11434b2",
"node": "rabbit@rmqserver",
"operator_policy": null,
"policy": null,
"recoverable_slaves": null,
"reductions": 11766294,
"reductions_details": {
"rate": 0
},
"single_active_consumer_tag": null,
"state": "running",
"type": "classic",
"vhost": "/"
},
{
"arguments": {
"x-expires": 300000
},
"auto_delete": false,
"backing_queue_status": {
"avg_ack_egress_rate": 0,
"avg_ack_ingress_rate": 0,
"avg_egress_rate": 0,
"avg_ingress_rate": 0,
"delta": [
"delta",
"undefined",
0,
0,
"undefined"
],
"len": 0,
"mode": "default",
"next_seq_id": 177,
"q1": 0,
"q2": 0,
"q3": 0,
"q4": 0,
"target_ram_count": "infinity"
},
"consumer_capacity": 1,
"consumer_utilisation": 1,
"consumers": 1,
"durable": false,
"effective_policy_definition": {},
"exclusive": false,
"exclusive_consumer_tag": null,
"garbage_collection": {
"fullsweep_after": 65535,
"max_heap_size": 0,
"min_bin_vheap_size": 46422,
"min_heap_size": 233,
"minor_gcs": 16205
},
"head_message_timestamp": null,
"idle_since": "2021-06-28 15:54:14",
"memory": 15600,
"message_bytes": 0,
"message_bytes_paged_out": 0,
"message_bytes_persistent": 0,
"message_bytes_ram": 0,
"message_bytes_ready": 0,
"message_bytes_unacknowledged": 0,
"message_stats": {
"ack": 177,
"ack_details": {
"rate": 0
},
"deliver": 177,
"deliver_details": {
"rate": 0
},
"deliver_get": 177,
"deliver_get_details": {
"rate": 0
},
"deliver_no_ack": 0,
"deliver_no_ack_details": {
"rate": 0
},
"get": 0,
"get_details": {
"rate": 0
},
"get_empty": 0,
"get_empty_details": {
"rate": 0
},
"get_no_ack": 0,
"get_no_ack_details": {
"rate": 0
},
"publish": 177,
"publish_details": {
"rate": 0
},
"redeliver": 0,
"redeliver_details": {
"rate": 0
}
},
"messages": 0,
"messages_details": {
"rate": 0
},
"messages_paged_out": 0,
"messages_persistent": 0,
"messages_ram": 0,
"messages_ready": 0,
"messages_ready_details": {
"rate": 0
},
"messages_ready_ram": 0,
"messages_unacknowledged": 0,
"messages_unacknowledged_details": {
"rate": 0
},
"messages_unacknowledged_ram": 0,
"name": "39fd2cb4-aa2d-c08b-457a-62d0893523a1",
"node": "rabbit@rmqserver",
"operator_policy": null,
"policy": null,
"recoverable_slaves": null,
"reductions": 11706656,
"reductions_details": {
"rate": 0
},
"single_active_consumer_tag": null,
"state": "running",
"type": "classic",
"vhost": "/"
},
{
"arguments": {
"x-expires": 300000
},
"auto_delete": false,
"backing_queue_status": {
"avg_ack_egress_rate": 0,
"avg_ack_ingress_rate": 0,
"avg_egress_rate": 0,
"avg_ingress_rate": 0,
"delta": [
"delta",
"undefined",
0,
0,
"undefined"
],
"len": 0,
"mode": "default",
"next_seq_id": 175,
"q1": 0,
"q2": 0,
"q3": 0,
"q4": 0,
"target_ram_count": "infinity"
},
"consumer_capacity": 1,
"consumer_utilisation": 1,
"consumers": 1,
"durable": false,
"effective_policy_definition": {},
"exclusive": false,
"exclusive_consumer_tag": null,
"garbage_collection": {
"fullsweep_after": 65535,
"max_heap_size": 0,
"min_bin_vheap_size": 46422,
"min_heap_size": 233,
"minor_gcs": 16183
},
"head_message_timestamp": null,
"idle_since": "2021-06-28 15:54:15",
"memory": 15584,
"message_bytes": 0,
"message_bytes_paged_out": 0,
"message_bytes_persistent": 0,
"message_bytes_ram": 0,
"message_bytes_ready": 0,
"message_bytes_unacknowledged": 0,
"message_stats": {
"ack": 175,
"ack_details": {
"rate": 0
},
"deliver": 175,
"deliver_details": {
"rate": 0
},
"deliver_get": 175,
"deliver_get_details": {
"rate": 0
},
"deliver_no_ack": 0,
"deliver_no_ack_details": {
"rate": 0
},
"get": 0,
"get_details": {
"rate": 0
},
"get_empty": 0,
"get_empty_details": {
"rate": 0
},
"get_no_ack": 0,
"get_no_ack_details": {
"rate": 0
},
"publish": 175,
"publish_details": {
"rate": 0
},
"redeliver": 0,
"redeliver_details": {
"rate": 0
}
},
"messages": 0,
"messages_details": {
"rate": 0
},
"messages_paged_out": 0,
"messages_persistent": 0,
"messages_ram": 0,
"messages_ready": 0,
"messages_ready_details": {
"rate": 0
},
"messages_ready_ram": 0,
"messages_unacknowledged": 0,
"messages_unacknowledged_details": {
"rate": 0
},
"messages_unacknowledged_ram": 0,
"name": "39fd2cb5-3820-e01b-6e20-ba29d5553fc3",
"node": "rabbit@rmqserver",
"operator_policy": null,
"policy": null,
"recoverable_slaves": null,
"reductions": 11649471,
"reductions_details": {
"rate": 0
},
"single_active_consumer_tag": null,
"state": "running",
"type": "classic",
"vhost": "/"
}
]