in cloudwatch/cloudwatch.go [183:236]
func NewOutputPlugin(config OutputPluginConfig) (*OutputPlugin, error) {
logrus.Debugf("[cloudwatch %d] Initializing NewOutputPlugin", config.PluginInstanceID)
client, err := newCloudWatchLogsClient(config)
if err != nil {
return nil, err
}
timer, err := plugins.NewTimeout(func(d time.Duration) {
logrus.Errorf("[cloudwatch %d] timeout threshold reached: Failed to send logs for %s\n", config.PluginInstanceID, d.String())
logrus.Fatalf("[cloudwatch %d] Quitting Fluent Bit", config.PluginInstanceID) // exit the plugin and kill Fluent Bit
})
if err != nil {
return nil, err
}
logGroupTemplate, err := newTemplate(config.LogGroupName)
if err != nil {
return nil, err
}
logStreamTemplate, err := newTemplate(config.LogStreamName)
if err != nil {
return nil, err
}
runningInECS := true
// check if it is running in ECS
if os.Getenv("ECS_CONTAINER_METADATA_URI") == "" {
runningInECS = false
}
return &OutputPlugin{
logGroupName: logGroupTemplate,
logStreamName: logStreamTemplate,
logStreamPrefix: config.LogStreamPrefix,
defaultLogGroupName: config.DefaultLogGroupName,
defaultLogStreamName: config.DefaultLogStreamName,
logKey: config.LogKey,
client: client,
timer: timer,
streams: make(map[string]*logStream),
nextLogStreamCleanUpCheckTime: time.Now().Add(logStreamInactivityCheckInterval),
PluginInstanceID: config.PluginInstanceID,
logGroupTags: tagKeysToMap(config.NewLogGroupTags),
logGroupRetention: config.LogRetentionDays,
autoCreateGroup: config.AutoCreateGroup,
groups: make(map[string]struct{}),
ecsMetadata: TaskMetadata{},
runningInECS: runningInECS,
uuid: ksuid.New().String(),
extraUserAgent: config.ExtraUserAgent,
}, nil
}