in collector/scraper.go [474:550]
func makeTargets(p *v1.Pod) []ScrapeTarget {
var targets []ScrapeTarget
// Skip the pod if it has not opted in to scraping
if !strings.EqualFold(getAnnotationOrDefault(p, "adx-mon/scrape", "false"), "true") {
return nil
}
podIP := p.Status.PodIP
if podIP == "" {
return nil
}
scheme := getAnnotationOrDefault(p, "adx-mon/scheme", "http")
path := getAnnotationOrDefault(p, "adx-mon/path", "/metrics")
// Just scrape this one port
port := getAnnotationOrDefault(p, "adx-mon/port", "")
// Scrape a comma separated list of targets with the format path:port like /metrics:8080
targetMap := getTargetAnnotationMapOrDefault(p, "adx-mon/targets", make(map[string]string))
for _, c := range p.Spec.Containers {
for _, cp := range c.Ports {
var readinessPort, livenessPort string
if c.ReadinessProbe != nil && c.ReadinessProbe.HTTPGet != nil {
readinessPort = c.ReadinessProbe.HTTPGet.Port.String()
}
if c.LivenessProbe != nil && c.LivenessProbe.HTTPGet != nil {
livenessPort = c.LivenessProbe.HTTPGet.Port.String()
}
// If target list is specified, only scrape those path/port combinations
if len(targetMap) != 0 {
checkPorts := []string{strconv.Itoa(int(cp.ContainerPort)), readinessPort, livenessPort}
for _, checkPort := range checkPorts {
// if the current port, liveness port, or readiness port exist in the targetMap, add that to scrape targets
if target, added := addTargetFromMap(podIP, scheme, checkPort, p.Namespace, p.Name, c.Name, targetMap); added {
targets = append(targets, target)
// if all targets are accounted for, return target list
if len(targetMap) == 0 {
return targets
}
}
}
// if there are remaining targets, continue iterating through containers
continue
}
// If a port is specified, only scrape that port on the pod
if port != "" {
if port != strconv.Itoa(int(cp.ContainerPort)) && port != readinessPort && port != livenessPort {
continue
}
targets = append(targets,
ScrapeTarget{
Addr: fmt.Sprintf("%s://%s:%s%s", scheme, podIP, port, path),
Namespace: p.Namespace,
Pod: p.Name,
Container: c.Name,
})
return targets
}
targets = append(targets,
ScrapeTarget{
Addr: fmt.Sprintf("%s://%s:%d%s", scheme, podIP, cp.ContainerPort, path),
Namespace: p.Namespace,
Pod: p.Name,
Container: c.Name,
})
}
}
return targets
}