从LogAnalitics中搜索AKS容器日志

当您启用AKS的监视附加组件(需要LogAnalytics的工作区),容器的标准输出会自动进入名为ContainerLog的表中,并且还可以查看过去不存在的Pod日志,但是由于未经结构化的日志只能通过Kusto使用正则表达式进行解析,所以我认为更改LogFormat的设置,将日志记录为csv或json格式可能更好。如果您使用ContainerInventory表与ContainerID进行连接,则可以获得镜像名称。

ContainerLog
| where LogEntry !contains "kube-probe/1.1"
| join kind = inner
(
    ContainerInventory
)
on ContainerID
| extend HttpStatusCode = extract(" ([2-5][0-9]{2}) ", 1, LogEntry)
| extend Serverity1 = extract(" \\[([a-z]*)\\]", 1, LogEntry)
| extend Serverity2 = extract(" (DEBUG|TRACE|INFO|ERROR|WORNING) ", 1, LogEntry)
| project Image1, LogEntry, HttpStatusCode, Serverity1, Serverity2
//| where Image1 == "<my-image-name>"
//| limit 50

以下是一种可能的本地化的中文表达:

具有可用正则表达式的样子
https://github.com/google/re2/wiki/Syntax
提取函数
https://docs.microsoft.com/en-us/azure/kusto/query/extractfunction
解析指南
https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/parse-text
SQL 大脑备忘单
https://docs.microsoft.com/ja-jp/azure/azure-monitor/log-query/sql-cheatsheet

我看了一下,据说omsagent可以通过configmap的设置来控制以namespace为单位的发布与不发布。虽然可以控制namespace,但如果想要进行其他详细的过滤,可能需要在发送端进行一些操作,或者选择使用其他logshipper。如果想将omsagent收集的Prometheus的Node数据放入AzureLoganalytics的InsightMetrics表中,可以额外安装NodeExporter,并将其端口号与配置文件匹配设置。可以控制指标收集间隔(interval)和收集字段的设置(fieldpass/fielddrop)。

如果想去掉前一个月,可以按照以下方式进行操作,这样2月、4月、6月、9月和11月也都能准确地显示一个月的时间。

let now = now();
let requireMonth = datetime_add('month', -1, todatetime(now));
let startDate = startofmonth(requireMonth);
let endDate = endofmonth(requireMonth);
ContainerLog 
| where LogEntry !contains "kube-probe/1.15"
| where TimeGenerated between(startDate .. endDate)
...
广告
将在 10 秒后关闭
bannerAds