有一个正在运行的AKS连接到Azure中的日志分析。我尝试使用以下查询片段查看命名POD的日志:
let KubePodLogs = (clustername:string, podnameprefix:string) {
let ContainerIdList = KubePodInventory
| where ClusterName =~ clustername
| where Name startswith strcat(podnameprefix, "-")
| where strlen(ContainerID)>0
| distinct ContainerID;
ContainerLog
| where ContainerID in (ContainerIdList)
| join (KubePodInventory | project ContainerID, Name, PodLabel, Namespace, Computer) on ContainerID
| project TimeGenerated, Node=Computer, Namespace, PodName=Name1, PodLabel, ContainerID, LogEntry
};
KubePodLogs('aks-my-cluster', 'my-service') | order by TimeGenerated desc
上面的查询确实返回了匹配POD的行,但并不是所有实际可用的行。
尝试通过检查POD详细信息来获取部分查询的结果:
KubePodInventory
| where ClusterName =~ 'aks-my-cluster'
| where Name startswith 'my-service-'
| where strlen(ContainerID)>0
| distinct ContainerID;
给了我一个集装箱ID现在,将这个container-id输入到另一个查询中会显示比上面的组合查询更多的结果。为什么?为什么?
ContainerLog
| where ContainerID == "aec001...fc31"
| order by TimeGenerated desc
| project TimeGenerated, ContainerID, LogEntry
我注意到的一件事是,后面的简单查询结果包含日志结果,这些结果具有从POD的JSON格式输出解析的LogEntry
字段。在结果中,我可以将LogEntry
扩展到更多与POD日志输出的原始JSON数据相对应的字段。
也就是说,组合查询(带有连接)似乎跳过了那些JSON LogEntry
ContainerLog
条目,但为什么呢?
据我所知,组合查询不会以任何方式过滤LogEntry
字段。
1条答案
按热度按时间tzdcorbm1#
更改后的查询似乎会产生我所期望的结果:
我将
join
与lookup
交换,并使用更多列来区分KubePodInventory
结果。