阿里云容器服务ACK部署了CoreDNS作为集群内的DNS服务器,您可以通过查看CoreDNS日志来分析CoreDNS解析慢、访问高危请求域名等问题。本文介绍如何开启CoreDNS日志分析与监控能力。
前提条件
已安装日志组件logtail-ds。
在创建集群时,ACK默认选中日志组件logtail-ds。如果您未安装日志组件logtail-ds,关于如何手动安装的操作,请参见通过日志服务采集Kubernetes容器日志。
确保日志应用alibaba-log-controller版本不低于0.2.0.0-76648ee-aliyun。
如果alibaba-log-controller版本低,可直接升级logtail-ds组件。关于如何升级组件,请参见管理组件。
步骤一:开启CoreDNS日志插件
注意事项
开启前,请确保CoreDNS组件为最新版本。升级具体操作,请参见管理组件。
全新部署的CoreDNS默认开启log插件,如已开启请忽略本步骤。
操作步骤
开启CoreDNS日志会消耗额外的CPU(约10%,与实际请求有关)及网络流量。如果当前已经部署的CoreDNS副本CPU使用量较高,您可以对CoreDNS进行扩容。关于如何扩容CoreDNS副本数,请参见手动伸缩容器组。
在命名空间kube-system下,ACK集群有一个coredns配置项。您可以通过在coredns配置项中的Corefile字段中加上log插件,开启CoreDNS域名解析的日志。关于如何修改配置项的具体步骤,请参见修改配置项。
默认日志格式的coredns的配置如下。
Corefile: |
.:53 {
errors
log # 此处添加Log插件。
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
# 如果有其它的域,且该域容器需要被采集日志,也需要增加Log插件,格式一致。
demo.com:53 {
...
log # 此处添加Log插件。
}
步骤二:开启CoreDNS日志服务
方式一:通过ACK控制台开启
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在日志中心页面,单击网络组件日志页签,然后单击开始安装。
控制台会自动安装相关组件,开启CoreDNS日志服务。
方式二:通过命令行开启
日志采集配置针对ACK进行了自定义资源CRD扩展,您可以直接部署AliyunLogConfig的CRD配置,Log Controller会自动创建日志服务相关采集配置和报表资源。关于如何创建自定义资源AliyunLogConfig的具体步骤,请参见管理自定义资源。
下述配置只针对默认CoreDNS中的日志格式生效。如果您自定义了CoreDNS的日志格式,请修改上述CRD配置中的正则表达式Regex部分。
关于自定义CoreDNS的日志格式的更多信息,请参见log。
关于更详细的日志采集流程及采集配置,请参见通过DaemonSet-CRD方式采集容器日志。
关于如何配置存储、网络、弹性伸缩等资源的AliyunLogConfig的CRD,请参见步骤一:创建系统插件的日志配置文件。
步骤三:查询和分析日志(日志库)
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在日志中心页面,单击网络组件日志页签,然后在CoreDNS页签下单击日志库,即可查询和分析DNS日志。
在输入框中输入查询和分析语句,然后单击1周(相对),设置查询的时间范围。
单击查询/分析,查看查询分析结果。
日志服务为您提供日志分布直方图、原始日志和统计图表形式的展示查询分析结果。关于查询和分析日志的详细信息,请参见查询和分析日志。
日志直方图
日志分布直方图主要展示查询到的日志在时间上的分布。
原始日志
在原始日志页签中展示当前查询结果,您可单击表格或原始查看日志,通过分析日志来确认当前域名解析是否存在异常。请重点关注返回码RCODE的值,关于RCODE的释义,请参见 DNS解析异常问题排查。
各个字段含义如下所示。
字段
含义
示例值
{level}
日志级别
INFO
{remote}
客户端IP地址
172.16.0.10
{port}
客户端端口
58008
{id}
查询ID
34518
{type}
请求类型
A
{class}
请求类别
IN
{name}
请求域名的名称
kube-dns.kube-system.svc.cluster.local.
{proto}
使用的协议
tcp
{size}
请求大小(字节)
56
{do}
查询中是否设置了EDNS0 DO(DNSSEC OK)位
false
{bufsize}
在查询中定义的EDNS0缓冲区大小(字节)
65535
{rcode}
响应代码
NOERROR
{rflags}
响应标志位,设置的每个标志位都会显示
qr,aa,rd
{rsize}
未压缩的响应大小(字节)
110
{duration}
响应时间(秒)
0.00011
统计图表
执行查询分析语句后,您可以在统计图表页签中查看可视化的查询分析结果。
日志聚类
在日志聚类页签中,单击开启日志聚类,可实现在采集日志时将相似度高的日志聚合。更多信息,请参见日志聚类。
步骤四:查看CoreDNS日志采集(仪表盘)
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在日志中心页面,单击网络组件日志页签,然后在CoreDNS页签下单击仪表盘,即可查看Kubernetes CoreDNS日志分析。
在Kubernetes CoreDNS日志分析页面,您可以查看CoreDNS请求数、请求成功率和请求延迟等聚合信息,同时提供了各类Top域名请求列表、错误域名列表、慢解析域名列表和高危请求域名访问分析。
步骤五:创建CoreDNS日志告警
在Kubernetes CoreDNS日志分析仪表盘页面中,您可以根据仪表盘中单个图表进行告警设置。此操作仅支持在日志服务控制台上进行操作。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息。
在集群信息页面,单击基本信息页签,然后单击日志服务Project右侧的链接跳转至日志服务控制台。
在日志库页面左侧导航栏,单击仪表盘图标,然后单击在仪表盘列表中找到并单击Kubernetes CoreDNS日志分析。
在Kubernetes CoreDNS日志分析页面的目标图表卡片右上方,选择 。
关于告警配置的参数设置,请参见创建日志告警监控规则。
创建完成告警规则后,您可以查看、修改告警规则,关闭告警规则等。更多信息,请参见告警监控规则相关操作。
相关操作
关闭日志采集
如果您不再需要CoreDNS日志采集,执行以下命令,可以通过卸载日志采集自定义资源的方式停止采集。
kubectl -n kube-system delete AliyunLogConfig k8s-coredns-log
删除成功后,CoreDNS输出的日志将不再上报到日志服务SLS中。