Fix powerdns_recursor socket_mode option (#6572)
This commit is contained in:
parent
44ab9b44f8
commit
504ccc25a7
|
@ -14,6 +14,16 @@ The powerdns plugin gathers metrics about PowerDNS using unix socket.
|
||||||
unix_sockets = ["/var/run/pdns.controlsocket"]
|
unix_sockets = ["/var/run/pdns.controlsocket"]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Permissions
|
||||||
|
|
||||||
|
Telegraf will need read access to the powerdns control socket.
|
||||||
|
|
||||||
|
On many systems this can be accomplished by adding the `telegraf` user to the
|
||||||
|
`pdns` group:
|
||||||
|
```
|
||||||
|
usermod telegraf -a -G pdns
|
||||||
|
```
|
||||||
|
|
||||||
### Measurements & Fields:
|
### Measurements & Fields:
|
||||||
|
|
||||||
- powerdns
|
- powerdns
|
||||||
|
|
|
@ -18,10 +18,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type PowerdnsRecursor struct {
|
type PowerdnsRecursor struct {
|
||||||
UnixSockets []string
|
UnixSockets []string `toml:"unix_sockets"`
|
||||||
|
|
||||||
SocketDir string `toml:"socket_dir"`
|
SocketDir string `toml:"socket_dir"`
|
||||||
SocketMode uint32 `toml:"socket_mode"`
|
SocketMode string `toml:"socket_mode"`
|
||||||
|
|
||||||
|
mode uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
var defaultTimeout = 5 * time.Second
|
var defaultTimeout = 5 * time.Second
|
||||||
|
@ -45,6 +46,18 @@ func (p *PowerdnsRecursor) Description() string {
|
||||||
return "Read metrics from one or many PowerDNS Recursor servers"
|
return "Read metrics from one or many PowerDNS Recursor servers"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *PowerdnsRecursor) Init() error {
|
||||||
|
if p.SocketMode != "" {
|
||||||
|
mode, err := strconv.ParseUint(p.SocketMode, 8, 32)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not parse socket_mode: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
p.mode = uint32(mode)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (p *PowerdnsRecursor) Gather(acc telegraf.Accumulator) error {
|
func (p *PowerdnsRecursor) Gather(acc telegraf.Accumulator) error {
|
||||||
if len(p.UnixSockets) == 0 {
|
if len(p.UnixSockets) == 0 {
|
||||||
return p.gatherServer("/var/run/pdns_recursor.controlsocket", acc)
|
return p.gatherServer("/var/run/pdns_recursor.controlsocket", acc)
|
||||||
|
@ -79,11 +92,7 @@ func (p *PowerdnsRecursor) gatherServer(address string, acc telegraf.Accumulator
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
perm := uint32(0666)
|
if err := os.Chmod(recvSocket, os.FileMode(p.mode)); err != nil {
|
||||||
if p.SocketMode > 0 {
|
|
||||||
perm = p.SocketMode
|
|
||||||
}
|
|
||||||
if err := os.Chmod(recvSocket, os.FileMode(perm)); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
|
@ -151,6 +160,8 @@ func parseResponse(metrics string) map[string]interface{} {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
inputs.Add("powerdns_recursor", func() telegraf.Input {
|
inputs.Add("powerdns_recursor", func() telegraf.Input {
|
||||||
return &PowerdnsRecursor{}
|
return &PowerdnsRecursor{
|
||||||
|
mode: uint32(0666),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,10 @@ func TestPowerdnsRecursorGeneratesMetrics(t *testing.T) {
|
||||||
p := &PowerdnsRecursor{
|
p := &PowerdnsRecursor{
|
||||||
UnixSockets: []string{controlSocket},
|
UnixSockets: []string{controlSocket},
|
||||||
SocketDir: "/tmp",
|
SocketDir: "/tmp",
|
||||||
|
SocketMode: "0666",
|
||||||
}
|
}
|
||||||
|
err = p.Init()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue