Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在腾讯云容器服务中对容器实例日志设置定期清理和回卷

在腾讯云容器服务中对容器实例日志设置定期清理和回卷

原创
作者头像
腾讯云容器服务团队
修改于 2017-09-07 03:09:49
修改于 2017-09-07 03:09:49
5.9K1
举报

引言

Kubernetes对于容器实例的日志收集,并没有提供原生的解决方案。但提供使用kubectl logs命令查看容器实例运行时的日志。kubectl logs命令实现的基本原理为:容器运行时默认将标准输出和标准错误中的日志输出到磁盘上保存。保存至主机目录:/var/lib/docker/containers/container_id/目录。用户调用kubectl logs命令时,kubelet读取对应的日志文件中的数据,将数据回传给master,再由master返回到用户。从而实现用户对日志的查看。

腾讯云容器服务利用kubectl logs命令,实现在控制台即可查看对应容器实例的日志,并且提供查看某个特定时间段的日志的功能,这极大的方便了用户对容器实例中的程序进行定位和跟踪。但是,由于在容器实例日志保存在本地,当程序中大量打印日志时,很容易造成主机上的磁盘空间大量被占用。在日志服务上线一段时间后,发现用户遇到这种情况时,一般是手动去清理日志。我们就考虑是不是有比较简单的方式,在集群节点对日志进行定期清理和回卷。

通过logrotate服务实现日志定期清理和回卷

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

但如果按照之前的部署方式,需要手动在每个节点上都安装和配置对应logrotate工具。如果通过Kubernetes容器服务编排的能力,将logrotate通过Kubernetes中服务的方式部署到各个节点上,这样既可以实现只需要一次部署,部署到所有节点。并且通过容器的方式保证了logrotate配置的一致性。

具体的实施方案如下图所示:

方案的具体实现是在Kubernetes集群中,创建DaemonSet资源实现。DaemonSet资源会在每个Node节点上都部署一个logrotate的容器实例,并且在容器实例中设置映射主机的log日志目录,从而实现日志的定时清理和回卷。

创建DaemonSet的示例如下

代码语言:txt
复制

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

name: logrotate

spec:

template:

代码语言:txt
AI代码解释
复制
metadata:
代码语言:txt
AI代码解释
复制
  labels:
代码语言:txt
AI代码解释
复制
    app: logging
代码语言:txt
AI代码解释
复制
    id: logrotate
代码语言:txt
AI代码解释
复制
  name: logrotate
代码语言:txt
AI代码解释
复制
spec:
代码语言:txt
AI代码解释
复制
  containers:
代码语言:txt
AI代码解释
复制
  - name: logrotate-es
    image: blacklabelops/logrotate
    securityContext:
      privileged: true
    volumeMounts:
     - name: containers
代码语言:txt
AI代码解释
复制
       mountPath: /var/lib/docker/containers
代码语言:txt
AI代码解释
复制
     - name: varlog
       mountPath: /var/log/docker
     - name: logs
代码语言:txt
AI代码解释
复制
       mountPath: /logs
代码语言:txt
AI代码解释
复制
    env:
代码语言:txt
AI代码解释
复制
    - name: LOGS_DIRECTORIES
      value: "/var/lib/docker/containers /var/log/docker"
    - name: LOGROTATE_INTERVAL
代码语言:txt
AI代码解释
复制
      value: "hourly"
代码语言:txt
AI代码解释
复制
    - name: LOGROTATE_OLDDIR
      value: "/logs"
  volumes:
     - hostPath:
代码语言:txt
AI代码解释
复制
         path: /var/lib/docker/containers
代码语言:txt
AI代码解释
复制
       name: containers
代码语言:txt
AI代码解释
复制
     - hostPath:
         path: /var/log/docker
       name: varlog
     - hostPath:
代码语言:txt
AI代码解释
复制
         path: /var/log/containers/
代码语言:txt
AI代码解释
复制
       name: logs  
代码语言:txt
复制

使用这个yaml文件,可以直接在Kubernetes中进行部署。

代码语言:sh
AI代码解释
复制
# kubectl create -f logrotate_ds.yaml
daemonset "logrotate" created

在示例的yaml文件中,logrotate服务将按照定时(1小时)的对日志进行回卷,回卷超过5个副本后则会对日志进行清理。如果有需要,可以修改相应的参数,设置不同的回卷规则和清理规则。详细的参数说明可以参考:https://github.com/blacklabelops/logrotate。

通过修改dockerd参数进行回卷和清理

由于Kubernetes的日志收集,底层是通过docker来实现。而docker提供了一定的日志回卷和清理功能。可以通过在dockerd的启动参数中,增加log-opts()参数实现对日志的回卷和清理,其中max-size参数设置日志一个副本的最大值,max-file设置日志的最大的副本数。超过这个副本数则会对日志进行删除。

具体的修改过程包括三个步骤:

1、创建/etc/dockerd/daemon.json

代码语言:sh
AI代码解释
复制
{
  "log-driver":"json-file",
  "log-opts":{
	"max-size" :"10m","max-file":"3"
    }
}

参数说明: 设置单个容器日志超过10M则进行回卷,回卷的副本数超过3个就进行清理。

2、修改dockerd 服务配置文件

在 /etc/systemd/system/multi-user.target.wants/dockerd.serviced文件中

添加dockerd启动参数--config-file=/etc/docker/daemon.json

3、重新启动dockerd服务

代码语言:sh
AI代码解释
复制
systemctl daemon-reload
service dockerd restart

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
https://github.com/blacklabelops/logrotate。这个链接多个句号,直接链接会404
https://github.com/blacklabelops/logrotate。这个链接多个句号,直接链接会404
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Kubernetes部署ELK并使用Filebeat收集容器日志
Elasticsearch运行时要求vm.max_map_count内核参数必须大于262144,因此开始之前需要确保这个参数正常调整过。
大江小浪
2018/09/19
5.8K0
Kubernetes部署ELK并使用Filebeat收集容器日志
kubernetes控制器之DaemonSet
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
菲宇
2019/06/12
4950
kubernetes系列教程(十二)详解DaemonSet控制器
上章节中介绍了Deployment,ReplicaSet,ReplicationController等副本控制器的使用和场景,接下来介绍kubernetes系列教程控制器DaemonSet使用。
HappyLau谈云计算
2019/10/31
7.5K0
kubernetes系列教程(十二)详解DaemonSet控制器
Kubernetes中部署ELK Stack日志收集平台
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2021/07/21
1.8K6
Kubernetes的DaemonSet(上篇)
静儿作为美团容器化团队HULK的一员,经常需要和Kubernetes(k8s)打交道。第一次登陆node(宿主机)的时候,发现连续登陆几台都看到了Prometheus-Node-Exporter字样的docker进程。他们和普通的Pod(容器)一样,占用IP等资源,占用宿主机允许的pod数上限。后来通过看书了解到这是DaemonSet控制管理的Pod.
静儿
2019/04/01
1.2K0
Kubernetes的DaemonSet(上篇)
EFK日志平台部署
日志收集方案是采用 Elasticsearch、Fluentd、Filebeat 和 Kibana(EFK)技术栈。 Fluented主要用来收集k8s组件和docker容器日志,Filebeat主要用来收集应用日志,主要因为目前项目中应用日志并未全部通过stdout方式输出到docker日志驱动中,导致flunted收集日志并不全面,需要通过Filebeat来将应用日志收集到es中,再由kibana来展示。
mikelLam
2022/10/31
1.1K0
EFK日志平台部署
K8S集群模式下fluent-bit日志收集方案设计和实践
「随着 K8s 不断更新迭代,使用 K8s 日志系统建设的开发者,逐渐遇到了各种复杂的问题和挑战。本篇文章中结合作者使用经验,分析和设计 K8s 日志收集实践过程。」
用户5166556
2020/06/07
3.6K0
日志收集方案EFK
EFK(ElasticSearch、Fluentd、Kibana)是常见的分布式系统日志收集方案,es 用于存储数据,kibana 用于展示数据,支持各种搜索及维度聚合。fluentd 为日志收集工具,支持从各个数据源收集数据,对数据进行过滤、解析、转换、结构化后,写入 es。
liliane
2022/07/16
2.6K0
容器化守护进程DaemonSet
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
用户11097514
2024/07/26
1780
Kubernetes-基于EFK进行统一的日志管理
通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大多数容器引擎同样被设计成支持某种日志机制。对于容器化应用程序来说,最简单和最易接受的日志记录方法是将日志内容写入到标准输出和标准错误流。 但是,容器引擎或运行时提供的本地功能通常不足以支撑完整的日志记录解决方案。例如,如果一个容器崩溃、一个Pod被驱逐、或者一个Node死亡,应用相关者可能仍然需要访问应用程序的日志。因此,日志应该具有独立于Node、Pod或者容器的单独存储和生命周期,这个概念被称为群集级日志记录。群集级日志记录需要一个独立的后端来存储、分析和查询日志。Kubernetes本身并没有为日志数据提供原生的存储解决方案,但可以将许多现有的日志记录解决方案集成到Kubernetes集群中。在Kubernetes中,有三个层次的日志:
菲宇
2019/06/12
1.3K0
Kubernetes-基于EFK进行统一的日志管理
kubernetes日志收集方案
在kubernetes中对日志的处理方式叫做cluster-level-logging,即这个日志处理系统跟容器,Pod,Node的生命周期无关,也就是无论是容器挂了,Pod被删除了还是Node宕机了,应用的日志应该被正常获取到。
极客运维圈
2020/03/21
1.7K0
Kubernetes K8S之资源控制器Daemonset详解
kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。
踏歌行
2020/10/15
2.7K0
K8s入门教程|这个给集群搞硬装的才是幕后英雄
大家好啊,咱们的Kubernetes学习笔记时隔两月终于又迎来了更新,前面咱们介绍的Deployment、Service、Statefulset 相信看过文章的同学都已经明白他们各自的能力和使用场景了,如果已经没啥印象了或者是还没看过的同学,推荐看一下之前讲他们三个的文章。
KevinYan
2021/11/30
4750
云原生(二十九) | Kubernetes篇之自建高可用k8s集群优化
可参照官方文档: Kubelet 配置 (v1beta1) | Kubernetes
Lansonli
2022/06/27
6840
云原生(二十九) | Kubernetes篇之自建高可用k8s集群优化
k8s DaemonSet 介绍与实例
我们之前说k8s中使用deployment、statefulset工作负载资源来分别维护无状态和有状态应用。这篇小作文我们会学习如何使用DaemonSet来维护一个守护进程(应用)。
你大哥
2021/11/02
2K0
Kubernetes DaemonSet控制器
DaemonSet可以在全部或者某些节点上运行一个Pod的副本,该Pod的副本随着节点的加入被创建,随着节点的删除被回收。
shysh95
2022/10/31
3310
谈一下Docker与Kubernetes集群的日志和日志管理
日志对于我们管理Kubernetes集群及其上的应用具有非常重要的作用,特别是在出现故障或者Bug的时候。如果你能回答下面几个问题,那么可以不用再看本文了,如果不能回答,本文可能正好适合你。
大江小浪
2018/09/19
2.5K0
谈一下Docker与Kubernetes集群的日志和日志管理
使用log-Pilot做日志收集
log-Pilot是一个智能容器日志采集工具,它不仅能够高效便捷地将容器日志采集输出到多种存储日志后端,同时还能够动态地发现和采集容器内部的日志文件,更多咨询可以移步这里。
极客运维圈
2020/07/01
2.7K0
原 荐 docker清理
清理已经停止的容器 docker container prune or docker rm $(docker ps -q -f status=exited) 清理过程镜像 docker rmi $(
霡霂
2018/06/04
1.1K0
使用 Elastic Stack 构建 Kubernetes 全栈监控(3/4)
在本节中我们将要安装配置 Filebeat 来收集 Kubernetes 集群中的日志数据,然后发送到 ElasticSearch 去中,Filebeat 是一个轻量级的日志采集代理,还可以配置特定的模块来解析和可视化应用(比如数据库、Nginx 等)的日志格式。
我是阳明
2020/07/10
1.6K0
相关推荐
Kubernetes部署ELK并使用Filebeat收集容器日志
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档