准备工作
为了完成后续的相关操作,我们需要准备一个 K8s 集群,操作步骤如下:
- 登陆容器服务控制台。
- 创建一个标准托管集群(杭州区域),在向导中勾选上【使用 EIP 暴露 API Server】 和【使用日志服务】。
- 集群创建完毕后,回到集群列表页面,点击【更多->通过 CloudShell 管理集群】。
- 在 CloudShell 中输入 kubectl get ds -n kube-system,结果中显示的 logtail-ds 即为了实现数据采集所安装的日志服务组件。
- 打开日志服务控制台,可以看到和 K8s 集群 ID 所对应的 project 也已经创建完毕。
操作截图如下:
图:创建托管集群(步骤 2)
图:打开 CloudShell(步骤 3)
图:在 CloudShell 中查看日志服务组件(步骤 4)
图:打开日志服务控制台,查看 project(步骤 5)
1. 数据采集
在 K8s 环境下,容器日志数据从大体上分为两类:容器标准输出和容器内文本文件,前者是容器特有的一种日志存在形式,后者和传统的文本文件日志类似,只是文件存放在各个容器内部,相互之间隔离。下面我们将介绍如何对这两种类型的日志进行采集。
1.1. Mock 数据
我们将使用如下两个 YAML 文件分别生成标准输出和容器内文件两种形式的 mock 数据。
容器标准输出
# 创建两个 pod 来生成 mock 数据
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-stdout-log-demo-1
namespace: nginx-stdout
spec:
template:
metadata:
name: nginx-stdout-log-demo-1
spec:
containers:
- name: nginx-stdout-log-demo-1
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/bin/mock_log"]
args: ["--stderr=false", "--stdout=true", "--log-type=nginx", "--total-count=100000000", "--logs-per-sec=5"]
restartPolicy: Never
---
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-stdout-log-demo-2
namespace: nginx-stdout
spec:
template:
metadata:
name: nginx-stdout-log-demo-2
spec:
containers:
- name: nginx-stdout-log-demo-2
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/bin/mock_log"]
args: ["--stderr=false", "--stdout=true", "--log-type=nginx", "--total-count=100000000", "--logs-per-sec=5"]
restartPolicy: Never
容器内文本文件(/var/log/access.log)