test(inputs.syslog): Migrate unit-tests to test-cases (#14784)
This commit is contained in:
parent
bb62677b2d
commit
2874ad13aa
|
|
@ -1,65 +0,0 @@
|
||||||
package syslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
|
||||||
"github.com/influxdata/telegraf/config"
|
|
||||||
framing "github.com/influxdata/telegraf/internal/syslog"
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
pki = testutil.NewPKI("../../../testutil/pki")
|
|
||||||
)
|
|
||||||
|
|
||||||
type testCasePacket struct {
|
|
||||||
name string
|
|
||||||
data []byte
|
|
||||||
wantBestEffort telegraf.Metric
|
|
||||||
wantStrict telegraf.Metric
|
|
||||||
werr bool
|
|
||||||
}
|
|
||||||
|
|
||||||
type testCaseStream struct {
|
|
||||||
name string
|
|
||||||
data []byte
|
|
||||||
wantBestEffort []telegraf.Metric
|
|
||||||
wantStrict []telegraf.Metric
|
|
||||||
werr int // how many errors we expect in the strict mode?
|
|
||||||
}
|
|
||||||
|
|
||||||
func newUDPSyslogReceiver(address string, bestEffort bool, rfc syslogRFC) *Syslog {
|
|
||||||
return &Syslog{
|
|
||||||
Address: address,
|
|
||||||
now: func() time.Time {
|
|
||||||
return defaultTime
|
|
||||||
},
|
|
||||||
BestEffort: bestEffort,
|
|
||||||
SyslogStandard: rfc,
|
|
||||||
Separator: "_",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func newTCPSyslogReceiver(address string, keepAlive *config.Duration, maxConn int, bestEffort bool, f framing.Framing) *Syslog {
|
|
||||||
d := config.Duration(defaultReadTimeout)
|
|
||||||
s := &Syslog{
|
|
||||||
Address: address,
|
|
||||||
now: func() time.Time {
|
|
||||||
return defaultTime
|
|
||||||
},
|
|
||||||
Framing: f,
|
|
||||||
ReadTimeout: &d,
|
|
||||||
BestEffort: bestEffort,
|
|
||||||
SyslogStandard: syslogRFC5424,
|
|
||||||
Separator: "_",
|
|
||||||
}
|
|
||||||
if keepAlive != nil {
|
|
||||||
s.KeepAlivePeriod = keepAlive
|
|
||||||
}
|
|
||||||
if maxConn > 0 {
|
|
||||||
s.MaxConnections = maxConn
|
|
||||||
}
|
|
||||||
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
@ -1,302 +0,0 @@
|
||||||
package syslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/tls"
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
|
||||||
"github.com/influxdata/telegraf/config"
|
|
||||||
framing "github.com/influxdata/telegraf/internal/syslog"
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getTestCasesForNonTransparent(hasRemoteAddr bool) []testCaseStream {
|
|
||||||
testCases := []testCaseStream{
|
|
||||||
{
|
|
||||||
name: "1st/avg/ok",
|
|
||||||
data: []byte(
|
|
||||||
`<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] ` +
|
|
||||||
`"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
werr: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/min/ok//2nd/min/ok",
|
|
||||||
data: []byte("<1>2 - - - - - -\n<4>11 - - - - - -\n"),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "warning",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(11),
|
|
||||||
"severity_code": 4,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime.Add(time.Nanosecond),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "warning",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(11),
|
|
||||||
"severity_code": 4,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime.Add(time.Nanosecond),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasRemoteAddr {
|
|
||||||
for _, tc := range testCases {
|
|
||||||
for _, m := range tc.wantStrict {
|
|
||||||
m.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
for _, m := range tc.wantBestEffort {
|
|
||||||
m.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return testCases
|
|
||||||
}
|
|
||||||
|
|
||||||
func testStrictNonTransparent(t *testing.T, protocol string, address string, wantTLS bool, keepAlive *config.Duration) {
|
|
||||||
for _, tc := range getTestCasesForNonTransparent(protocol != "unix") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Creation of a strict mode receiver
|
|
||||||
receiver := newTCPSyslogReceiver(protocol+"://"+address, keepAlive, 10, false, framing.NonTransparent)
|
|
||||||
require.NotNil(t, receiver)
|
|
||||||
if wantTLS {
|
|
||||||
receiver.ServerConfig = *pki.TLSServerConfig()
|
|
||||||
}
|
|
||||||
require.Equal(t, receiver.KeepAlivePeriod, keepAlive)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
var conn net.Conn
|
|
||||||
var err error
|
|
||||||
if wantTLS {
|
|
||||||
config, e := pki.TLSClientConfig().TLSConfig()
|
|
||||||
require.NoError(t, e)
|
|
||||||
config.ServerName = "localhost"
|
|
||||||
conn, err = tls.Dial(protocol, address, config)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
} else {
|
|
||||||
conn, err = net.Dial(protocol, address)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer conn.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
acc.Errors = make([]error, 0)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
conn.Close()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Wait that the number of data points is accumulated
|
|
||||||
// Since the receiver is running concurrently
|
|
||||||
if tc.wantStrict != nil {
|
|
||||||
acc.Wait(len(tc.wantStrict))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait the parsing error
|
|
||||||
acc.WaitError(tc.werr)
|
|
||||||
|
|
||||||
// Verify
|
|
||||||
if len(acc.Errors) != tc.werr {
|
|
||||||
t.Fatalf("Got unexpected errors. want error = %v, errors = %v\n", tc.werr, acc.Errors)
|
|
||||||
}
|
|
||||||
testutil.RequireMetricsEqual(t, tc.wantStrict, acc.GetTelegrafMetrics())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testBestEffortNonTransparent(t *testing.T, protocol string, address string, wantTLS bool) {
|
|
||||||
keepAlive := (*config.Duration)(nil)
|
|
||||||
for _, tc := range getTestCasesForNonTransparent(protocol != "unix") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Creation of a best effort mode receiver
|
|
||||||
receiver := newTCPSyslogReceiver(protocol+"://"+address, keepAlive, 10, true, framing.NonTransparent)
|
|
||||||
require.NotNil(t, receiver)
|
|
||||||
if wantTLS {
|
|
||||||
receiver.ServerConfig = *pki.TLSServerConfig()
|
|
||||||
}
|
|
||||||
require.Equal(t, receiver.KeepAlivePeriod, keepAlive)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
var conn net.Conn
|
|
||||||
var err error
|
|
||||||
if wantTLS {
|
|
||||||
config, e := pki.TLSClientConfig().TLSConfig()
|
|
||||||
require.NoError(t, e)
|
|
||||||
config.ServerName = "localhost"
|
|
||||||
conn, err = tls.Dial(protocol, address, config)
|
|
||||||
} else {
|
|
||||||
conn, err = net.Dial(protocol, address)
|
|
||||||
}
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
acc.Errors = make([]error, 0)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
require.NoError(t, err)
|
|
||||||
conn.Close()
|
|
||||||
|
|
||||||
// Wait that the number of data points is accumulated
|
|
||||||
// Since the receiver is running concurrently
|
|
||||||
if tc.wantBestEffort != nil {
|
|
||||||
acc.Wait(len(tc.wantBestEffort))
|
|
||||||
}
|
|
||||||
|
|
||||||
testutil.RequireMetricsEqual(t, tc.wantStrict, acc.GetTelegrafMetrics())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrict_tcp(t *testing.T) {
|
|
||||||
testStrictNonTransparent(t, "tcp", address, false, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentBestEffort_tcp(t *testing.T) {
|
|
||||||
testBestEffortNonTransparent(t, "tcp", address, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrict_tcp_tls(t *testing.T) {
|
|
||||||
testStrictNonTransparent(t, "tcp", address, true, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentBestEffort_tcp_tls(t *testing.T) {
|
|
||||||
testBestEffortNonTransparent(t, "tcp", address, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrictWithKeepAlive_tcp_tls(t *testing.T) {
|
|
||||||
d := config.Duration(time.Minute)
|
|
||||||
testStrictNonTransparent(t, "tcp", address, true, &d)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrictWithZeroKeepAlive_tcp_tls(t *testing.T) {
|
|
||||||
d := config.Duration(0)
|
|
||||||
testStrictNonTransparent(t, "tcp", address, true, &d)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrict_unix(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testStrictNonTransparent(t, "unix", sock, false, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentBestEffort_unix(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testBestEffortNonTransparent(t, "unix", sock, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentStrict_unix_tls(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testStrictNonTransparent(t, "unix", sock, true, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNonTransparentBestEffort_unix_tls(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testBestEffortNonTransparent(t, "unix", sock, true)
|
|
||||||
}
|
|
||||||
|
|
@ -1,501 +0,0 @@
|
||||||
package syslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/tls"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
|
||||||
"github.com/influxdata/telegraf/config"
|
|
||||||
framing "github.com/influxdata/telegraf/internal/syslog"
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getTestCasesForOctetCounting(hasRemoteAddr bool) []testCaseStream {
|
|
||||||
testCases := []testCaseStream{
|
|
||||||
{
|
|
||||||
name: "1st/avg/ok",
|
|
||||||
data: []byte(
|
|
||||||
`188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] ` +
|
|
||||||
`"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/min/ok//2nd/min/ok",
|
|
||||||
data: []byte("16 <1>2 - - - - - -17 <4>11 - - - - - -"),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "warning",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(11),
|
|
||||||
"severity_code": 4,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime.Add(time.Nanosecond),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "warning",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(11),
|
|
||||||
"severity_code": 4,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime.Add(time.Nanosecond),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/utf8/ok",
|
|
||||||
data: []byte("23 <1>1 - - - - - - hellø"),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "hellø",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "hellø",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/nl/ok", // newline
|
|
||||||
data: []byte("28 <1>3 - - - - - - hello\nworld"),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(3),
|
|
||||||
"message": "hello\nworld",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(3),
|
|
||||||
"message": "hello\nworld",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/uf/ko", // underflow (msglen less than provided octets)
|
|
||||||
data: []byte("16 <1>2"),
|
|
||||||
wantStrict: nil,
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
werr: 1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/min/ok",
|
|
||||||
data: []byte("16 <1>1 - - - - - -"),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "1st/uf/mf", // The first "underflow" message breaks also the second one
|
|
||||||
data: []byte("16 <1>217 <11>1 - - - - - -"),
|
|
||||||
wantStrict: nil,
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(217),
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
werr: 1,
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// name: "1st/of/ko", // overflow (msglen greater than max allowed octets)
|
|
||||||
// data: []byte(fmt.Sprintf("8193 <%d>%d %s %s %s %s %s 12 %s", maxP, maxV, maxTS, maxH, maxA, maxPID, maxMID, message7681)),
|
|
||||||
// want: []testutil.Metric{},
|
|
||||||
// },
|
|
||||||
{
|
|
||||||
name: "1st/max/ok",
|
|
||||||
data: []byte(fmt.Sprintf("8192 <%d>%d %s %s %s %s %s - %s", maxP, maxV, maxTS, maxH, maxA, maxPID, maxMID, message7681)),
|
|
||||||
wantStrict: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "debug",
|
|
||||||
"facility": "local7",
|
|
||||||
"hostname": maxH,
|
|
||||||
"appname": maxA,
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": maxV,
|
|
||||||
"timestamp": time.Unix(1514764799, 999999000).UnixNano(),
|
|
||||||
"message": message7681,
|
|
||||||
"procid": maxPID,
|
|
||||||
"msgid": maxMID,
|
|
||||||
"facility_code": 23,
|
|
||||||
"severity_code": 7,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
wantBestEffort: []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "debug",
|
|
||||||
"facility": "local7",
|
|
||||||
"hostname": maxH,
|
|
||||||
"appname": maxA,
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": maxV,
|
|
||||||
"timestamp": time.Unix(1514764799, 999999000).UnixNano(),
|
|
||||||
"message": message7681,
|
|
||||||
"procid": maxPID,
|
|
||||||
"msgid": maxMID,
|
|
||||||
"facility_code": 23,
|
|
||||||
"severity_code": 7,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasRemoteAddr {
|
|
||||||
for _, tc := range testCases {
|
|
||||||
for _, m := range tc.wantStrict {
|
|
||||||
m.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
for _, m := range tc.wantBestEffort {
|
|
||||||
m.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return testCases
|
|
||||||
}
|
|
||||||
|
|
||||||
func testStrictOctetCounting(t *testing.T, protocol string, address string, wantTLS bool, keepAlive *config.Duration) {
|
|
||||||
for _, tc := range getTestCasesForOctetCounting(protocol != "unix") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Creation of a strict mode receiver
|
|
||||||
receiver := newTCPSyslogReceiver(protocol+"://"+address, keepAlive, 0, false, framing.OctetCounting)
|
|
||||||
require.NotNil(t, receiver)
|
|
||||||
if wantTLS {
|
|
||||||
receiver.ServerConfig = *pki.TLSServerConfig()
|
|
||||||
}
|
|
||||||
require.Equal(t, receiver.KeepAlivePeriod, keepAlive)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
var conn net.Conn
|
|
||||||
var err error
|
|
||||||
if wantTLS {
|
|
||||||
config, e := pki.TLSClientConfig().TLSConfig()
|
|
||||||
require.NoError(t, e)
|
|
||||||
config.ServerName = "localhost"
|
|
||||||
conn, err = tls.Dial(protocol, address, config)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
} else {
|
|
||||||
conn, err = net.Dial(protocol, address)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
defer conn.Close()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
acc.Errors = make([]error, 0)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
conn.Close()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Wait that the number of data points is accumulated
|
|
||||||
// Since the receiver is running concurrently
|
|
||||||
if tc.wantStrict != nil {
|
|
||||||
acc.Wait(len(tc.wantStrict))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait the parsing error
|
|
||||||
acc.WaitError(tc.werr)
|
|
||||||
|
|
||||||
// Verify
|
|
||||||
if len(acc.Errors) != tc.werr {
|
|
||||||
t.Fatalf("Got unexpected errors. want error = %v, errors = %v\n", tc.werr, acc.Errors)
|
|
||||||
}
|
|
||||||
testutil.RequireMetricsEqual(t, tc.wantStrict, acc.GetTelegrafMetrics())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func testBestEffortOctetCounting(t *testing.T, protocol string, address string, wantTLS bool) {
|
|
||||||
keepAlive := (*config.Duration)(nil)
|
|
||||||
for _, tc := range getTestCasesForOctetCounting(protocol != "unix") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Creation of a best effort mode receiver
|
|
||||||
receiver := newTCPSyslogReceiver(protocol+"://"+address, keepAlive, 0, true, framing.OctetCounting)
|
|
||||||
require.NotNil(t, receiver)
|
|
||||||
if wantTLS {
|
|
||||||
receiver.ServerConfig = *pki.TLSServerConfig()
|
|
||||||
}
|
|
||||||
require.Equal(t, receiver.KeepAlivePeriod, keepAlive)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
var conn net.Conn
|
|
||||||
var err error
|
|
||||||
if wantTLS {
|
|
||||||
config, e := pki.TLSClientConfig().TLSConfig()
|
|
||||||
require.NoError(t, e)
|
|
||||||
config.ServerName = "localhost"
|
|
||||||
conn, err = tls.Dial(protocol, address, config)
|
|
||||||
} else {
|
|
||||||
conn, err = net.Dial(protocol, address)
|
|
||||||
}
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
acc.Errors = make([]error, 0)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
require.NoError(t, err)
|
|
||||||
conn.Close()
|
|
||||||
|
|
||||||
// Wait that the number of data points is accumulated
|
|
||||||
// Since the receiver is running concurrently
|
|
||||||
if tc.wantBestEffort != nil {
|
|
||||||
acc.Wait(len(tc.wantBestEffort))
|
|
||||||
}
|
|
||||||
|
|
||||||
testutil.RequireMetricsEqual(t, tc.wantBestEffort, acc.GetTelegrafMetrics())
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrict_tcp(t *testing.T) {
|
|
||||||
testStrictOctetCounting(t, "tcp", address, false, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingBestEffort_tcp(t *testing.T) {
|
|
||||||
testBestEffortOctetCounting(t, "tcp", address, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrict_tcp_tls(t *testing.T) {
|
|
||||||
testStrictOctetCounting(t, "tcp", address, true, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingBestEffort_tcp_tls(t *testing.T) {
|
|
||||||
testBestEffortOctetCounting(t, "tcp", address, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrictWithKeepAlive_tcp_tls(t *testing.T) {
|
|
||||||
d := config.Duration(time.Minute)
|
|
||||||
testStrictOctetCounting(t, "tcp", address, true, &d)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrictWithZeroKeepAlive_tcp_tls(t *testing.T) {
|
|
||||||
d := config.Duration(0)
|
|
||||||
testStrictOctetCounting(t, "tcp", address, true, &d)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrict_unix(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testStrictOctetCounting(t, "unix", sock, false, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingBestEffort_unix(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testBestEffortOctetCounting(t, "unix", sock, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingStrict_unix_tls(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testStrictOctetCounting(t, "unix", sock, true, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestOctetCountingBestEffort_unix_tls(t *testing.T) {
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
testBestEffortOctetCounting(t, "unix", sock, true)
|
|
||||||
}
|
|
||||||
|
|
@ -1,137 +0,0 @@
|
||||||
package syslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
func timeMustParse(value string) time.Time {
|
|
||||||
format := "Jan 2 15:04:05 2006"
|
|
||||||
t, err := time.Parse(format, value)
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("couldn't parse time: %v", value))
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
||||||
|
|
||||||
func getTestCasesForRFC3164(hasRemoteAddr bool) []testCasePacket {
|
|
||||||
currentYear := time.Now().Year()
|
|
||||||
ts := timeMustParse(fmt.Sprintf("Dec 2 16:31:03 %d", currentYear)).UnixNano()
|
|
||||||
testCases := []testCasePacket{
|
|
||||||
{
|
|
||||||
name: "complete",
|
|
||||||
data: []byte("<13>Dec 2 16:31:03 host app: Test"),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"appname": "app",
|
|
||||||
"severity": "notice",
|
|
||||||
"hostname": "host",
|
|
||||||
"facility": "user",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"timestamp": ts,
|
|
||||||
"message": "Test",
|
|
||||||
"facility_code": 1,
|
|
||||||
"severity_code": 5,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"appname": "app",
|
|
||||||
"severity": "notice",
|
|
||||||
"hostname": "host",
|
|
||||||
"facility": "user",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"timestamp": ts,
|
|
||||||
"message": "Test",
|
|
||||||
"facility_code": 1,
|
|
||||||
"severity_code": 5,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasRemoteAddr {
|
|
||||||
for _, tc := range testCases {
|
|
||||||
if tc.wantStrict != nil {
|
|
||||||
tc.wantStrict.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
if tc.wantBestEffort != nil {
|
|
||||||
tc.wantBestEffort.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return testCases
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRFC3164(t *testing.T, protocol string, address string, bestEffort bool) {
|
|
||||||
for _, tc := range getTestCasesForRFC3164(protocol != "unix") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Create receiver
|
|
||||||
receiver := newUDPSyslogReceiver(protocol+"://"+address, bestEffort, syslogRFC3164)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
conn, err := net.Dial(protocol, address)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
conn.Close()
|
|
||||||
if err != nil {
|
|
||||||
var opErr *net.OpError
|
|
||||||
if errors.As(err, &opErr) {
|
|
||||||
if opErr.Err.Error() == "write: message too long" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Waiting ...
|
|
||||||
if tc.wantStrict == nil && tc.werr || bestEffort && tc.werr {
|
|
||||||
acc.WaitError(1)
|
|
||||||
}
|
|
||||||
if tc.wantBestEffort != nil && bestEffort || tc.wantStrict != nil && !bestEffort {
|
|
||||||
acc.Wait(1) // RFC3164 mandates a syslog message per UDP packet
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compare
|
|
||||||
var got telegraf.Metric
|
|
||||||
var want telegraf.Metric
|
|
||||||
if len(acc.Metrics) > 0 {
|
|
||||||
got = acc.GetTelegrafMetrics()[0]
|
|
||||||
}
|
|
||||||
if bestEffort {
|
|
||||||
want = tc.wantBestEffort
|
|
||||||
} else {
|
|
||||||
want = tc.wantStrict
|
|
||||||
}
|
|
||||||
testutil.RequireMetricEqual(t, want, got)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRFC3164BestEffort_udp(t *testing.T) {
|
|
||||||
testRFC3164(t, "udp", address, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestRFC3164Strict_udp(t *testing.T) {
|
|
||||||
testRFC3164(t, "udp", address, false)
|
|
||||||
}
|
|
||||||
|
|
@ -1,441 +0,0 @@
|
||||||
package syslog
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"sync/atomic"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getTestCasesForRFC5426(hasRemoteAddr bool) []testCasePacket {
|
|
||||||
testCases := []testCasePacket{
|
|
||||||
{
|
|
||||||
name: "complete",
|
|
||||||
data: []byte("<1>1 - - - - - - A"),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "A",
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "A",
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "one/per/packet",
|
|
||||||
data: []byte("<1>3 - - - - - - A<1>4 - - - - - - B"),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(3),
|
|
||||||
"message": "A<1>4 - - - - - - B",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(3),
|
|
||||||
"message": "A<1>4 - - - - - - B",
|
|
||||||
"severity_code": 1,
|
|
||||||
"facility_code": 0,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "average",
|
|
||||||
data: []byte(
|
|
||||||
`<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] ` +
|
|
||||||
`"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "notice",
|
|
||||||
"facility": "daemon",
|
|
||||||
"hostname": "web1",
|
|
||||||
"appname": "someservice",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
|
||||||
"procid": "2341",
|
|
||||||
"msgid": "2",
|
|
||||||
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
|
||||||
"origin": true,
|
|
||||||
"meta_sequence": "14125553",
|
|
||||||
"meta_service": "someservice",
|
|
||||||
"severity_code": 5,
|
|
||||||
"facility_code": 3,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "max",
|
|
||||||
data: []byte(fmt.Sprintf("<%d>%d %s %s %s %s %s - %s", maxP, maxV, maxTS, maxH, maxA, maxPID, maxMID, message7681)),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "debug",
|
|
||||||
"facility": "local7",
|
|
||||||
"hostname": maxH,
|
|
||||||
"appname": maxA,
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": maxV,
|
|
||||||
"timestamp": time.Unix(1514764799, 999999000).UnixNano(),
|
|
||||||
"message": message7681,
|
|
||||||
"procid": maxPID,
|
|
||||||
"msgid": maxMID,
|
|
||||||
"severity_code": 7,
|
|
||||||
"facility_code": 23,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "debug",
|
|
||||||
"facility": "local7",
|
|
||||||
"hostname": maxH,
|
|
||||||
"appname": maxA,
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": maxV,
|
|
||||||
"timestamp": time.Unix(1514764799, 999999000).UnixNano(),
|
|
||||||
"message": message7681,
|
|
||||||
"procid": maxPID,
|
|
||||||
"msgid": maxMID,
|
|
||||||
"severity_code": 7,
|
|
||||||
"facility_code": 23,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "minimal/incomplete",
|
|
||||||
data: []byte("<1>2"),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(2),
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
werr: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "trim message",
|
|
||||||
data: []byte("<1>1 - - - - - - \tA\n"),
|
|
||||||
wantBestEffort: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "\tA",
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
wantStrict: testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"message": "\tA",
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
defaultTime,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if hasRemoteAddr {
|
|
||||||
for _, tc := range testCases {
|
|
||||||
if tc.wantStrict != nil {
|
|
||||||
tc.wantStrict.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
if tc.wantBestEffort != nil {
|
|
||||||
tc.wantBestEffort.AddTag("source", "127.0.0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return testCases
|
|
||||||
}
|
|
||||||
|
|
||||||
func testRFC5426(t *testing.T, protocol string, address string, bestEffort bool) {
|
|
||||||
for _, tc := range getTestCasesForRFC5426(protocol != "unixgram") {
|
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
|
||||||
// Create receiver
|
|
||||||
receiver := newUDPSyslogReceiver(protocol+"://"+address, bestEffort, syslogRFC5424)
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
conn, err := net.Dial(protocol, address)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, err = conn.Write(tc.data)
|
|
||||||
conn.Close()
|
|
||||||
if err != nil {
|
|
||||||
var opErr *net.OpError
|
|
||||||
if errors.As(err, &opErr) {
|
|
||||||
if opErr.Err.Error() == "write: message too long" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Waiting ...
|
|
||||||
if tc.wantStrict == nil && tc.werr || bestEffort && tc.werr {
|
|
||||||
acc.WaitError(1)
|
|
||||||
}
|
|
||||||
if tc.wantBestEffort != nil && bestEffort || tc.wantStrict != nil && !bestEffort {
|
|
||||||
acc.Wait(1) // RFC5426 mandates a syslog message per UDP packet
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compare
|
|
||||||
var got telegraf.Metric
|
|
||||||
var want telegraf.Metric
|
|
||||||
if len(acc.Metrics) > 0 {
|
|
||||||
got = acc.GetTelegrafMetrics()[0]
|
|
||||||
}
|
|
||||||
if bestEffort {
|
|
||||||
want = tc.wantBestEffort
|
|
||||||
} else {
|
|
||||||
want = tc.wantStrict
|
|
||||||
}
|
|
||||||
testutil.RequireMetricEqual(t, want, got)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBestEffort_udp(t *testing.T) {
|
|
||||||
testRFC5426(t, "udp", address, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestStrict_udp(t *testing.T) {
|
|
||||||
testRFC5426(t, "udp", address, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBestEffort_unixgram(t *testing.T) {
|
|
||||||
if runtime.GOOS == "windows" {
|
|
||||||
t.Skip("Skipping on Windows, as unixgram sockets are not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
f, err := os.Create(sock)
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() { require.NoError(t, f.Close()) })
|
|
||||||
|
|
||||||
testRFC5426(t, "unixgram", sock, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestStrict_unixgram(t *testing.T) {
|
|
||||||
if runtime.GOOS == "windows" {
|
|
||||||
t.Skip("Skipping on Windows, as unixgram sockets are not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
sock := testutil.TempSocket(t)
|
|
||||||
f, err := os.Create(sock)
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() { require.NoError(t, f.Close()) })
|
|
||||||
|
|
||||||
testRFC5426(t, "unixgram", sock, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestTimeIncrement_udp(t *testing.T) {
|
|
||||||
var i int64
|
|
||||||
atomic.StoreInt64(&i, 0)
|
|
||||||
getNow := func() time.Time {
|
|
||||||
if atomic.LoadInt64(&i)%2 == 0 {
|
|
||||||
return time.Unix(1, 0)
|
|
||||||
}
|
|
||||||
return time.Unix(1, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create receiver
|
|
||||||
receiver := &Syslog{
|
|
||||||
Address: "udp://" + address,
|
|
||||||
now: getNow,
|
|
||||||
BestEffort: false,
|
|
||||||
SyslogStandard: syslogRFC5424,
|
|
||||||
Separator: "_",
|
|
||||||
}
|
|
||||||
acc := &testutil.Accumulator{}
|
|
||||||
require.NoError(t, receiver.Start(acc))
|
|
||||||
defer receiver.Stop()
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
conn, err := net.Dial("udp", address)
|
|
||||||
require.NotNil(t, conn)
|
|
||||||
defer conn.Close()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, e := conn.Write([]byte("<1>1 - - - - - -"))
|
|
||||||
require.NoError(t, e)
|
|
||||||
|
|
||||||
// Wait
|
|
||||||
acc.Wait(1)
|
|
||||||
|
|
||||||
want := []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
"source": "127.0.0.1",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
getNow(),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
testutil.RequireMetricsEqual(t, want, acc.GetTelegrafMetrics())
|
|
||||||
|
|
||||||
// New one with different time
|
|
||||||
atomic.StoreInt64(&i, atomic.LoadInt64(&i)+1)
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, e = conn.Write([]byte("<1>1 - - - - - -"))
|
|
||||||
require.NoError(t, e)
|
|
||||||
|
|
||||||
// Wait
|
|
||||||
acc.Wait(1)
|
|
||||||
|
|
||||||
want = []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
"source": "127.0.0.1",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
getNow(),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
testutil.RequireMetricsEqual(t, want, acc.GetTelegrafMetrics())
|
|
||||||
|
|
||||||
// New one with same time as previous one
|
|
||||||
|
|
||||||
// Clear
|
|
||||||
acc.ClearMetrics()
|
|
||||||
|
|
||||||
// Write
|
|
||||||
_, e = conn.Write([]byte("<1>1 - - - - - -"))
|
|
||||||
require.NoError(t, e)
|
|
||||||
|
|
||||||
// Wait
|
|
||||||
acc.Wait(1)
|
|
||||||
|
|
||||||
want = []telegraf.Metric{
|
|
||||||
testutil.MustMetric(
|
|
||||||
"syslog",
|
|
||||||
map[string]string{
|
|
||||||
"severity": "alert",
|
|
||||||
"facility": "kern",
|
|
||||||
"source": "127.0.0.1",
|
|
||||||
},
|
|
||||||
map[string]interface{}{
|
|
||||||
"version": uint16(1),
|
|
||||||
"facility_code": 0,
|
|
||||||
"severity_code": 1,
|
|
||||||
},
|
|
||||||
getNow().Add(time.Nanosecond),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
testutil.RequireMetricsEqual(t, want, acc.GetTelegrafMetrics())
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
package syslog
|
package syslog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -9,62 +13,267 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/influxdata/go-syslog/v3/nontransparent"
|
||||||
|
"github.com/influxdata/telegraf"
|
||||||
|
"github.com/influxdata/telegraf/config"
|
||||||
|
framing "github.com/influxdata/telegraf/internal/syslog"
|
||||||
|
"github.com/influxdata/telegraf/metric"
|
||||||
|
"github.com/influxdata/telegraf/plugins/inputs"
|
||||||
|
influx "github.com/influxdata/telegraf/plugins/parsers/influx/influx_upstream"
|
||||||
"github.com/influxdata/telegraf/testutil"
|
"github.com/influxdata/telegraf/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
var pki = testutil.NewPKI("../../../testutil/pki")
|
||||||
address = ":6514"
|
|
||||||
)
|
|
||||||
|
|
||||||
var defaultTime = time.Unix(0, 0)
|
func TestInitFail(t *testing.T) {
|
||||||
var maxP = uint8(191)
|
tests := []struct {
|
||||||
var maxV = uint16(999)
|
name string
|
||||||
var maxTS = "2017-12-31T23:59:59.999999+00:00"
|
address string
|
||||||
var maxH = "abcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqr" +
|
expected string
|
||||||
"stuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabc"
|
}{
|
||||||
var maxA = "abcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdef"
|
{
|
||||||
var maxPID = "abcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzabcdefghilmnopqrstuvzab"
|
name: "no address",
|
||||||
var maxMID = "abcdefghilmnopqrstuvzabcdefghilm"
|
expected: "missing protocol within address",
|
||||||
var message7681 = strings.Repeat("l", 7681)
|
},
|
||||||
|
{
|
||||||
func TestAddress(t *testing.T) {
|
name: "missing protocol",
|
||||||
var err error
|
address: "localhost:6514",
|
||||||
var rec *Syslog
|
expected: "missing protocol within address",
|
||||||
|
},
|
||||||
rec = &Syslog{
|
{
|
||||||
Address: "localhost:6514",
|
name: "unknown protocol",
|
||||||
}
|
address: "unsupported://example.com:6514",
|
||||||
err = rec.Start(&testutil.Accumulator{})
|
expected: "unknown protocol",
|
||||||
require.EqualError(t, err, `missing protocol within address "localhost:6514"`)
|
},
|
||||||
require.Error(t, err)
|
|
||||||
|
|
||||||
rec = &Syslog{
|
|
||||||
Address: "unsupported://example.com:6514",
|
|
||||||
}
|
|
||||||
err = rec.Start(&testutil.Accumulator{})
|
|
||||||
require.EqualError(t, err, `unknown protocol "unsupported" in "example.com:6514"`)
|
|
||||||
require.Error(t, err)
|
|
||||||
|
|
||||||
tmpdir := t.TempDir()
|
|
||||||
sock := filepath.Join(tmpdir, "syslog.TestAddress.sock")
|
|
||||||
|
|
||||||
if runtime.GOOS != "windows" {
|
|
||||||
// Skipping on Windows, as unixgram sockets are not supported
|
|
||||||
rec = &Syslog{
|
|
||||||
Address: "unixgram://" + sock,
|
|
||||||
}
|
|
||||||
err = rec.Start(&testutil.Accumulator{})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, sock, rec.Address)
|
|
||||||
rec.Stop()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default port is 6514
|
for _, tt := range tests {
|
||||||
rec = &Syslog{
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
plugin := &Syslog{
|
||||||
|
Address: tt.address,
|
||||||
|
}
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
require.ErrorContains(t, plugin.Start(&acc), tt.expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddressDefaultPort(t *testing.T) {
|
||||||
|
plugin := &Syslog{
|
||||||
Address: "tcp://localhost",
|
Address: "tcp://localhost",
|
||||||
}
|
}
|
||||||
err = rec.Start(&testutil.Accumulator{})
|
|
||||||
require.NoError(t, err)
|
var acc testutil.Accumulator
|
||||||
require.Equal(t, "localhost:6514", rec.Address)
|
require.NoError(t, plugin.Start(&acc))
|
||||||
rec.Stop()
|
defer plugin.Stop()
|
||||||
|
|
||||||
|
// Default port is 6514
|
||||||
|
require.Equal(t, "localhost:6514", plugin.Address)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnixgram(t *testing.T) {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
t.Skip("Skipping test as unixgram is not supported on Windows")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the socket
|
||||||
|
sock := testutil.TempSocket(t)
|
||||||
|
f, err := os.Create(sock)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
// Setup plugin and start it
|
||||||
|
timeout := config.Duration(defaultReadTimeout)
|
||||||
|
plugin := &Syslog{
|
||||||
|
Address: "unixgram://" + sock,
|
||||||
|
Framing: framing.OctetCounting,
|
||||||
|
ReadTimeout: &timeout,
|
||||||
|
Separator: "_",
|
||||||
|
SyslogStandard: "RFC5424",
|
||||||
|
Trailer: nontransparent.LF,
|
||||||
|
now: getNanoNow,
|
||||||
|
}
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
require.NoError(t, plugin.Start(&acc))
|
||||||
|
defer plugin.Stop()
|
||||||
|
|
||||||
|
// Send the message
|
||||||
|
//nolint:lll // conditionally long lines allowed
|
||||||
|
msg := `<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`
|
||||||
|
client, err := net.Dial("unixgram", sock)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer client.Close()
|
||||||
|
_, err = client.Write([]byte(msg))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Do the comparison
|
||||||
|
expected := []telegraf.Metric{
|
||||||
|
metric.New(
|
||||||
|
"syslog",
|
||||||
|
map[string]string{
|
||||||
|
"severity": "notice",
|
||||||
|
"facility": "daemon",
|
||||||
|
"hostname": "web1",
|
||||||
|
"appname": "someservice",
|
||||||
|
},
|
||||||
|
map[string]interface{}{
|
||||||
|
"version": uint16(1),
|
||||||
|
"timestamp": time.Unix(1456029177, 0).UnixNano(),
|
||||||
|
"procid": "2341",
|
||||||
|
"msgid": "2",
|
||||||
|
"message": `"GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575`,
|
||||||
|
"origin": true,
|
||||||
|
"meta_sequence": "14125553",
|
||||||
|
"meta_service": "someservice",
|
||||||
|
"severity_code": 5,
|
||||||
|
"facility_code": 3,
|
||||||
|
},
|
||||||
|
time.Unix(0, 0),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
client.Close()
|
||||||
|
|
||||||
|
// Check the metric nevertheless as we might get some metrics despite errors.
|
||||||
|
require.Eventually(t, func() bool {
|
||||||
|
return int(acc.NMetrics()) >= len(expected)
|
||||||
|
}, 3*time.Second, 100*time.Millisecond)
|
||||||
|
plugin.Stop()
|
||||||
|
|
||||||
|
actual := acc.GetTelegrafMetrics()
|
||||||
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCases(t *testing.T) {
|
||||||
|
// Get all directories in testdata
|
||||||
|
folders, err := os.ReadDir("testcases")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Register the plugin
|
||||||
|
inputs.Add("syslog", func() telegraf.Input {
|
||||||
|
defaultTimeout := config.Duration(defaultReadTimeout)
|
||||||
|
return &Syslog{
|
||||||
|
Address: ":6514",
|
||||||
|
now: getNanoNow,
|
||||||
|
ReadTimeout: &defaultTimeout,
|
||||||
|
Framing: framing.OctetCounting,
|
||||||
|
SyslogStandard: syslogRFC5424,
|
||||||
|
Trailer: nontransparent.LF,
|
||||||
|
Separator: "_",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, f := range folders {
|
||||||
|
// Only handle folders
|
||||||
|
if !f.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run(f.Name(), func(t *testing.T) {
|
||||||
|
testcasePath := filepath.Join("testcases", f.Name())
|
||||||
|
configFilename := filepath.Join(testcasePath, "telegraf.conf")
|
||||||
|
inputFilename := filepath.Join(testcasePath, "input.txt")
|
||||||
|
expectedFilename := filepath.Join(testcasePath, "expected.out")
|
||||||
|
expectedErrorFilename := filepath.Join(testcasePath, "expected.err")
|
||||||
|
|
||||||
|
// Prepare the influx parser for expectations
|
||||||
|
parser := &influx.Parser{}
|
||||||
|
require.NoError(t, parser.Init())
|
||||||
|
|
||||||
|
// Read the input data
|
||||||
|
inputData, err := os.ReadFile(inputFilename)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Read the expected output if any
|
||||||
|
var expected []telegraf.Metric
|
||||||
|
if _, err := os.Stat(expectedFilename); err == nil {
|
||||||
|
var err error
|
||||||
|
expected, err = testutil.ParseMetricsFromFile(expectedFilename, parser)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the expected error if any
|
||||||
|
var expectedError string
|
||||||
|
if _, err := os.Stat(expectedErrorFilename); err == nil {
|
||||||
|
buf, err := os.ReadFile(expectedErrorFilename)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, buf)
|
||||||
|
expectedError = string(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the plugin and start it
|
||||||
|
cfg := config.NewConfig()
|
||||||
|
require.NoError(t, cfg.LoadConfig(configFilename))
|
||||||
|
require.Len(t, cfg.Inputs, 1)
|
||||||
|
plugin := cfg.Inputs[0].Input.(*Syslog)
|
||||||
|
// Replace the TLS config with the known PKI infrastructure
|
||||||
|
if plugin.ServerConfig.TLSCert != "" {
|
||||||
|
plugin.ServerConfig = *pki.TLSServerConfig()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine server properties. We need to parse the address before
|
||||||
|
// calling Start() as it is modified in this function.
|
||||||
|
u, err := url.Parse(plugin.Address)
|
||||||
|
require.NoError(t, err)
|
||||||
|
if u.Scheme == "unix" {
|
||||||
|
// Use a random socket
|
||||||
|
sock := testutil.TempSocket(t)
|
||||||
|
plugin.Address = "unix://" + sock
|
||||||
|
}
|
||||||
|
|
||||||
|
var acc testutil.Accumulator
|
||||||
|
require.NoError(t, plugin.Start(&acc))
|
||||||
|
defer plugin.Stop()
|
||||||
|
|
||||||
|
// Get the address
|
||||||
|
var addr string
|
||||||
|
if plugin.isStream {
|
||||||
|
addr = plugin.tcpListener.Addr().String()
|
||||||
|
} else {
|
||||||
|
addr = plugin.udpListener.LocalAddr().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a fake sender
|
||||||
|
var client net.Conn
|
||||||
|
if srvTLS, _ := plugin.TLSConfig(); srvTLS != nil {
|
||||||
|
tlscfg, err := pki.TLSClientConfig().TLSConfig()
|
||||||
|
require.NoError(t, err)
|
||||||
|
tlscfg.ServerName = "localhost"
|
||||||
|
|
||||||
|
client, err = tls.Dial(u.Scheme, addr, tlscfg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
} else {
|
||||||
|
client, err = net.Dial(u.Scheme, addr)
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
// Send the data and afterwards stop client and plugin
|
||||||
|
_, err = client.Write(inputData)
|
||||||
|
require.NoError(t, err)
|
||||||
|
client.Close()
|
||||||
|
|
||||||
|
// Check the metric nevertheless as we might get some metrics despite errors.
|
||||||
|
require.Eventually(t, func() bool {
|
||||||
|
return int(acc.NMetrics()) >= len(expected)
|
||||||
|
}, 3*time.Second, 100*time.Millisecond)
|
||||||
|
plugin.Stop()
|
||||||
|
|
||||||
|
actual := acc.GetTelegrafMetrics()
|
||||||
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
||||||
|
|
||||||
|
// Check for errors
|
||||||
|
if expectedError != "" {
|
||||||
|
require.NotEmpty(t, acc.Errors)
|
||||||
|
var found bool
|
||||||
|
for _, err := range acc.Errors {
|
||||||
|
found = found || strings.Contains(err.Error(), expectedError)
|
||||||
|
}
|
||||||
|
require.Truef(t, found, "expected error %q not found in errors %v", expectedError, acc.Errors)
|
||||||
|
} else {
|
||||||
|
require.Empty(t, acc.Errors)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<1>2 - - - - - -
|
||||||
|
<4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<1>2 - - - - - -
|
||||||
|
<4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
framing = "non-transparent"
|
||||||
|
best_effort = true
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<1>2 - - - - - -
|
||||||
|
<4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
<1>2 - - - - - -
|
||||||
|
<4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
framing = "non-transparent"
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
framing = "non-transparent"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
unexpected EOF
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
framing = "non-transparent"
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>1 - - - - - -
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>2 - - - - - -17 <4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,message="hello\nworld",severity_code=1i,version=3u 0
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
28 <1>3 - - - - - - hello
|
||||||
|
world
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
expecting a RFC3339MICRO timestamp or a nil value
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=217u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>217 <11>1 - - - - - -
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
parsing error [col 4]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>2
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,message="hellø",severity_code=1i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
23 <1>1 - - - - - - hellø
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "unix:///some/random/socket"
|
||||||
|
tls_cert = "dummy.cert"
|
||||||
|
best_effort = true
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,appname=someservice,facility=daemon,hostname=web1,severity=notice,source=127.0.0.1 facility_code=3i,message="\"GET /v1/ok HTTP/1.1\" 200 145 \"-\" \"hacheck 0.9.0\" 24306 127.0.0.1:40124 575",meta_sequence="14125553",meta_service="someservice",msgid="2",origin=true,procid="2341",severity_code=5i,timestamp=1456029177000000000i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
188 <29>1 2016-02-21T04:32:57+00:00 web1 someservice 2341 2 [origin][meta sequence="14125553" service="someservice"] "GET /v1/ok HTTP/1.1" 200 145 "-" "hacheck 0.9.0" 24306 127.0.0.1:40124 575
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,2 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=1u 0
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>1 - - - - - -
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,severity_code=1i,version=2u 0
|
||||||
|
syslog,facility=kern,severity=warning,source=127.0.0.1 facility_code=0i,severity_code=4i,version=11u 1
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
16 <1>2 - - - - - -17 <4>11 - - - - - -
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
syslog,facility=kern,severity=alert,source=127.0.0.1 facility_code=0i,message="hello\nworld",severity_code=1i,version=3u 0
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
28 <1>3 - - - - - - hello
|
||||||
|
world
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
[[inputs.syslog]]
|
||||||
|
server = "tcp://127.0.0.1:0"
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue