From 2545fc9580c19acbba3bee22a086418c655e75d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20P=C3=A9rez-Aradros=20Herce?= Date: Mon, 16 Apr 2018 16:32:41 +0200 Subject: [PATCH] Don't stop Metricbeat if aerospike server is down Ensure Aerospike module constructor doesn't return an error if it cannot immediately connect to the server. --- CHANGELOG.asciidoc | 1 + .../module/aerospike/namespace/namespace.go | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 221823cc3fe..25ab6b31ccc 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -77,6 +77,7 @@ https://github.com/elastic/beats/compare/v6.0.0-beta2...master[Check the HEAD di - Fix Windows perfmon metricset so that it sends metrics when an error occurs. {pull}6542[6542] - Fix Kubernetes calculated fields store. {pull}6564{6564} - Exclude bind mounts in fsstat and filesystem metricsets. {pull}6819[6819] +- Don't stop Metricbeat if aerospike server is down. {pull}6874[6874] *Packetbeat* diff --git a/metricbeat/module/aerospike/namespace/namespace.go b/metricbeat/module/aerospike/namespace/namespace.go index e36519fef1c..c7e0afcb2b5 100644 --- a/metricbeat/module/aerospike/namespace/namespace.go +++ b/metricbeat/module/aerospike/namespace/namespace.go @@ -27,6 +27,7 @@ func init() { // multiple fetch calls. type MetricSet struct { mb.BaseMetricSet + host *as.Host client *as.Client } @@ -47,14 +48,9 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { return nil, errors.Wrap(err, "Invalid host format, expected hostname:port") } - client, err := as.NewClientWithPolicyAndHost(as.NewClientPolicy(), host) - if err != nil { - return nil, err - } - return &MetricSet{ BaseMetricSet: base, - client: client, + host: host, }, nil } @@ -64,6 +60,10 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { func (m *MetricSet) Fetch() ([]common.MapStr, error) { var events []common.MapStr + if err := m.connect(); err != nil { + return nil, err + } + for _, node := range m.client.GetNodes() { info, err := as.RequestNodeInfo(node, "namespaces") if err != nil { @@ -91,3 +91,15 @@ func (m *MetricSet) Fetch() ([]common.MapStr, error) { return events, nil } + +// create an aerospike client if it doesn't exist yet +func (m *MetricSet) connect() error { + if m.client == nil { + client, err := as.NewClientWithPolicyAndHost(as.NewClientPolicy(), m.host) + if err != nil { + return err + } + m.client = client + } + return nil +}