如何在 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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Docker 容器
容器的日志
【10月更文挑战第31天】
564 68
|
11月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
450 5
|
12月前
|
存储 JSON 网络协议
Docker面试整理-如何查看和管理Docker容器的日志?
通过本文的介绍,我们了解了如何查看和管理Docker容器的日志,包括使用 `docker logs`命令、配置日志驱动、设置日志选项和集中日志管理。掌握这些技能,不仅可以在面试中展示专业水平,也能在实际工作中高效
2087 3
|
Web App开发 iOS开发 Docker
Docker 容器的日志
【10月更文挑战第31天】
198 5
|
存储 JSON Kubernetes
容器日志收集与管理
【10月更文挑战第11天】Kubernetes中的集群级日志处理确保应用程序日志在容器、Pod或节点出现故障时仍可获取。
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
723 108
|
4月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
392 57