in collector/logs/sources/tail/pod_target.go [21:101]
func getFileTargets(pod *v1.Pod, nodeName string, staticPodTargets []*StaticPodTargets) []FileTailTarget {
// Only look for targets on our node
if pod.Spec.NodeName != nodeName {
return nil
}
if logger.IsDebug() {
logger.Debugf("Checking for targets for pod %s/%s", pod.Namespace, pod.Name)
}
// Skip the pod if it has not opted in to scraping or are not static pods
staticPodTarget := getStaticPod(pod, staticPodTargets)
if !strings.EqualFold(getAnnotationOrDefault(pod, "adx-mon/scrape", "false"), "true") && staticPodTarget == nil {
if logger.IsDebug() {
logger.Debugf("Pod %s/%s has not opted in to scraping", pod.Namespace, pod.Name)
}
return nil
}
// Skip the pod if it does not have a log database or table configured
// Destination in form of "database:table"
dest := getAnnotationOrDefault(pod, AdxMonLogDestinationAnnotation, "")
if staticPodTarget != nil && dest == "" {
dest = staticPodTarget.Destination
}
destPair := strings.Split(dest, ":")
if len(destPair) != 2 {
if logger.IsDebug() {
logger.Debugf("Pod %s/%s has no log destination configured", pod.Namespace, pod.Name)
}
return nil
}
podDB := destPair[0]
podTable := destPair[1]
if podDB == "" || podTable == "" {
if logger.IsDebug() {
logger.Debugf("Pod %s/%s has no log destination configured", pod.Namespace, pod.Name)
}
return nil
}
parserList := []string{}
parsers := getAnnotationOrDefault(pod, AdxMonLogParsersAnnotation, "")
if staticPodTarget != nil && parsers == "" {
parsers = strings.Join(staticPodTarget.Parsers, ",")
}
if parsers != "" {
parserList = strings.Split(parsers, ",")
for _, currParser := range parserList {
if !parser.IsValidParser(currParser) {
logger.Warnf("Invalid parser %s for pod %s/%s", currParser, pod.Namespace, pod.Name)
return nil
}
}
}
podName := pod.Name
namespaceName := pod.Namespace
containerCount := len(pod.Spec.Containers) + len(pod.Spec.InitContainers) + len(pod.Spec.EphemeralContainers)
targets := make([]FileTailTarget, 0, containerCount)
// example name /var/log/containers/adx-reconciler-85f865d7b5-j5f49_adx-reconciler_adx-reconciler-ea96bea0582a986c502378aef429a275eb75c1d68e1c912ef93c2b5300990b04.log
// podname_namespace_containername-containerid.log
logFilePrefix := fmt.Sprintf("/var/log/containers/%s_%s", podName, namespaceName)
for _, container := range pod.Spec.InitContainers {
if target, ok := targetForContainer(pod, pod.Status.InitContainerStatuses, parserList, container.Name, logFilePrefix, podDB, podTable); ok {
targets = append(targets, target)
}
}
for _, container := range pod.Spec.Containers {
if target, ok := targetForContainer(pod, pod.Status.ContainerStatuses, parserList, container.Name, logFilePrefix, podDB, podTable); ok {
targets = append(targets, target)
}
}
for _, container := range pod.Spec.EphemeralContainers {
if target, ok := targetForContainer(pod, pod.Status.EphemeralContainerStatuses, parserList, container.Name, logFilePrefix, podDB, podTable); ok {
targets = append(targets, target)
}
}
return targets
}