in opentelemetry_collector/receiver/dockerstats/scraper.go [144:185]
func (s *scraper) export() {
ctx, cancel := context.WithTimeout(context.Background(), s.scrapeInterval)
defer cancel()
containers, err := s.docker.ContainerList(ctx, types.ContainerListOptions{})
if err != nil {
s.logger.Warn("Failed to get docker container list.", zap.Error(err))
return
}
var metrics []*mpb.Metric
for _, container := range containers {
var name string
if len(container.Names) > 0 {
// Docker container names are prefixed with their parent's name (/ means docker
// daemon). See https://github.com/moby/moby/issues/6705#issuecomment-47298276.
name = strings.TrimPrefix(container.Names[0], "/")
} else {
name = container.ID
}
labelValues := []*mpb.LabelValue{metricgenerator.MakeLabelValue(name)}
cLogger := s.logger.With(zap.String("name", name), zap.String("id", container.ID))
stats, err := s.readResourceUsageStats(ctx, container.ID)
if err != nil {
cLogger.Warn("readResourceUsageStats failed.", zap.Error(err))
} else {
metrics = append(metrics, s.usageStatsToMetrics(stats, labelValues)...)
}
info, err := s.readContainerInfo(ctx, container.ID)
if err != nil {
cLogger.Warn("readContainerInfo failed.", zap.Error(err))
} else {
metrics = append(metrics, s.containerInfoToMetrics(info, labelValues)...)
}
}
err = s.metricConsumer.ConsumeMetrics(ctx, opencensus.OCToMetrics(nil, nil, metrics))
if err != nil {
s.logger.Error("Error sending docker stats metrics", zap.Error(err))
}
}