资讯专栏INFORMATION COLUMN

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

whinc / 680人阅读

摘要:在中默认开启端口用于侦听发送过来的日志报文。至此,在中如何部署一套完整系统已经介绍完了,下面我将介绍如何将容器日志发送到中。下面我将介绍如何收集容器日志。目前日志显的杂乱无序。,现在我们再去查看发现我们的容器日志已经展示在这里了。

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

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

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

对于容器日志收集与展示,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 中的部署视图,并简单介绍下视图中每个组件都是干什么的。

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 中。


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

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

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

: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 官网获取。

下面我将介绍 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 环境下容器的特征值从而协助我们切分日志信息。

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27957.html

相关文章

  • FAQ宝典之Rancher Server

    摘要:宝典系列来袭,相关的常见问题,本文一网打尽。在中的设置是以秒为单位的。在启动时,执行模式迁移。它的竞争条件可能会留下一个锁定条目,这将阻止后续的流程。更改为,并清除的值。确认更改在表中是否生效。如果认证未打开,则响应代码应为。 Rancher FAQ宝典系列来袭,Rancher Server相关的常见问题,本文一网打尽。 1、Docker运行Rancher Server容器应该注意什么...

    Lsnsh 评论0 收藏0
  • Docker监控及日志采集神器

    摘要:因此,另一种解决办法像这样的工具,则只是将和进行了结合,其功能尤其关注日志管理,比如格式检查,日志语法分析,数据改进地址地理位置信息,元数据标签等以及日志路由。 由Rancher社区维护的应用商店最近迎来了两个明星项目——SPM 和 Logsene,来自Sematext的监控与日志工具。如果你已经熟悉Logstash,Kibana,Prometheus,Grafana这些监控或日志解决...

    PAMPANG 评论0 收藏0
  • 德国KubeCon直击:如何轻松且安心地将k8s用于生产?

    摘要:年正在柏林盛大举行,来自等多个开源云原生社区的领先技术专家正汇聚一堂,以进一步推动云原生计算的教育和发展。例如,你还需要诸如负载均衡器和的服务来运行应用程序。负载均衡器可以进行高级定制,以满足用户的各类需求。 想要在生产环境中成功部署容器,你需要的不仅仅是容器编排。 2017年CloudNativeCon+KubeCon Europe正在柏林盛大举行,来自Fluented、Kubern...

    Jensen 评论0 收藏0

发表评论

0条评论

whinc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<