通过阿里云日志服务采集日志
本文介绍在ASK集群中,如何通过阿里云日志服务SLS采集容器的标准输出和文件日志。
前提条件
已创建ASK集群。具体操作,请参见创建Serverless Kubernetes集群。
已开通日志服务。
登录日志服务控制台时,如果没有开通日志服务,将收到相关提示,您可以根据页面提示开通。
背景信息
阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。更多信息,请参见日志服务简介。
如果您使用的是阿里云ASK集群,支持通过SLS CRD和环境变量两种方式进行配置,将容器日志采集到阿里云日志服务SLS中。
方式一:通过SLS CRD配置
登录容器服务管理控制台。
在集群中安装alibaba-log-controller。
在左侧导航栏,选择市场>应用目录。
在阿里云应用页签下,找到ack-sls-logtail应用,然后单击该应用。
配置参数,并选择集群进行安装。
选择要安装的集群和命名空间,输入发布名称。
单击参数页签,在下方YAML模板中填写AccessKey和AccessKeySecret。
单击创建。
查看安装结果。
单击集群名称进入集群信息页面,在左侧导航栏选择应用>Helm,查看对应发布(默认发布名称为ack-sls-logtail-default)的状态是否为已部署。
创建日志配置CRD。
连接集群,参考YAML示例编写日志配置CRD的YAML配置文件(命名为log.yaml),然后执行命令创建日志配置CRD。
采集的日志分为标准输出(包括错误输出)和文件日志两种:
标准输出CRD YAML示例
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-stdout #资源名称,集群内唯一 spec: project: k8s-log-c326bc86**** #Project名称,可自定义,推荐使用集群ID命名 logstore: test-stdout #Logstore名称,如果不存在则自动创建 shardCount: 2 #可选配置,Shard数量,默认为2,取值范围为1~10 lifeCycle: 90 #可选配置,Logstore中日志的保留时间,默认为90天,取值范围为1~7300,7300天表示永久存储 logtailConfig: inputType: plugin #采集的数据源类型,file表示文件日志,plugin表示标准输出 configName: test-stdout #采集配置的名称,与metadata.name持一致 inputDetail: plugin: inputs: - type: service_docker_stdout detail: Stdout: true Stderr: true # IncludeEnv: # aliyun_logs_test-stdout: "stdout"
文件日志CRD YAML示例
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: name: test-file #资源名称,集群内唯一 spec: project: k8s-log-c326bc86**** #Project名称,可自定义,推荐使用集群ID命名 logstore: test-file #Logstore名称,如果不存在则自动创建 logtailConfig: inputType: file #采集的数据源类型,file表示文件日志,plugin表示标准输出 configName: test-file #采集配置的名称,与资源名metadata.name持一致 inputDetail: logType: common_reg_log #对于分隔符类型的日志,logType可以设置为json_log logPath: /log/ #日志文件夹 filePattern: "*.log" #文件名, 支持通配符,例如log_*.log dockerFile: true #采集容器内的文件,dockerFile设置为true #用作解析时间的key'' #timeKey: 'time' #时间解析方式'' #timeFormat: '%Y-%m-%dT%H:%M:%S' #避免不同采集配置中存在相同采集目录而导致冲突 #dockerIncludeEnv: # aliyun_logs_test-file: "/log/*.log"
执行以下命令创建日志配置CRD。
kubectl create -f log.yaml
说明创建日志配置CRD后,您可以在日志服务控制台查看对应生成的日志库及logtail配置。如果后续需要更新配置,可以直接编辑CRD,系统将自动同步配置到日志服务SLS。
部署应用。
完成日志配置CRD后,后续创建的业务Pod的日志将被采集到日志服务SLS中。
以下为Pod YAML配置文件示例,可以实现通过while循环不断打印标准输出和日志文件。
apiVersion: v1 kind: Pod metadata: labels: app: sls name: eci-sls-demo namespace: default spec: containers: - args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1; done command: - /bin/sh image: busybox:latest imagePullPolicy: Always name: sls
在日志服务控制台查看日志。
在集群对应的Project中找到目标日志库,单击日志库名称即可查看日志。更多信息,请参见查看配置效果。
方式二:通过环境变量配置
登录容器服务管理控制台。
在左侧导航栏,单击集群。
在集群列表页面,找到要配置的集群,单击集群名称。
在集群详情页面的左侧导航栏,选择工作负载>无状态。
新建或者修改Pod的YAML配置模板,设置环境变量来传入日志相关配置。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: alpine name: alpine spec: replicas: 2 selector: matchLabels: app: alpine template: metadata: labels: app: alpine spec: containers: - image: alpine imagePullPolicy: Always args: - ping - 127.0.0.1 name: alpine env: #配置环境变量 #配置Project,如果使用K8s集群默认的project,则可以不填 - name: aliyun_logs_test-stdout_project value: k8s-log-xxx - name: aliyun_logs_test-file_project value: k8s-log-xxx #配置机器组,如果使用K8s集群默认的机器组,则可以不填 - name: aliyun_logs_test-stdout_machinegroup value: k8s-group-app-alpine - name: aliyun_logs_test-file_machinegroup value: k8s-group-app-alpine #配置标准输出和错误输出的Logstore和路径 - name: aliyun_logs_test-stdout value: stdout #将/log/*.log目录下的日志收集到名为aliyun_logs_test-file的Logstore - name: aliyun_logs_test-file value: /log/*.log #设置日志保留时间,只对单个Logstore生效 - name: aliyun_logs_test-stdout_ttl value: "7" #设置日志分区数,只对单个Logstore生效 - name: aliyun_logs_test-stdout_shard value: "2"
在上述示例中,所有与日志配置相关的环境变量采用
aliyun_logs_
为前缀,其中环境变量aliyun_logs_test-stdout
表示创建一个名为test-stdout的Logstore,将容器的标准输出采集到test-stdout这个Logstore中,采集路径为stdout。单击创建。
在日志服务控制台查看日志。
在集群对应的Project中找到目标日志库,单击日志库名称即可查看日志。更多信息,请参见查看配置效果。
查看配置效果
登录日志服务控制台。
单击Projcect名称。
找到目标日志库,单击日志库名称查看日志。
标准输出
文件日志