feat(inputs.gnmi): Add keepalive settings (#15171)
Co-authored-by: Hunter Kelly <retnuh@gmail.com>
This commit is contained in:
parent
1214de6ed6
commit
c443b762b2
|
|
@ -52,6 +52,18 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
||||||
## redial in case of failures after
|
## redial in case of failures after
|
||||||
# redial = "10s"
|
# redial = "10s"
|
||||||
|
|
||||||
|
## gRPC Keepalive settings
|
||||||
|
## See https://pkg.go.dev/google.golang.org/grpc/keepalive
|
||||||
|
## The client will ping the server to see if the transport is still alive if it has
|
||||||
|
## not see any activity for the given time.
|
||||||
|
## If not set, none of the keep-alive setting (including those below) will be applied.
|
||||||
|
## If set and set below 10 seconds, the gRPC library will apply a minimum value of 10s will be used instead.
|
||||||
|
# keepalive_time = ""
|
||||||
|
|
||||||
|
## Timeout for seeing any activity after the keep-alive probe was
|
||||||
|
## sent. If no activity is seen the connection is closed.
|
||||||
|
# keepalive_timeout = ""
|
||||||
|
|
||||||
## gRPC Maximum Message Size
|
## gRPC Maximum Message Size
|
||||||
# max_msg_size = "4MB"
|
# max_msg_size = "4MB"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
"github.com/google/gnxi/utils/xpath"
|
"github.com/google/gnxi/utils/xpath"
|
||||||
gnmiLib "github.com/openconfig/gnmi/proto/gnmi"
|
gnmiLib "github.com/openconfig/gnmi/proto/gnmi"
|
||||||
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/grpc/metadata"
|
"google.golang.org/grpc/metadata"
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
|
|
@ -57,6 +58,8 @@ type GNMI struct {
|
||||||
GuessPathTag bool `toml:"guess_path_tag" deprecated:"1.30.0;use 'path_guessing_strategy' instead"`
|
GuessPathTag bool `toml:"guess_path_tag" deprecated:"1.30.0;use 'path_guessing_strategy' instead"`
|
||||||
GuessPathStrategy string `toml:"path_guessing_strategy"`
|
GuessPathStrategy string `toml:"path_guessing_strategy"`
|
||||||
EnableTLS bool `toml:"enable_tls" deprecated:"1.27.0;use 'tls_enable' instead"`
|
EnableTLS bool `toml:"enable_tls" deprecated:"1.27.0;use 'tls_enable' instead"`
|
||||||
|
KeepaliveTime config.Duration `toml:"keepalive_time"`
|
||||||
|
KeepaliveTimeout config.Duration `toml:"keepalive_timeout"`
|
||||||
Log telegraf.Logger `toml:"-"`
|
Log telegraf.Logger `toml:"-"`
|
||||||
internaltls.ClientConfig
|
internaltls.ClientConfig
|
||||||
|
|
||||||
|
|
@ -233,6 +236,11 @@ func (c *GNMI) Start(acc telegraf.Accumulator) error {
|
||||||
trimSlash: c.TrimFieldNames,
|
trimSlash: c.TrimFieldNames,
|
||||||
guessPathStrategy: c.GuessPathStrategy,
|
guessPathStrategy: c.GuessPathStrategy,
|
||||||
log: c.Log,
|
log: c.Log,
|
||||||
|
ClientParameters: keepalive.ClientParameters{
|
||||||
|
Time: time.Duration(c.KeepaliveTime),
|
||||||
|
Timeout: time.Duration(c.KeepaliveTimeout),
|
||||||
|
PermitWithoutStream: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for ctx.Err() == nil {
|
for ctx.Err() == nil {
|
||||||
if err := h.subscribeGNMI(ctx, acc, tlscfg, request); err != nil && ctx.Err() == nil {
|
if err := h.subscribeGNMI(ctx, acc, tlscfg, request); err != nil && ctx.Err() == nil {
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import (
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
"google.golang.org/protobuf/encoding/protojson"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
|
|
@ -42,6 +43,7 @@ type handler struct {
|
||||||
trimSlash bool
|
trimSlash bool
|
||||||
guessPathStrategy string
|
guessPathStrategy string
|
||||||
log telegraf.Logger
|
log telegraf.Logger
|
||||||
|
keepalive.ClientParameters
|
||||||
}
|
}
|
||||||
|
|
||||||
// SubscribeGNMI and extract telemetry data
|
// SubscribeGNMI and extract telemetry data
|
||||||
|
|
@ -62,6 +64,10 @@ func (h *handler) subscribeGNMI(ctx context.Context, acc telegraf.Accumulator, t
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if h.ClientParameters.Time > 0 {
|
||||||
|
opts = append(opts, grpc.WithKeepaliveParams(h.ClientParameters))
|
||||||
|
}
|
||||||
|
|
||||||
client, err := grpc.DialContext(ctx, h.address, opts...)
|
client, err := grpc.DialContext(ctx, h.address, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to dial: %w", err)
|
return fmt.Errorf("failed to dial: %w", err)
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,18 @@
|
||||||
## redial in case of failures after
|
## redial in case of failures after
|
||||||
# redial = "10s"
|
# redial = "10s"
|
||||||
|
|
||||||
|
## gRPC Keepalive settings
|
||||||
|
## See https://pkg.go.dev/google.golang.org/grpc/keepalive
|
||||||
|
## The client will ping the server to see if the transport is still alive if it has
|
||||||
|
## not see any activity for the given time.
|
||||||
|
## If not set, none of the keep-alive setting (including those below) will be applied.
|
||||||
|
## If set and set below 10 seconds, the gRPC library will apply a minimum value of 10s will be used instead.
|
||||||
|
# keepalive_time = ""
|
||||||
|
|
||||||
|
## Timeout for seeing any activity after the keep-alive probe was
|
||||||
|
## sent. If no activity is seen the connection is closed.
|
||||||
|
# keepalive_timeout = ""
|
||||||
|
|
||||||
## gRPC Maximum Message Size
|
## gRPC Maximum Message Size
|
||||||
# max_msg_size = "4MB"
|
# max_msg_size = "4MB"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue