本文共 3895 字,大约阅读时间需要 12 分钟。
Kubernetes(K8S)作为CNCF(cloud native computing foundation)的一个核心项目,背靠Google和Redhat的强大社区,近两年发展十分迅速,在成为容器编排领域中领导者的同时,也正在朝着PAAS底座标配的方向发展。
日志作为任一系统不可或缺的部分,在K8S的官方文档中也介绍了多种的,总结起来主要有下述3种:原生方式、DaemonSet方式和Sidecar方式。
kubectl logs
直接在查看本地保留的日志,或者通过docker engine的 log driver
把日志重定向到文件、syslog、fluentd等系统中。每种采集方式都有一定的优劣势,这里我们进行简单的对比:
原生方式 | DaemonSet方式 | Sidecar方式 | |
采集日志类型 | 标准输出 | 标准输出+部分文件 | 文件 |
部署运维 | 低,原生支持 | 一般,需维护DaemonSet | 较高,每个需要采集日志的POD都需要部署sidecar容器 |
日志分类存储 | 无法实现 | 一般,可通过容器/路径等映射 | 每个POD可单独配置,灵活性高 |
多租户隔离 | 弱 | 一般,只能通过配置间隔离 | 强,通过容器进行隔离,可单独分配资源 |
支持集群规模 | 本地存储无限制,若使用syslog、fluentd会有单点限制 | 中小型规模,业务数最多支持百级别 | 无限制 |
资源占用 | 低,docker engine提供 | 较低,每个节点运行一个容器 | 较高,每个POD运行一个容器 |
查询便捷性 | 低 | 较高,可进行自定义的查询、统计 | 高,可根据业务特点进行定制 |
可定制性 | 低 | 低 | 高,每个POD单独配置 |
适用场景 | 测试、POC等非生产场景 | 功能单一型的集群 | 大型、混合型、PAAS型集群 |
从上述表格中可以看出:
DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。
这两种模式均基于Logtail实现,日志服务客户端Logtail目前已有百万级部署,每天采集上万应用、数PB的数据,历经多次双11、双12考验。相关技术分享可以参见文章:,。
DaemonSet方式下Logtail做了非常多的适配工作,包括:
详细的介绍文章可以参考:
sidecar方式的配置以及使用相对在虚拟机/物理机上采集数据区别不大,从Logtail容器视角来看:Logtail工作在一个“虚拟机”上,需要采集这个机器上某个/某些日志文件。
但在容器场景下还需解决两个问题:
Sidecar模式下日志组件安装、配置方式如下:
ALIYUN_LOGTAIL_USER_ID
、 ALIYUN_LOGTAIL_CONFIG
、 ALIYUN_LOGTAIL_USER_DEFINED_ID
,参数含义以及值的选取参见:。tips:
apiVersion: batch/v1kind: Jobmetadata: name: nginx-log-sidecar-demo namespace: kube-systemspec: 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
如下图所示,在日志服务控制台创建一个Logtail的机器组,机器组选择自定义标识,可以动态适应POD ip地址的改变。具体操作步骤如下:
ALIYUN_LOGTAIL_USER_DEFINED_ID
填入用户自定义标识内容框中。机器组创建完成后,即可配置对应文件的采集配置,目前支持极简、Nginx访问日志、分隔符日志、JSON日志、正则日志等格式,具体可参考:。本示例中配置如下:
采集配置完成并应用到机器组后,1分钟内日志即可采集上来,进入对应logstore的查询页面即可查询到采集上来的日志。
阿里云日志服务针对日志提供了完整的解决方案,日志采集只是其中的第一步,以下相关功能是日志进阶的必备良药:
转载地址:http://nxwuo.baihongyu.com/