使用日志服务进行Kubernetes日志采集
阿里云容器服务Kubernetes集群集成了日志服务(SLS),您可在创建集群时启用日志服务,快速采集Kubernetes 集群的容器日志,包括容器的标准输出以及容器内的文本文件。
新建 Kubernetes 集群
如果您尚未创建任何的 Kubernetes 集群,可以按照本节的步骤来进行操作:
- 登录 容器服务管理控制台。
- 单击左侧导航栏中集群,单击右上角创建Kubernetes集群。
- 进入创建页面后,参见创建Kubernetes集群进行配置。
- 拖动到页面底部,勾选日志服务配置项,表示在新建的 Kubernetes 集群中安装日志插件。
- 当勾选了使用日志服务后,会出现创建 Project(日志服务管理日志的组织结构,具体可见项目)的提示,目前有两种方式可选:
- 选择一个现有的 Project 来管理采集的日志。
- 自动创建一个新的 Project 来管理采集的日志,Project 会自动命名为
k8s-log-{ClusterID}
,ClusterID 表示您新建的 Kubernetes 集群的唯一标识。
- 选择一个现有的 Project 来管理采集的日志。
- 配置完成后,单击右上角创建集群,在弹出的窗口中单击确定,完成创建。
完成创建后,您可在集群列表页面看到创建的Kubernetes集群。
已创建 Kubernetes 集群,手动安装日志服务组件
如果您先前已创建了 Kubernetes 集群,可以根据本节的内容来进行所需的操作以使用日志服务:
- 未安装:手动安装日志服务组件。
- 已安装但版本较老:升级日志服务组件,若不升级则只能使用日志服务控制台或 CRD 进行采集配置。
检查日志服务组件版本
- 通过cloudshell 连接 Kubernetes 集群。
详细内容,可参考在CloudShell上通过kubectl管理Kubernetes集群 。
- 快速判定是否需要进行升级或迁移操作,命令如下:
$ kubectl describe daemonsets -n kube-system logtail-ds | grep ALICLOUD_LOG_DOCKER_ENV_CONFIG
- 如果输出结果为
ALICLOUD_LOG_DOCKER_ENV_CONFIG: true
,表示您可正常使用,不需要进行升级或迁移。 - 其他情况则需要进行后续检查。
- 如果输出结果为
- 执行以下检查命令确定是否是采用 helm 安装。
$ helm get alibaba-log-controller | grep CHART
CHART: alibaba-cloud-log-0.1.1
- 输出内容中的 0.1.1 表示日志服务组件的版本,请使用 0.1.1 及以上版本的组件,如果版本过低,请参照升级日志服务组件进行升级。如果您已采用 helm 安装且版本正确,可以跳过后续步骤。
- 如果无任何内容输出,表示未采用 helm 安装日志服务组件,但可能采用了 DaemonSet 的方式安装,请根据后续步骤进行检查。
- DaemonSet 分为新旧两种方式:
$ kubectl get daemonsets -n kube-system logtail
- 如果无输出结果或内容是
No resources found.
,则表明未安装日志服务组件,请参照操作手动安装日志服务组件。 - 如果有正确的输出结果表示使用旧 DaemonSet 方式进行了安装,需要进行升级,请参照升级日志服务组件操作。
- 如果无输出结果或内容是
手动安装日志服务组件
- 通过cloudshell 连接 Kubernetes 集群。
详细内容,可参考在CloudShell上通过kubectl管理Kubernetes集群 。
- 在cloudshell中获取您的主账号aliuid,命令为
echo $ALIBABA_CLOUD_ACCOUNT_ID
。 - 替换
${your_k8s_cluster_id}
、{your_ali_uid}
、{your_k8s_cluster_region_id}
参数后执行以下安装命令。wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id ${your_k8s_cluster_id} --ali-uid ${your_ali_uid} --region-id ${your_k8s_cluster_region_id}
参数说明:- your_k8s_cluster_id:您的Kubernetes集群ID。
- your_ali_uid:您在步骤中获取的aliuid。
- your_k8s_cluster_region_id:您的Kubernetes集群所在的Region,可在地域和可用区中查看到,如在杭州,则为cn-hangzhou。
安装示例
[root@iZbp******biaZ ~]# wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c77a*****************0106 --ali-uid 19*********19 --region-id cn-hangzhou
--2018-09-28 15:25:33-- https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh
Resolving acs-logging.oss-cn-hangzhou.aliyuncs.com... 118.31.219.217, 118.31.219.206
Connecting to acs-logging.oss-cn-hangzhou.aliyuncs.com|118.31.219.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2273 (2.2K) [text/x-sh]
Saving to: ‘alicloud-k8s-log-installer.sh’
alicloud-k8s-log-installer.sh 100%[================================================================================================================>] 2.22K --.-KB/s in 0s
2018-09-28 15:25:33 (13.5 MB/s) - ‘alicloud-k8s-log-installer.sh’ saved [2273/2273]
--2018-09-28 15:25:33-- http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz
Resolving logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com... 118.31.219.49
Connecting to logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com|118.31.219.49|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2754 (2.7K) [application/x-gzip]
Saving to: ‘alibaba-cloud-log.tgz’
alibaba-cloud-log.tgz 100%[================================================================================================================>] 2.69K --.-KB/s in 0s
2018-09-28 15:25:34 (79.6 MB/s) - ‘alibaba-cloud-log.tgz’ saved [2754/2754]
[INFO] your k8s is using project : k8s-log-c77a92ec5a3ce4e64a1bf13bde1820106
NAME: alibaba-log-controller
LAST DEPLOYED: Fri Sep 28 15:25:34 2018
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1beta1/CustomResourceDefinition
NAME AGE
aliyunlogconfigs.log.alibabacloud.com 0s
==> v1beta1/ClusterRole
alibaba-log-controller 0s
==> v1beta1/ClusterRoleBinding
NAME AGE
alibaba-log-controller 0s
==> v1beta1/DaemonSet
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
logtail-ds 2 2 0 2 0 <none> 0s
==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
alibaba-log-controller 1 1 1 0 0s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
logtail-ds-6v979 0/1 ContainerCreating 0 0s
logtail-ds-7ccqv 0/1 ContainerCreating 0 0s
alibaba-log-controller-84d8b6b8cf-nkrkx 0/1 ContainerCreating 0 0s
==> v1/ServiceAccount
NAME SECRETS AGE
alibaba-log-controller 1 0s
[SUCCESS] install helm package : alibaba-log-controller success.
升级日志服务组件
如果您已安装旧版本的日志服务组件(通过 helm 或 DaemonSet),可以按照以下操作进行升级或迁移。
详细内容可参考在CloudShell上通过kubectl管理Kubernetes集群 。
Helm 升级(推荐)
- 下载最新的日志服务组件 helm 包,命令如下:
wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz -O alibaba-cloud-log.tgz
- 使用 helm upgrade 进行升级,命令如下:
helm get values alibaba-log-controller --all > values.yaml && helm upgrade alibaba-log-controller alibaba-cloud-log.tgz --recreate-pods -f values.yaml
DaemonSet升级
若您不是使用helm的方式安装的日志组件,可通过修改DaemonSet模板的方式进行升级。若您的镜像账号为acs,请参考镜像仓库中最新的tag,将镜像中的tag更新至最新版本;若您的镜像账号为log-service,请参考镜像仓库中最新的tag,将镜像中的tag更新至最新版本。
- 用户升级tag后,如果Logtail没有滚动更新,您需要手动删除Logtail的Pod,触发强制更新。
- 查看Logtail是否运行在所有节点(包括master节点)上。若没有,请为Logtail设置tolerations。
tolerations:
- operator: "Exists"
更多最新配置方式,请参考最新helm包中的相关配置。
DaemonSet 迁移
此升级步骤适用于检查日志服务组件版本时结果为使用旧方式 DaemonSet 的用户,该方式不支持在容器服务中进行日志服务配置,您可按如下操作进行升级迁移:
- 按照新版本的方式安装,安装命令最后新增一个参数为您之前 Kubernetes 集群使用的日志服务 Project 名。
例如 Project 名为 k8s-log-demo,集群 ID 为 c12ba2028cxxxxxxxxxx6939f0b,则安装命令为:
wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c12ba2028cxxxxxxxxxx6939f0b --ali-uid 19*********19 --region-id cn-hangzhou --log-project k8s-log-demo
- 安装成功后,进入日志服务控制台。
- 在日志服务控制台,将相应 Project 以及 Logstore 下的历史采集配置应用到新的机器组
k8s-group-${your_k8s_cluster_id}
。 - 一分钟后,将历史采集配置从历史的机器组中解绑。
- 观察日志采集正常后,可以选择删除之前安装的 logtail daemonset。
创建应用时配置日志服务
在容器服务中,您可以在创建应用的同时配置日志服务对容器的日志进行采集,目前支持以控制台向导和 YAML 模板两种方式进行创建。
控制台向导创建
- 登录 容器服务管理控制台。
- 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 部署,然后单击页面右上角的使用镜像创建。
- 设置应用名称、部署集群、命名空间、副本数量和类型,单击下一步,进入容器配置页面。
- 进入容器配置页面中,本例中选择nginx镜像,对容器采集进行配置。
以下仅介绍日志服务相关的配置,其他的应用配置可参见使用镜像创建无状态Deployment应用。
- 进行日志配置。单击+号创建新的采集配置,每个采集配置由 Logstore 名称和日志采集路径两项构成。
- Logstore 名称:您可以使用它来指定所采集日志存储于哪个 Logstore,如果该 Logstore 不存在的话,我们会自动为您在集群关联的日志服务 Project 下创建相应的 Logstore。
说明 名称中不能包含下划线(_),可以使用 - 来代替。
- 日志采集路径:您可以用它来指定希望采集的日志所在的路径,如使用/usr/local/tomcat/logs/catalina.*.log 来采集tomcat的文本日志。
说明 如果指定为 stdout 则表示采集容器的标准输出和标准错误输出。
每一项采集配置都会被自动创建为对应 Logstore 的一个采集配置,默认采用极简模式(按行)进行采集,如果您需要更丰富的采集方式,可以前往日志服务控制台,进入相应的 Project(默认是 k8s-log 前缀)和 Logstore 对配置进行修改。
- Logstore 名称:您可以使用它来指定所采集日志存储于哪个 Logstore,如果该 Logstore 不存在的话,我们会自动为您在集群关联的日志服务 Project 下创建相应的 Logstore。
- 自定义 Tag。单击+号创建新的自定义 Tag,每一个自定义 Tag 都是一个键值对,会拼接到所采集到的日志中,您可以使用它来为容器的日志数据进行标记,比如版本号。
- 当完成所有配置后,可单击右上角的下一步进入后续流程,后续操作可见使用镜像创建无状态Deployment应用。
使用 YAML 模板创建
- 登录 容器服务管理控制台。
- 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 部署,然后单击页面右上角的使用模板创建。
- YAML 模板的语法同 Kubernetes 语法,但是为了给容器指定采集配置,需要使用 env 来为 container 增加采集配置和自定义 Tag,并根据采集配置,创建对应的 volumeMounts 和 volumns。以下是一个简单的 Pod 示例:
apiVersion: v1
kind: Pod
metadata:
name: my-demo
spec:
containers:
- name: my-demo-app
image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
env:
######### 配置 环境变量 ###########
- name: aliyun_logs_log-stdout
value: stdout
- name: aliyun_logs_log-varlog
value: /var/log/*.log
- name: aliyun_logs_mytag1_tags
value: tag1=v1
###############################
######### 配置vulume mount ###########
volumeMounts:
- name: volumn-sls-mydemo
mountPath: /var/log
volumes:
- name: volumn-sls-mydemo
emptyDir: {}
###############################- 其中有三部分需要根据您的需求进行配置,一般按照顺序进行配置。
- 第一部分通过环境变量来创建您的采集配置和自定义 Tag,所有与配置相关的环境变量都采用
aliyun_logs_
作为前缀。 - 创建采集配置的规则如下:
- name: aliyun_logs_{Logstore 名称}
value: {日志采集路径}
示例中创建了两个采集配置,其中
aliyun_logs_log-stdout
这个 env 表示创建一个 Logstore 名字为 log-stdout,日志采集路径为 stdout 的配置,从而将容器的标准输出采集到 log-stdout 这个 Logstore 中。说明 Logstore 名称中不能包含下划线(_),可以使用 - 来代替。 - 创建自定义 Tag 的规则如下:
- name: aliyun_logs_{任意不包含'_'的名称}_tags
value: {Tag 名}={Tag 值}
配置 Tag 后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。
- 如果您的采集配置中指定了非 stdout 的采集路径,需要在此部分创建相应的 volumnMounts。
示例中采集配置添加了对/var/log/*.log 的采集,因此相应地添加了/var/log的 volumeMounts。
- 当 YAML 编写完成后,单击创建,即可将相应的配置交由 Kubernetes 集群执行。
查看日志
本例中查看通过控制台向导创建的tomcat应用的日志。完成配置后,tomcat应用的日志已被采集并存储到日志服务中,您可以如下步骤来查看您的日志:
- 安装成功后,进入日志服务控制台。
- 在进入控制台后,选择 Kubernetes 集群对应的 Project(默认为 k8s-log-{Kubernetes 集群 ID}),进入 Logstore 列表页面。
- 在列表中找到相应的 Logstore(采集配置中指定),单击查询。
- 本例中,在日志查询页面,您可查看tomcat应用的标准输出日志和容器内文本日志,并可发现自定义tag附加到日志字段中。
使用日志服务进行Kubernetes日志采集的更多相关文章
- 阿里云日志服务采集自建Kubernetes日志(标准输出日志)
日志服务支持通过Logtail采集Kubernetes集群日志,并支持CRD(CustomResourceDefinition)进行采集配置管理.本文主要介绍如何安装并使用Logtail采集Kuber ...
- aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务
日志服务(Log Service,Log)是针对日志场景的一站式服务,在阿里巴巴集团内部被广泛使用.用户无需开发就能快捷完成日志生命周期中采集.消费.投递以及查询功能. 日志服务当前提供如下功能 日志 ...
- asp.net core使用serilog将日志推送到腾讯云日志服务
为什么是serilog? Serilog是 .NET 中最著名的结构化日志类库. 基于日志事件log events,而不是日志消息log message. 你可以将日志事件格式化为控制台的可读文本或者 ...
- Kubernetes日志的6个最佳实践
本文转自Rancher Labs Kubernetes可以帮助管理部署在Pod中的上百个容器的生命周期.它是高度分布式的并且各个部分是动态的.一个已经实现的Kubernetes环境通常涉及带有集群和节 ...
- Kubernetes 集群日志 和 EFK 架构日志方案
目录 第一部分:Kubernetes 日志 Kubernetes Logging 是如何工作的 Kubernetes Pod 日志存储位置 Kubelet Logs Kubernetes 容器日志格式 ...
- Linux_rsyslogd日志服务(二)
一.rsyslogd日志统一格式 基本日志格式包含以下四列: 1.事件产生的时间 2.发生事件的服务器的主机名 3.产生事件的服务名或程序名 4.事件的具体信息 二./etc/rsyslog.conf ...
- centos 如何用 rsyslog 搭建本地日志服务
一.问题背景 最近项目遇到一个问题,服务器响应很慢,team中的两个有经验的工程师找了一台服务器分析了一下,发现问题出在磁盘写入过于频繁.这里大概介绍一下背景,我们的服务器上面主要是跑各种PHP接口, ...
- 5分钟搭建网站实时分析:Grafana+日志服务实战
原文地址:https://yq.aliyun.com/articles/227006 阿里云日志服务是针对日志类数据一站式服务,用户只需要将精力集中在分析上,过程中数据采集.对接各种存储计算.数据索引 ...
- 『学了就忘』Linux日志管理 — 91、日志服务rsyslogd说明
目录 1.日志文件格式 2.rsyslogd服务的配置文件 (1)rsyslog.conf文件内容 (2)rsyslog.conf配文件内容说明 (3)定义自己的日志 1.日志文件格式 只要是由日志服 ...
随机推荐
- Scala-Unit-2-Scala基础语法1
一.Scala程序的开始->HelloScala 这里的操作如同java的helloworld程序,直接放代码! object HelloScala{ def main(args:Array[S ...
- Java中CardLayout布局方式的应用
import java.awt.CardLayout; import java.awt.Color; import java.awt.Container; import javax.swing.JBu ...
- CSS规范 - 分类方法
CSS文件的分类和引用顺序 通常,一个项目我们只引用一个CSS,但是对于较大的项目,我们需要把CSS文件进行分类. 我们按照CSS的性质和用途,将CSS文件分成“公共型样式”.“特殊型样式”.“皮肤型 ...
- HDU 1710 (二叉树的前序和中序,求后序)
题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...
- rock-paper-scissors
rock-paper-scissors维护三个前缀和,然后注意顺序,最后做差来确定可行的答案,因为答案比较小,可以考虑这种暴力做法,像这种方案数可以++的题真的不多,如果想不出来特别优秀的想法,不妨简 ...
- P2279 [HNOI2003]消防局的设立
P2279 [HNOI2003]消防局的设立考场上想出了贪心策略,但是处理细节时有点问题,gg了.从(当前深度最大的节点)叶子节点往上跳k个,在这里设消防局,并从消防局遍历k个距离,标记上. #inc ...
- Linux学习笔记10
创建文件 touch touch filenames 创建文件夹 mkdir mkdir dir3 dir4 dir5 建立多个文件夹 mkdir ~/games 在登录用户的本目录之下建立game ...
- 超详细Gitlab Runner环境配置中文教程
配置GitlabRunner环境 GitLab Runner 是一个开源项目, 它用来运行你定制的任务(jobs)并把结果返回给 GitLab. GitLab Runner 配合GitLab CI(G ...
- CY7C68013 USB接口相机开发记录 - 第四天:上位机编写1
前面学习了USB相机硬件固件.设备驱动,可以实现USB设备识别.数据发送的功能.然后,非常重要的一部分,USB设备发出的数据,我要怎么接受,怎么查看发送的数据是否是正确的.网上百度了下,大部分人都使用 ...
- js 基本包装类型 String
为了操作基本类型值,ECMAScript提供了三个特殊的引用类型: Boolean , Number , String 举例: var s1 = "some text"; var ...