func NewBeat()

in internal/beatcmd/beat.go [107:165]


func NewBeat(args BeatParams) (*Beat, error) {
	cfg, rawConfig, keystore, err := LoadConfig()
	if err != nil {
		return nil, err
	}

	hostname, err := os.Hostname()
	if err != nil {
		return nil, err
	}

	beatName := cfg.Name
	if beatName == "" {
		beatName = hostname
	}

	exporter, err := apmotel.NewGatherer()
	if err != nil {
		return nil, err
	}

	metricReader := sdkmetric.NewManualReader()
	meterProvider := sdkmetric.NewMeterProvider(
		sdkmetric.WithReader(exporter),
		sdkmetric.WithReader(metricReader),
	)
	otel.SetMeterProvider(meterProvider)

	eid := uuid.FromStringOrNil(metricreport.EphemeralID().String())
	b := &Beat{
		Beat: beat.Beat{
			Info: beat.Info{
				Beat:            "apm-server",
				ElasticLicensed: args.ElasticLicensed,
				IndexPrefix:     "apm-server",
				Version:         version.VersionWithQualifier(),
				Name:            beatName,
				Hostname:        hostname,
				StartTime:       time.Now(),
				EphemeralID:     eid,
			},
			Keystore:   keystore,
			Config:     &beat.BeatConfig{Output: cfg.Output},
			BeatConfig: cfg.APMServer,
			Registry:   reload.NewRegistry(),
		},
		Config:         cfg,
		newRunner:      args.NewRunner,
		rawConfig:      rawConfig,
		metricReader:   metricReader,
		meterProvider:  meterProvider,
		metricGatherer: &exporter,
	}

	if err := b.init(); err != nil {
		return nil, err
	}
	return b, nil
}