阿里云容器服務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中。