本文主要介紹如何基于日志服務建構Kubernetes Ingress日志分析平台,并提供一些簡單的動手實驗友善大家快速了解日志服務相關功能。
部署Ingress日志方案
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
# your config name, must be unique in you k8s cluster
name: k8s-nginx-ingress
spec:
# logstore name to upload log
logstore: nginx-ingress
# product code, only for k8s nginx ingress
productCode: k8s-nginx-ingress
# logtail config detail
logtailConfig:
inputType: plugin
# logtail config name, should be same with [metadata.name]
configName: k8s-nginx-ingress
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
IncludeLabel:
io.kubernetes.container.name: nginx-ingress-controller
Stderr: false
Stdout: true
processors:
- type: processor_regex
detail:
KeepSource: false
Keys:
- client_ip
- x_forward_for
- remote_user
- time
- method
- url
- version
- status
- body_bytes_sent
- http_referer
- http_user_agent
- request_length
- request_time
- proxy_upstream_name
- upstream_addr
- upstream_response_length
- upstream_response_time
- upstream_status
- req_id
- host
NoKeyError: true
NoMatchError: true
Regex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"\s(\S+)\s(\S+)+\s\[([^]]*)]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s*(\S*).*
SourceKey: content

驗證Ingress日志方案
- 容器服務控制台
- 進入路由頁面,點選【Ingress概覽】,若跳轉出Ingress概覽頁則表示Ingress日志方案建立成功。
部署Ingress日志腳本
apiVersion: apps/v1
kind: Deployment
metadata:
name: mock-ingress
namespace: default
labels:
app: mock-ingress
spec:
replicas: 1
selector:
matchLabels:
app: mock-ingress
template:
metadata:
labels:
app: mock-ingress
spec:
containers:
- name: mock-ingress
image: registry.cn-shanghai.aliyuncs.com/log-service/mock-ingress:latest
command: ["/data/replay_log"]
args:
- '-ecs=true'
- '-project=k8s-log-{cluster-id}'
- '-endpoint=cn-shanghai.log.aliyuncs.com'
- '-source=/data/data.txt'
- '-dist=/data/distribute.csv'
檢視Ingress詳細報表
- 日志服務控制台
- 單擊左側導航欄中的Project管理,選擇建立叢集時設定的日志Project,單擊名稱進入日志Project頁面(預設建立的project名稱為 k8s-log-{cluster-id})。
- 在Project詳情頁面,預設進入日志庫頁面。名稱為nginx-ingress的日志庫(logstore)存放着所有的Ingress通路日志。單擊左側導航欄中的儀表盤進入儀表盤清單,可檢視到所有Ingress的分析報表。
設定告警
- 打開Ingress監控中心,在【請求成功率】圖表右上角的菜單欄中點選【建立告警】
- 在彈出的告警框中輸入告警名稱,選擇查詢區間、執行區間
- 觸發條件設定為:
,即非100%就觸發告警(實際場景中可設定的小一些)total < 100
- 點選【下一步】
- 在【通知類型】中選擇【釘釘機器人】,填入釘釘機器人的WebHook位址 https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676 (WebHook位址請參見 自定義機器人 擷取)即可完成告警設定。
訂閱定時報告
日志服務除支援通過告警方式通知外,還支援報表訂閱功能,您可使用該功能将報表定期渲染成圖檔并通過郵件、釘釘群等方式發送。
下述示例為Ingress概覽配置訂閱功能,每分鐘将報表發送到指定釘釘群:
- 進入Ingress概覽報表,單擊報表右上角的訂閱按鈕。
- 在彈出的配置頁面中,頻率選擇CronJob,輸入
(每5分鐘發送一次報告,實際場景可設為每天固定時間),打開添加水印選項。0/5 * * * *
- 通知類型中選擇釘釘機器人,填入釘釘機器人的WebHook位址
擷取)即可完成訂閱。https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676
進階功能
自定義分析Ingress日志
日志服務支援豐富的查詢與分析功能,詳情參考
日志查詢與分析。在查詢頁面支援自定義的查詢與分析,例如:
- 查詢狀态碼大于200的請求:
status > 200
- 查詢host(域名)為 inner.njkj.com 且響應延遲高于30ms的請求:
host : inner.njkj.com and request_time > 0.03
- 統計狀态碼非200的Top10服務:
not status : 200 | SELECT proxy_upstream_name, count(1) as total group by proxy_upstream_name order by total desc limit 10
- 統計各省份UV分布:
* | select ip_to_province(x_forward_for) as province, approx_distinct(x_forward_for) as total group by province order by total desc limit 1000
- 統計host(域名)為 inner.njkj.com最近1天的通路平均延遲,并和昨天以及上周同一天的對比:
host : inner.njkj.com | select d[1] as "Today", d[2] as "Yesterday", d[1] - d[2] / d[2] as "Yesterday Delta", d[3] as "Last Week", d[1] - d[3] / d[3] as "Last Week Delta" from( select compare(val, 86400, 604800 ) as d from(select avg(request_time) as val from log ) )
Ingress報表均基于日志服務的分析功能實作,您可以從系統預設提供的Ingress報表中查找對應功能實作的SQL:點選對應圖表的右上角菜單選項,選擇【檢視分析詳情】,則會跳到對應的查詢頁面。
從審計日志中查詢部署操作
- 進入左側導航欄中的儀表盤清單,選擇【Kubernetes資源操作詳細清單】進入。
- 在左上角【資源類型】篩選框中輸入Deployments,即可查詢到之前部署的Deployment。
- 可點選左下角【資源建立清單】中的事件ID查詢詳細的事件資訊。
接入其他日志(會後作業)
您可以使用日志服務Logtail接入業務應用的日志來實作自定義的查詢、分析、可視化、告警等功能,您可以使用以下任意一種方式接入日志: