Skip to content

Commit

Permalink
Add support for TLS and username/password auth to aerospike input (#4183
Browse files Browse the repository at this point in the history
)
  • Loading branch information
danielnelson authored May 23, 2018
1 parent ebb97c3 commit f7e0860
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
21 changes: 21 additions & 0 deletions plugins/inputs/aerospike/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,27 @@ The metric names, to make it less complicated in querying, have replaced all `-`

All metrics are attempted to be cast to integers, then booleans, then strings.

### Configuration:
```toml
# Read stats from aerospike server(s)
[[inputs.aerospike]]
## Aerospike servers to connect to (with port)
## This plugin will query all namespaces the aerospike
## server has configured and get stats for them.
servers = ["localhost:3000"]

# username = "telegraf"
# password = "pa$$word"

## Optional TLS Config
# enable_tls = false
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## If false, skip chain & host verification
# insecure_skip_verify = true
```

### Measurements:

The aerospike metrics are under two measurement names:
Expand Down
43 changes: 41 additions & 2 deletions plugins/inputs/aerospike/aerospike.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package aerospike

import (
"crypto/tls"
"errors"
"log"
"net"
Expand All @@ -10,20 +11,42 @@ import (
"time"

"github.com/influxdata/telegraf"
tlsint "github.com/influxdata/telegraf/internal/tls"
"github.com/influxdata/telegraf/plugins/inputs"

as "github.com/aerospike/aerospike-client-go"
)

type Aerospike struct {
Servers []string
Servers []string `toml:"servers"`

Username string `toml:"username"`
Password string `toml:"password"`

EnableTLS bool `toml:"enable_tls"`
EnableSSL bool `toml:"enable_ssl"` // deprecated in 1.7; use enable_tls
tlsint.ClientConfig

initialized bool
tlsConfig *tls.Config
}

var sampleConfig = `
## Aerospike servers to connect to (with port)
## This plugin will query all namespaces the aerospike
## server has configured and get stats for them.
servers = ["localhost:3000"]
# username = "telegraf"
# password = "pa$$word"
## Optional TLS Config
# enable_tls = false
# tls_ca = "/etc/telegraf/ca.pem"
# tls_cert = "/etc/telegraf/cert.pem"
# tls_key = "/etc/telegraf/key.pem"
## If false, skip chain & host verification
# insecure_skip_verify = true
`

func (a *Aerospike) SampleConfig() string {
Expand All @@ -35,6 +58,18 @@ func (a *Aerospike) Description() string {
}

func (a *Aerospike) Gather(acc telegraf.Accumulator) error {
if !a.initialized {
tlsConfig, err := a.ClientConfig.TLSConfig()
if err != nil {
return err
}
if tlsConfig == nil && (a.EnableTLS || a.EnableSSL) {
tlsConfig = &tls.Config{}
}
a.tlsConfig = tlsConfig
a.initialized = true
}

if len(a.Servers) == 0 {
return a.gatherServer("127.0.0.1:3000", acc)
}
Expand Down Expand Up @@ -63,7 +98,11 @@ func (a *Aerospike) gatherServer(hostport string, acc telegraf.Accumulator) erro
iport = 3000
}

c, err := as.NewClient(host, iport)
policy := as.NewClientPolicy()
policy.User = a.Username
policy.Password = a.Password
policy.TlsConfig = a.tlsConfig
c, err := as.NewClientWithPolicy(policy, host, iport)
if err != nil {
return err
}
Expand Down

0 comments on commit f7e0860

Please sign in to comment.