func()

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))
	}
}