feat: add coralogix dialect to opentelemetry (#11622)

This commit is contained in:
Povilas Versockas 2022-08-08 16:39:33 +03:00 committed by GitHub
parent 7bd9c91ebe
commit ce2053d26d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 64 additions and 1 deletions

View File

@ -32,6 +32,17 @@ and agents via gRPC.
## Supports: "gzip", "none" ## Supports: "gzip", "none"
# compression = "gzip" # compression = "gzip"
## Configuration options for the Coralogix dialect
## Enable the following section of you use this plugin with a Coralogix endpoint
# [outputs.opentelemetry.coralogix]
# ## Your Coralogix private key (required).
# ## Please note that this is sensitive data!
# private_key = "your_coralogix_key"
#
# ## Application and subsystem names for the metrics (required)
# application = "$NAMESPACE"
# subsystem = "$HOSTNAME"
## Additional OpenTelemetry resource attributes ## Additional OpenTelemetry resource attributes
# [outputs.opentelemetry.attributes] # [outputs.opentelemetry.attributes]
# "service.name" = "demo" # "service.name" = "demo"
@ -41,6 +52,23 @@ and agents via gRPC.
# key1 = "value1" # key1 = "value1"
``` ```
## Supported dialects
### Coralogix
This plugins supports sending data to a [Coralogix](https://coralogix.com)
server by enabling the corresponding dialect by uncommenting
the `[output.opentelemetry.coralogix]` section.
There, you can find the required setting to interact with the server.
- The `private_key` is your Private Key, which you can find in Settings > Send Your Data.
- The `application`, is your application name, which will be added to your metric attributes.
- The `subsystem`, is your subsystem, which will be added to your metric attributes.
More information in the
[Getting Started page](https://coralogix.com/docs/guide-first-steps-coralogix/).
### Schema ### Schema
The InfluxDB->OpenTelemetry conversion [schema][] and [implementation][] are The InfluxDB->OpenTelemetry conversion [schema][] and [implementation][] are

View File

@ -4,8 +4,12 @@ package opentelemetry
import ( import (
"context" "context"
_ "embed" _ "embed"
"fmt"
"runtime"
"time" "time"
ntls "crypto/tls"
"github.com/influxdata/influxdb-observability/common" "github.com/influxdata/influxdb-observability/common"
"github.com/influxdata/influxdb-observability/influx2otel" "github.com/influxdata/influxdb-observability/influx2otel"
"go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp" "go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
@ -23,6 +27,8 @@ import (
"github.com/influxdata/telegraf/plugins/outputs" "github.com/influxdata/telegraf/plugins/outputs"
) )
var userAgent = fmt.Sprintf("telegraf (%s/%s)", runtime.GOOS, runtime.GOARCH)
// DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data. // DO NOT REMOVE THE NEXT TWO LINES! This is required to embed the sampleConfig data.
//go:embed sample.conf //go:embed sample.conf
var sampleConfig string var sampleConfig string
@ -35,6 +41,7 @@ type OpenTelemetry struct {
Compression string `toml:"compression"` Compression string `toml:"compression"`
Headers map[string]string `toml:"headers"` Headers map[string]string `toml:"headers"`
Attributes map[string]string `toml:"attributes"` Attributes map[string]string `toml:"attributes"`
Coralogix *CoralogixConfig `toml:"coralogix"`
Log telegraf.Logger `toml:"-"` Log telegraf.Logger `toml:"-"`
@ -44,6 +51,12 @@ type OpenTelemetry struct {
callOptions []grpc.CallOption callOptions []grpc.CallOption
} }
type CoralogixConfig struct {
AppName string `toml:"application"`
SubSystem string `toml:"subsystem"`
PrivateKey string `toml:"private_key"`
}
func (*OpenTelemetry) SampleConfig() string { func (*OpenTelemetry) SampleConfig() string {
return sampleConfig return sampleConfig
} }
@ -60,6 +73,14 @@ func (o *OpenTelemetry) Connect() error {
if o.Compression == "" { if o.Compression == "" {
o.Compression = defaultCompression o.Compression = defaultCompression
} }
if o.Coralogix != nil {
if o.Headers == nil {
o.Headers = make(map[string]string)
}
o.Headers["ApplicationName"] = o.Coralogix.AppName
o.Headers["ApiName"] = o.Coralogix.SubSystem
o.Headers["Authorization"] = "Bearer " + o.Coralogix.PrivateKey
}
metricsConverter, err := influx2otel.NewLineProtocolToOtelMetrics(logger) metricsConverter, err := influx2otel.NewLineProtocolToOtelMetrics(logger)
if err != nil { if err != nil {
@ -71,11 +92,14 @@ func (o *OpenTelemetry) Connect() error {
return err return err
} else if tlsConfig != nil { } else if tlsConfig != nil {
grpcTLSDialOption = grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)) grpcTLSDialOption = grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig))
} else if o.Coralogix != nil {
// For coralogix, we enforce GRPC connection with TLS
grpcTLSDialOption = grpc.WithTransportCredentials(credentials.NewTLS(&ntls.Config{}))
} else { } else {
grpcTLSDialOption = grpc.WithTransportCredentials(insecure.NewCredentials()) grpcTLSDialOption = grpc.WithTransportCredentials(insecure.NewCredentials())
} }
grpcClientConn, err := grpc.Dial(o.ServiceAddress, grpcTLSDialOption) grpcClientConn, err := grpc.Dial(o.ServiceAddress, grpcTLSDialOption, grpc.WithUserAgent(userAgent))
if err != nil { if err != nil {
return err return err
} }

View File

@ -24,6 +24,17 @@
## Supports: "gzip", "none" ## Supports: "gzip", "none"
# compression = "gzip" # compression = "gzip"
## Configuration options for the Coralogix dialect
## Enable the following section of you use this plugin with a Coralogix endpoint
# [outputs.opentelemetry.coralogix]
# ## Your Coralogix private key (required).
# ## Please note that this is sensitive data!
# private_key = "your_coralogix_key"
#
# ## Application and subsystem names for the metrics (required)
# application = "$NAMESPACE"
# subsystem = "$HOSTNAME"
## Additional OpenTelemetry resource attributes ## Additional OpenTelemetry resource attributes
# [outputs.opentelemetry.attributes] # [outputs.opentelemetry.attributes]
# "service.name" = "demo" # "service.name" = "demo"