阿里雲Container ServiceACK部署了CoreDNS作為叢集內的DNS伺服器,您可以通過查看CoreDNS日誌來分析CoreDNS解析慢、訪問高危請求網域名稱等問題。本文介紹如何開啟CoreDNS日誌分析與監控能力。
前提條件
已安裝日誌組件logtail-ds。
在建立叢集時,ACK預設選中日誌組件logtail-ds。如果您未安裝日誌組件logtail-ds,關於如何手動安裝的操作,請參見通過Log Service採集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外掛程式。
}
步驟二:開啟CoreDNSLog Service
方式一:通過ACK控制台開啟
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌中心頁面,單擊網路組件日誌頁簽,然後單擊開始安裝。
控制台會自動安裝相關組件,開啟CoreDNSLog Service。
方式二:通過命令列開啟
日誌採集配置針對ACK進行了自訂資源CRD擴充,您可以直接部署AliyunLogConfig的CRD配置,Log Controller會自動建立Log Service相關採集配置和報表資源。關於如何建立自訂資源AliyunLogConfig的具體步驟,請參見管理自訂資源。
下述配置只針對預設CoreDNS中的日誌格式生效。如果您自訂了CoreDNS的日誌格式,請修改上述CRD配置中的RegexRegex部分。
關於自訂CoreDNS的日誌格式的更多資訊,請參見log。
關於更詳細的日誌採集流程及採集配置,請參見通過DaemonSet-CRD方式採集容器日誌。
關於如何配置儲存、網路、Auto Scaling等資源的AliyunLogConfig的CRD,請參見步驟一:建立系統外掛程式的日誌設定檔。
步驟三:查詢和分析日誌(日誌庫)
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌中心頁面,單擊網路組件日誌頁簽,然後在CoreDNS頁簽下單擊日誌庫,即可查詢和分析DNS日誌。
在輸入框中輸入查詢和分析語句,然後單擊1周(相對),設定查詢的時間範圍。
單擊查詢/分析,查看查詢分析結果。
Log Service為您提供日誌分布長條圖、原始日誌和統計圖表形式的展示查詢分析結果。關於查詢和分析日誌的詳細資料,請參見查詢和分析日誌。
日誌長條圖
日誌分布長條圖主要展示查詢到的日誌在時間上的分布。
原始日誌
在原始日誌頁簽中展示當前查詢結果,您可單擊表格或原始查看日誌,通過分析日誌來確認當前網域名稱解析是否存在異常。請重點關注返回碼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日誌採集(儀錶盤)
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌中心頁面,單擊網路組件日誌頁簽,然後在CoreDNS頁簽下單擊儀錶盤,即可查看Kubernetes CoreDNS日誌分析。
在Kubernetes CoreDNS日誌分析頁面,您可以查看CoreDNS請求數、請求成功率和請求延遲等彙總資訊,同時提供了各類Top網域名稱請求列表、錯誤網域名稱列表、慢解析網域名稱列表和高危請求網域名稱訪問分析。
步驟五:建立CoreDNS日誌警示
在Kubernetes CoreDNS日誌分析儀錶盤頁面中,您可以根據儀錶盤中單個圖表進行警示設定。此操作僅支援在Log Service控制台上進行操作。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊。
在叢集資訊頁面,單擊基本資料頁簽,然後單擊Log ServiceProject右側的連結跳轉至Log Service控制台。
在日誌庫頁面左側導覽列,單擊儀錶盤表徵圖,然後單擊在儀錶盤列表中找到並單擊Kubernetes CoreDNS日誌分析。
在Kubernetes CoreDNS日誌分析頁面的靶心圖表表卡片右上方,選擇 。
關於警示配置的參數設定,請參見建立日誌警示監控規則。
建立完成警示規則後,您可以查看、修改警示規則,關閉警示規則等。更多資訊,請參見警示監控規則相關操作。
相關操作
關閉日誌採集
如果您不再需要CoreDNS日誌採集,執行以下命令,可以通過卸載日誌採集自訂資源的方式停止採集。
kubectl -n kube-system delete AliyunLogConfig k8s-coredns-log
刪除成功後,CoreDNS輸出的日誌將不再上報到Log ServiceSLS中。