阿里云日志服务:DaemonSet和Sidecar模式的优缺点分析

优采云 发布时间: 2021-04-04 18:19

  阿里云日志服务:DaemonSet和Sidecar模式的优缺点分析

  摘要:DaemonSet和Sidecar模式各有优缺点。当前,没有一种方法可以应用于所有方案。因此,我们的阿里云日志服务既支持DaemonSet方法又支持Sidecar方法,并且对每种方法都进行了一些额外的改进,更适合于K8S下的动态场景。

  Kubernetes(K8S)作为CNCF(云原生计算基金会)的核心项目,在Google和Redhat的强大社区的支持下,在过去两年中发展迅速。在成为容器编排领域的领导者的同时,它也在朝着标准PAAS基础的方向发展。

  登录采集方法

  日志是任何系统必不可少的部分。 K8S官方文档还介绍了各种日志采集格式。总之,主要有以下三种方法:纯模式,DaemonSet模式和Sidecar模式。

  本机方法:使用kubectl日志直接查看本地保存的日志,或通过docker引擎的日志驱动程序将日志重定向到文件,syslog,fluentd和其他系统。 DaemonSet方法:在K8S的每个节点上部署日志代理,从代理采集的所有容器的日志到服务器。边车方法:一种日志代理容器,在POD中运行边车,以存放由POD主容器生成的采集个日志。

  

  采集方式比较

  每种采集方法都具有某些优点和缺点。这里我们作一个简单的比较:

  

  从上表中可以看出:

  本机方法相对较弱,通常不建议在生产系统中使用。否则,很难完成问题调查和数据统计。 DaemonSet方法每个节点仅允许一个日志代理,这在资源消耗方面要小得多。但是,可伸缩性和租户隔离受到限制,这更适合具有单一功能或业务不多的集群。 Sidecar方法为每个POD分别部署一个日志代理,这会占用更多资源,但具有很强的灵活性和多租户隔离。建议将这种方法用于大型K8S群集或作为PAAS平台为多个业务方服务的群集。日志服务K8S 采集方法

  DaemonSet和Sidecar模式各有优缺点,目前尚无方法可应用于所有场景。因此,我们的阿里云日志服务既支持DaemonSet方法又支持Sidecar方法,并且对每种方法都进行了一些额外的改进,更适合于K8S下的动态场景。

  这两种模式都是基于Logtail实现的。日志服务客户端Logtail已被部署成百万计,每天有成千上万的应用程序和数PB的数据采集,并且已经进行了许多双1 1、双12测试。有关相关技术的共享,请参阅文章:多租户隔离技术+双重11实战效果,在轮询+ Inotify组合下的日志序列保存方案采集。

  DaemonS 优采云 采集器方法

  Logtail在DaemonSet模式下做了很多改编工作,包括:

  

  有关文章的详细介绍,请参阅:

  再次升级!阿里云Kubernetes日志解决方案

  LC3观点:Kubernetes下的日志采集,存储和处理技术实践

  Sidecar 采集方法

  在虚拟机/物理机上,sidecar方法的配置和使用相对较小。 采集数据差异很小。从Logtail容器的角度来看:Logtail在“虚拟机”上工作,并且需要采集 /一些日志文件。

  

  但是在容器场景中仍然有两个问题需要解决:

  配置:使用业务流程来配置代理容器动态:需要适应POD的IP地址和主机名的更改

  当前,Logtail容器通过环境变量支持相关参数的配置,并支持自定义的计算机组工作,可以完美解决以上两个问题。边车配置示例

  Sidecar模式下的日志组件的安装和配置方法如下:

  步骤1:部署Logtail容器。部署POD时,将日志路径安装到本地,然后将相应的卷安装到Logtail容器。必须使用ALIYUN_LOGTAIL_USER_ID,ALIYUN_LOGTAIL_CONFIG,ALIYUN_LOGTAIL_USER_DEFINED_ID配置Logtail容器,参数和值选择的含义是:标准Docker日志采集。

  提示:

  Logtail容器建议配置运行状况检查,以在操作环境,内核等发生异常时自动恢复。本示例中使用的Logtail镜像访问阿里云杭州公共网络镜像仓库。您可以根据需要替换成本区域的镜像,并使用Intranet方法。

  apiVersion: batch/v1

kind: Job

metadata:

name: nginx-log-sidecar-demo

namespace: kube-system

spec:

template:

metadata:

name: nginx-log-sidecar-demo

spec:

# volumes配置

volumes:

- name: nginx-log

emptyDir: {}

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/ngin

# Logtail的Sidecar容器配置

- name: logtail

image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest

env:

# aliuid

- name: "ALIYUN_LOGTAIL_USER_ID"

value: "165421******3050"

# 自定义标识机器组配置

- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"

value: "nginx-log-sidecar"

# 启动配置(用于选择Logtail所在Region)

- name: "ALIYUN_LOGTAIL_CONFIG"

value: "/etc/ilogtail/conf/cn-hangzhou/ilogtail_config.json"

# 和主容器共享volume

volumeMounts:

- name: nginx-log

mountPath: /var/log/nginx

# 健康检查

livenessProbe:

exec:

command:

- /etc/init.d/ilogtaild

- status

initialDelaySeconds: 30

periodSeconds: 30

  第2步:配置计算机组

  如下图所示,在Log Service控制台中创建了一个Logtail机器组,并且该机器组选择了一个自定义ID,该ID可以动态地适应POD ip地址的更改。具体步骤如下:

  打开日志服务,并创建Project和Logstore。有关详细步骤,请参阅准备过程。在Log Service控制台的计算机组列表页面上,单击“创建计算机组”。选择用户定义的徽标,然后将在上一步中配置的ALIYUN_LOGTAIL_USER_DEFINED_ID填充到用户定义的徽标内容框中。

  

  第3步:配置采集方法

  创建计算机组后,可​​以配置相应文件的采集配置。当前,它支持最小的Nginx访问日志,分隔符日志,JSON日志,常规日志和其他格式。有关详细信息,请参阅:文本日志配置方法。此示例中的配置如下:

  

  第4步:查询日志

  完成采集配置并将其应用于计算机组后,可​​以在1分钟内将日志上传到采集,并且可以通过进入相应日志存储区的查询页面来查询采集中的日志。

  

  高级日志

  阿里云日志服务提供了完整的日志记录解决方案。日志采集只是第一步。以下相关功能是进行高级日志记录的基本方法:

  日志上下文查询:快速查询:实时分析:快速分析:根据日志设置警报:配置市场:

  有关更多高级日志内容,请参阅:日志服务学习路径。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线