docs: def _update_container_metrics(self, instance, subcontainer, kube_labels):
          """Publish metrics for a subcontainer and handle filtering on tags"""
          tags = list(instance.get('tags', []))  # add support for custom tags
  
          if len(subcontainer.get('aliases', [])) >= 1:
              # The first alias seems to always match the docker container name
              container_name = subcontainer['aliases'][0]
          else:
              self.log.debug("Subcontainer doesn't have a name, skipping.")
              return
  
          tags.append('container_name:%s' % container_name)
  
          container_image = self.kubeutil.image_name_resolver(subcontainer['spec'].get('image'))
          if container_image:
              tags.append('container_image:%s' % container_image)
  
              split = container_image.split(":")
              if len(split) > 2:
                  # if the repo is in the image name and has the form 'docker.clearbit:5000'
                  # the split will be like [repo_url, repo_port/image_name, image_tag]. Let's avoid that
                  split = [':'.join(split[:-1]), split[-1]]
  
              tags.append('image_name:%s' % split[0])
              if len(split) == 2:
                  tags.append('image_tag:%s' % split[1])
  
          try:
              cont_labels = subcontainer['spec']['labels']
          except KeyError:
              self.log.debug("Subcontainer, doesn't have any labels")
              cont_labels = {}
  
          # Collect pod names, namespaces, rc...
          if KubeUtil.NAMESPACE_LABEL in cont_labels and KubeUtil.POD_NAME_LABEL in cont_labels:
              # Kubernetes >= 1.2
              tags += self._get_post_1_2_tags(cont_labels, subcontainer, kube_labels)
  
          elif KubeUtil.POD_NAME_LABEL in cont_labels:
              # Kubernetes <= 1.1
              tags += self._get_pre_1_2_tags(cont_labels, subcontainer, kube_labels)
  
          else:
              # Those are containers that are not part of a pod.
              # They are top aggregate views and don't have the previous metadata.
              tags.append("pod_name:no_pod")
  
          # if the container should be filtered we return its tags without publishing its metrics
          is_filtered = self.kubeutil.are_tags_filtered(tags)
          if is_filtered:
              self._filtered_containers.add(subcontainer['id'])
              return tags
  
          stats = subcontainer['stats'][-1]  # take the latest
          self._publish_raw_metrics(NAMESPACE, stats, tags)
  
          if subcontainer.get("spec", {}).get("has_filesystem") and stats.get('filesystem', []) != []:
              fs = stats['filesystem'][-1]
              if fs['capacity'] > 0:
                  fs_utilization = float(fs['usage'])/float(fs['capacity'])
                  self.publish_gauge(self, NAMESPACE + '.filesystem.usage_pct', fs_utilization, tags)
              else:
                  self.log.debug("Filesystem capacity is 0: cannot report usage metrics.")
  
          if subcontainer.get("spec", {}).get("has_network"):
              net = stats['network']
              self.publish_rate(self, NAMESPACE + '.network_errors',
                                sum(float(net[x]) for x in NET_ERRORS),
                                tags)
  
          return tags