fix(outputs.opensearch): Correctly error during failures or disconnect (#15157)
This commit is contained in:
parent
2acae45d09
commit
6e3577f40e
|
|
@ -142,6 +142,11 @@ func (o *Opensearch) Connect() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = o.osClient.Ping()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to ping OpenSearch server: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -296,9 +301,10 @@ func (o *Opensearch) Write(metrics []telegraf.Metric) error {
|
||||||
|
|
||||||
// Report the indexer statistics
|
// Report the indexer statistics
|
||||||
stats := bulkIndxr.Stats()
|
stats := bulkIndxr.Stats()
|
||||||
if stats.NumAdded < uint64(len(metrics)) {
|
if stats.NumFailed > 0 {
|
||||||
return fmt.Errorf("indexed [%d] documents with [%d] errors", stats.NumAdded, stats.NumFailed)
|
return fmt.Errorf("failed to index [%d] documents", stats.NumFailed)
|
||||||
}
|
}
|
||||||
|
|
||||||
o.Log.Debugf("Successfully indexed [%d] documents", stats.NumAdded)
|
o.Log.Debugf("Successfully indexed [%d] documents", stats.NumAdded)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -364,7 +370,6 @@ func (o *Opensearch) GetIndexName(metric telegraf.Metric) (string, error) {
|
||||||
if strings.Contains(indexName, "{{") {
|
if strings.Contains(indexName, "{{") {
|
||||||
return "", fmt.Errorf("failed to evaluate valid indexname: %s", indexName)
|
return "", fmt.Errorf("failed to evaluate valid indexname: %s", indexName)
|
||||||
}
|
}
|
||||||
o.Log.Debugf("indexName- %s", indexName)
|
|
||||||
return indexName, nil
|
return indexName, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -253,3 +253,65 @@ func TestAuthorizationHeaderWhenBearerTokenIsPresent(t *testing.T) {
|
||||||
err = e.Write(testutil.MockMetrics())
|
err = e.Write(testutil.MockMetrics())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDisconnectedServerOnConnect(t *testing.T) {
|
||||||
|
ts := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {}))
|
||||||
|
|
||||||
|
urls := []string{"http://" + ts.Listener.Addr().String()}
|
||||||
|
|
||||||
|
e := &Opensearch{
|
||||||
|
URLs: urls,
|
||||||
|
IndexName: `{{.Tag "tag1"}}-{{.Time.Format "2006-01-02"}}`,
|
||||||
|
Timeout: config.Duration(time.Second * 5),
|
||||||
|
EnableGzip: false,
|
||||||
|
ManageTemplate: false,
|
||||||
|
Log: testutil.Logger{},
|
||||||
|
AuthBearerToken: config.NewSecret([]byte("0123456789abcdef")),
|
||||||
|
}
|
||||||
|
e.indexTmpl, _ = template.New("index").Parse(e.IndexName)
|
||||||
|
|
||||||
|
// Close the server right before we try to connect.
|
||||||
|
ts.Close()
|
||||||
|
require.Error(t, e.Connect())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDisconnectedServerOnWrite(t *testing.T) {
|
||||||
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
switch r.URL.Path {
|
||||||
|
case "/_bulk":
|
||||||
|
require.Equal(t, "Bearer 0123456789abcdef", r.Header.Get("Authorization"))
|
||||||
|
_, err := w.Write([]byte("{}"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
_, err := w.Write([]byte(`{"version": {"number": "7.8"}}`))
|
||||||
|
require.NoError(t, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
defer ts.Close()
|
||||||
|
|
||||||
|
urls := []string{"http://" + ts.Listener.Addr().String()}
|
||||||
|
|
||||||
|
e := &Opensearch{
|
||||||
|
URLs: urls,
|
||||||
|
IndexName: `{{.Tag "tag1"}}-{{.Time.Format "2006-01-02"}}`,
|
||||||
|
Timeout: config.Duration(time.Second * 5),
|
||||||
|
EnableGzip: false,
|
||||||
|
ManageTemplate: false,
|
||||||
|
Log: testutil.Logger{},
|
||||||
|
AuthBearerToken: config.NewSecret([]byte("0123456789abcdef")),
|
||||||
|
}
|
||||||
|
e.indexTmpl, _ = template.New("index").Parse(e.IndexName)
|
||||||
|
|
||||||
|
require.NoError(t, e.Connect())
|
||||||
|
|
||||||
|
err := e.Write(testutil.MockMetrics())
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Close the server right before we try to write a second time.
|
||||||
|
ts.Close()
|
||||||
|
|
||||||
|
err = e.Write(testutil.MockMetrics())
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue