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
}