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

简介:

相信大家对于容器和 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

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
Docker 容器
容器的日志
【10月更文挑战第31天】
797 68
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
548 5
|
存储 JSON 网络协议
Docker面试整理-如何查看和管理Docker容器的日志?
通过本文的介绍,我们了解了如何查看和管理Docker容器的日志,包括使用 `docker logs`命令、配置日志驱动、设置日志选项和集中日志管理。掌握这些技能,不仅可以在面试中展示专业水平,也能在实际工作中高效
2433 3
|
Web App开发 iOS开发 Docker
Docker 容器的日志
【10月更文挑战第31天】
260 5
|
存储 JSON Kubernetes
容器日志收集与管理
【10月更文挑战第11天】Kubernetes中的集群级日志处理确保应用程序日志在容器、Pod或节点出现故障时仍可获取。
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
4357 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
983 54
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
450 9
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
944 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log