如何在 Rancher 中统一管理容器日志

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

相信大家对于容器和 docker 这个概念并不陌生,很高兴的是 docker 为我们提供了多种log-driver。 


wKioL1jLMlvAHiI3AACiXm5RIfk114.jpg


我们在使用 docker 处理日志的时候多数是采用 docker logs <container>命令,因为 docker 默认采用的 log-driver 是 json-file,所以 docker 会捕捉每一个容器进程 STDOUTS 和 STDERR,保存在磁盘文件.json.log 中供 docker logs 命令查询。 


wKiom1jLMmyDTA3TAABPgcpj3SA142.jpg


上述方式如果用于开发过程中的调试工作,是种快速且不错的方案,但是如果面对大规模应用部署的环境下那么日志的跟踪与调试带来的困扰显而易见,因此我们需要一个统一集中的容器日志收集与展示平台。


对于容器日志收集与展示,syslog + rsyslog + ELK(ElasticSearch、Logstash、Kibana)是一个不错的技术方案,我将简单介绍下为什么我们选用这种方案。


Syslog 是一种 RFC 协议,与平台无关,且是 UNIX 标准的日志解决方案,集成度良好。rsyslog 顾名思义是 remote 的意思,使 syslog 具备收集远端日志的功能,由于 logstash 采用 java 和 jruby开发,所以 logstash 文件库中可以加入 windows 日志文件。而 logspout 暂不支持容器-t(tty) 启动。


我们庆幸的是 Rancher 的 Catalog 真的很强大,Rancher Catalog 已经为我们提供了 ELK 的Catalog,下面我将给出 ELK 在 Rancher 中的部署视图,并简单介绍下视图中每个组件都是干什么的。 


wKiom1jLMnuz0yrjAABOtSRqUl8253.jpg


logstash-collector:用于接收 docker container 发送过来的日志信息,并将日志信息发送到redis 队列中。在 rancher 中默认开启 TCP:6000 UDP:5000 端口用于侦听发送过来的日志报文。

  • redis:日志消息队列。

  • logstash-indexer:用于接收redis中未处理的日志信息,然后将该日志消息发送到elasticsearsh中进行存储及搜索分析。

  • kopf:elasticsearch 的一款第三方插件,提供一个简单的管理员 web 界面。

  • elasticsearch-clients:用于处理路由请求,协调数据节点与主节点。

  • elasticsearch-master:用于集群操作相关的内容。

  • elasticsearch-datanode: 用于存储索引数据的节点。


上述部署视图中说好的 Kibana 哪儿去了?


因为我们有自己的日志展现平台,所以这里去掉了 kibana,如果你想在 Rancher 中使用 Kibana做日志前端展现,那么很简单,只需要利用 Rancher 的 Catalog,service link:Rancher 环境中上述已经部署好的 elasticsearch-client 即可。


至此,在 Rancher 中如何部署一套完整 ELK 系统已经介绍完了,下面我将介绍如何将容器日志发送到 ELK 中。 


wKioL1jLMrSQUD77AACK2w08uYk561.jpgwKioL1jLMr6R7n2lAAATXQPSuuk770.jpg


为了完成上述的目标,我们还需要做一些准备工作,那就是需要一个运行 rsyslog 的容器。如果你不想基于 alpine 去制作 rsyslog 镜像,那么可以使用 panoptix/rsyslog 这个镜像。


下面就是关键的一步:如何让 rsyslog 发送日志到 logstash 中。


上述 rsyslog 容器启动好之后我们需要告知 rsyslog,目的接收端 logstash 的地址。过程很简单,需要在容器中/etc/rsyslog.d/ 目录下建立一个文件 60-logstash.conf 


wKioL1jLMt2hgTOuAAATXQPSuuk427.jpg


:programname, contains, “docker”的意思是过滤日志,只有 Properties 中 key 为 programname,value 包含 docker 字样的日志才会被发送给 logstash


*.* @@logstash-collector:6000;json-template 是所有用户的所有日志通过 tcp 传输到logstash-collector 的 6000 端口并且日志使用 json-template 格式化。


同样我们需要建立 01-json-template.conf,property 的 key 值我们可以通过 rsyslog 官网获取。 


wKiom1jLMvuQMhLHAABzKZF-M_U010.jpg


下面我将介绍 rsyslog 如何收集容器日志。


首先我们需要修改我们的应用容器 log-driver 为 syslog(可以通过 rancher-ui 或者rancher-compose)来完成。


其次我们需要设置我们日志接收端 rsyslog 地址,可以通过 log_opt 指定syslog-address:hostname:tcp_port 来完成。


log_opt 可以指定许多 syslog 支持的选项比如 facility 等,在此不一一列举。目前日志显的杂乱无序。如何去按照 container 或者 stack 或者 service 去区分日志呢?


syslog 的 tag 属性为我们支持了自定义的标签,通过打 tag 的方式我们可以细粒度的自行切分日志。


Rancher 对 docker 的亲和性极大程度的为我们提供了遍历。我们可以通过 go templage 语法去获取 rancher 环境下容器的特征值从而协助我们切分日志信息。 


wKiom1jLMxCTkZYWAABlXoFM9dQ838.jpg


OK,现在我们再去查看 kibana 发现我们的容器日志已经展示在这里了。 


wKioL1jLMyGiqOGOAADT-8bvy5E594.jpg


最后我们可以按照 rancher catalog 规范,制作一键部署应用。 


wKiom1jLMzDjk6lTAAA2NW193Ec565.jpg



本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1907506

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
16天前
|
存储 Kubernetes 监控
提升日志管理效率:掌握CKA认证中的边车容器技巧
提升日志管理效率:掌握CKA认证中的边车容器技巧
26 0
|
3月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
3月前
|
负载均衡
|
3月前
|
运维 监控 关系型数据库
百度搜索:蓝易云【MYSQL四种管理日志详细介绍】
这四种管理日志对于MySQL服务器的性能监控、故障排查以及主从复制等方面都非常重要。在使用这些日志时,应根据具体需求来选择开启和配置,并定期清理和维护日志文件,以免占用过多磁盘空间。
56 0
|
4月前
|
运维 监控 数据可视化
日志管理:收集和分析Docker容器日志
容器化技术的普及使得应用的部署和管理更加便捷,但随之而来的挑战之一是有效地管理和分析容器产生的大量日志。本文将深入探讨Docker容器日志管理的重要性,介绍常用的日志收集工具,以及如何分析和利用这些日志数据,提供更为丰富和实际的示例代码,帮助大家更好地理解和应用日志管理的关键技术。
|
3月前
|
Docker 容器
Docker容器日志接入到GrayLog
Docker容器日志接入到GrayLog
46 0
|
3月前
|
Prometheus 监控 Cloud Native
Prometheus VS ELK Stack:容器监控与日志管理工具的比较与选择
在容器化时代,有效的容器监控与日志管理工具对于确保应用程序的可靠性和可维护性至关重要。本文将比较两个主流工具,Prometheus和ELK Stack,探讨它们在容器监控和日志管理方面的特点、优势和适用场景,帮助读者做出明智的选择。
|
3月前
|
Java 应用服务中间件 容器
SpringBoot 各种 Web 容器服开启 AccessLog 日志
SpringBoot 各种 Web 容器服开启 AccessLog 日志
36 0
|
15天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
71 1
|
16天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
70 1