使用Logtail采集Kubernetes上挂载的NAS日志

35次阅读

共计 4164 个字符,预计需要花费 11 分钟才能阅读完成。

采集 k8s 挂载 Nas 后的日志
该文档主要介绍使用 logtail 以两种不同的方式进行 k8s 挂载 Nas 后的日志采集。两种采集方式的实现原理是一样的,都是通过将 Logtail 和业务容器挂载到相同的 NAS 上,使 Logtail 和业务容器的日志数据共享,以此实现日志采集。下面是两种采集方式的各自特点:
1. SideCar 模式。比较灵活、适合水平扩容,适用于数据量较大的场景;
2. 单独部署 Logtail 的 Deployment。资源消耗比较低、但灵活性以及伸缩性不强,适用于整体集群数据量较少的场景(建议整体日志量不超过每秒 10M)。
1. Sidecar NAS 采集方式
通过 链接 使用 PV&PVC 的方式配置挂载 Nas 的 nas-pvc

步骤一 创建 pv
步骤二 创建 pvc
步骤三 根据下面的 yaml 模板创建含有 logtail 的 Pod,进行单个 Pod 的内部采集

sideCar 模式实验 yaml 内容:
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-log-sidecar1-demo
spec:
template:
metadata:
name: nginx-log-sidecar-demo
spec:
# volumes 配置
volumes:
– name: nginx-log
persistentVolumeClaim:
claimName: nas-pvc
containers:
# 主容器配置
– name: nginx-log-demo
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: [“/bin/mock_log”]
args: [“–log-type=nginx”, “–stdout=false”, “–stderr=true”, “–path=/var/log/nginx/access.log”, “–total-count=1000000000”, “–logs-per-sec=100”]
volumeMounts:
– name: nginx-log
mountPath: /var/log/nginx
# Logtail 的 Sidecar 容器配置
– name: logtail
image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
env:
# user id
– name: “ALIYUN_LOGTAIL_USER_ID”
value: “${your_aliyun_user_id}”
# user defined id
– name: “ALIYUN_LOGTAIL_USER_DEFINED_ID”
value: “${your_machine_group_user_defined_id}”
# config file path in logtail’s container
– name: “ALIYUN_LOGTAIL_CONFIG”
value: “/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json”
# env tags config
– name: “ALIYUN_LOG_ENV_TAGS”
value: “_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_”
– name: “_pod_name_”
valueFrom:
fieldRef:
fieldPath: metadata.name
– name: “_pod_ip_”
valueFrom:
fieldRef:
fieldPath: status.podIP
– name: “_namespace_”
valueFrom:
fieldRef:
fieldPath: metadata.namespace
– name: “_node_name_”
valueFrom:
fieldRef:
fieldPath: spec.nodeName
– name: “_node_ip_”
valueFrom:
fieldRef:
fieldPath: status.hostIP
# 和主容器共享 volume
volumeMounts:
– name: nginx-log
mountPath: /var/log/nginx
# 健康检查
livenessProbe:
exec:
command:
– /etc/init.d/ilogtaild
– status
initialDelaySeconds: 30
periodSeconds: 30
restartPolicy: “Never”
SLS 控制台采集配置设置如下图:

日志路径与被采集容器的日志所在路径一致
注意:由于 NAS 路径已经挂载到了 Logtail 容器上,所以不需要打开 docker 文件的按钮

采集上来的系统默认字段含义:
__source__: pod 容器内部 IP
__tag__:__hostname__: pod 名称
__tag__:__path__: 日志路径
__tag__:__receive_time__: 采集时间
__tag__:__user_defined_id__: 用户自定义标识
__tag__:_namespace_: pod 所属 namaspace
__tag__:_node_ip_: pod 所在 Node 的 IP 地址
__tag__:_node_name_: pod 所属 Node 的 name
__tag__:_pod_ip_: pod 容器内部 IP
__tag__:_pod_name_: pod 名称
用户参数:

2. 一个 Logtail 采集所有 POD 的 NAS 数据
注意项:副本数 spec.replicas 只能为 1,不能更多,多了会重复采集。
首先,创建一个 logtail 的 deployment,以下是本次使用的模板:
apiVersion: apps/v1
kind: Deployment
metadata:
name: logtail-deployment
namespace: kube-system
labels:
k8s-app: nas-logtail-collecter
spec:
replicas: 1
selector:
matchLabels:
k8s-app : nas-logtail-collecter
template:
metadata:
name: logtail-deployment
labels:
k8s-app : nas-logtail-collecter
spec:
containers:
# Logtail 的配置
– name: logtail
image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
env:
# aliuid
– name: “ALIYUN_LOGTAIL_USER_ID”
value: “${your_aliyun_user_id}”
# user defined id
– name: “ALIYUN_LOGTAIL_USER_DEFINED_ID”
value: “${your_machine_group_user_defined_id}”
# config file path in logtail’s container
– name: “ALIYUN_LOGTAIL_CONFIG”
value: “/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json”
volumeMounts:
– name: nginx-log
mountPath: /var/log/nginx
# volumes 配置
volumes:
– name: nginx-log
persistentVolumeClaim:
claimName: pvc-test-nginx

__注意:__这里的 claimName: pvc-test-nginx 以及 mountPath: /var/log/nginx 是将 logtail 的 /var/log/nginx 挂载了 Nas 下的 /nginx 文件夹
相关参数设置请参考方案 1 中的表格说明

logtail 运行成功之后,可以在 SLS 控制台根据模板中的 ALIYUN_LOGTAIL_USER_DEFINED_ID 创建对应的机器组,请参考方案 1 中的表格说明。
这里新建 2 个 Pod 来测试采集是否成功,其中一个 POD 的模板为:
apiVersion: v1
kind: Pod
metadata:
name: “test-nginx-2”
spec:
containers:
– name: “nginx-log-demo”
image: “registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest”
command: [“/bin/mock_log”]
args: [“–log-type=nginx”, “–stdout=false”, “–stderr=true”, “–path=/var/log/nginx/access.log”, “–total-count=1000000000”, “–logs-per-sec=100”]
volumeMounts:
– name: “nas2”
mountPath: “/var/log/nginx”
volumes:
– name: “nas2”
flexVolume:
driver: “alicloud/nas”
options:
server: “Nas 挂载地址 ”
path: “/nginx/test2”
vers: “4.0”
另一个 Pod 将 /var/log/nginx 挂载在了 /nginx/test1 目录下;结合 logtail 的挂载情况,现在两个 Pod 分别挂载在 /nginx/test1 和 /nginx/test2,而 logtail 挂载在了 /nginx 下。
最后配置 logtail 的采集配置

因为 logtail 也挂载了相同的 Nas,所以 logtail 只需要采集自身文件夹下的日志就可以了,这里的是否为 docker 文件选项关闭。
注意:由于 NAS 路径已经挂载到了 Logtail 容器上,所以不需要打开 docker 文件的按钮

本文作者:元乙阅读原文
本文为云栖社区原创内容,未经允许不得转载。

正文完
 0