阿里云容器服务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日志服务
在命名空间kube-system下,ACK集群有一个coredns配置项。您可以通过在coredns配置项中的Corefile字段中加上log插件,开启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进行了自定义资源CRD扩展,您可以直接部署AliyunLogConfig的CRD配置,Log Controller会自动创建日志服务相关采集配置和报表资源。关于如何创建自定义资源AliyunLogConfig的具体步骤,请参见管理自定义资源。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
# Your config name, must be unique in you k8s cluster.
name: k8s-coredns-log
namespace: kube-system
spec:
# logstore name to upload log
logstore: coredns-log
# logtail config detail
productCode: k8s-coredns
logtailConfig:
inputType: plugin
# logtail config name, should be same with [metadata.name]
configName: k8s-coredns-log
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
IncludeLabel:
io.kubernetes.container.name: coredns
Stderr: true
Stdout: true
processors:
- type: processor_regex
detail:
KeepSource: false
KeepSourceIfParseError: true
Keys:
- level
- remote
- port
- id
- type
- class
- name
- proto
- size
- do
- bufsize
- rcode
- rflags
- rsize
- duration
NoKeyError: true
NoMatchError: false
FullMatch: false
Regex: \[([^]]+)]\s([^:]+):(\S+)\s+-\s+(\S+)\s+"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+([^"]+)"\s+(\S+)\s+(\S+)\s+(\S+)\s+([\d\.]+).*
SourceKey: content
- type: processor_regex
detail:
KeepSource: false
KeepSourceIfParseError: true
Keys:
- error
- rcode
- name
- type
- errorMsg
NoKeyError: false
NoMatchError: false
FullMatch: false
Regex: \[ERROR]\s+(plugin/errors):\s+(\S)+\s+(\S+)\s+([^:]*):\s+(.*)
SourceKey: content
- 请确保日志组件alibaba-log-controller版本不低于0.2.0.0-76648ee-aliyun。如果在更新alibaba-log-controller版本前,您已经部署了该CRD配置,请删除该配置并重新部署。
- 上述配置只针对默认CoreDNS中的日志格式生效。如果您自定义了CoreDNS的日志格式,请修改上述CRD配置中的正则表达式Regex部分。
关于自定义CoreDNS的日志格式的更多信息,请参见log。
关于更详细的日志采集流程及采集配置,请参见通过DaemonSet-CRD方式采集日志。
步骤三:查看CoreDNS日志采集
步骤四:创建CoreDNS日志告警
在Kubernetes CoreDNS日志分析仪表盘页面中,您可以根据仪表盘中单个图表进行告警设置。

创建完成告警规则后,您可以查看、修改告警规则,关闭告警规则等。更多信息,请参见告警监控规则相关操作。