func NewOutputPlugin()

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
}