码头工人监控及日志采集神器

由Rancher社区维护的应用商店最近迎来了两个明星项目——SPM 和 Logsene,来自Sematext的监控与日志工具。如果你已经熟悉Logstash,Kibana,Prometheus,Grafana这些监控或日志解决方案,那么朋友请认真阅读本文,它将向你展示SPM和Logsene为Rancher用户带来了什么样的功能,和其它解决方案有着什么样的差异。



Sematext Docker Agent 是一个时下Docker原生的监控及日志采集代理(Agent)程序。它在每一个Docker宿主机运行一个非常小的容器,用以为所有集群节点以及这些节点上的容器采集日志、系统指标与事件。Agent代理程序监听所有Rancher管理的节点,在部署Sematext Docker Agent后,所有的日志、Docker事件、各项指标都能被外部所访问。


这将变得很有价值,为什么呢?因为它意味着你不再需要耗费几个小时甚至好几天时间去弄明白究竟需要采集哪些数据或如何将它们图表化。还有,你不需要花资源来维护你自己的日志监控体系,你的Docker系统指标及事件都会输出给SPM 而日志将输出给Logsene(SPM是一个应用程序性能监控服务,它支持与诸多平台进行集成,这当然也包括Docker,而Logsene 是一个日志管理服务,一个托管于Rancher的ELK应用栈,它能很好的和Kibana和Grafana一并工作)


Docker监控及日志采集神器



有一些Docker日志与指标处理的开源工具供我们选择,比如cAdvisor以及Logspout。遗憾的是,这些工具都不具备足够的综合能力。一种解决办法是集成一系列工具来达成目标,可是这样的后果是把体系带向“Franken-monitoring(指技术大杂烩,各个组件并不能按承诺的功能正常运行)”的方向,用户将因此而背负沉重的技术债,也没有人会愿意解决这种复杂的故障。因此,另一种解决办法像Sematext Docker Agent这样的工具,则只是将cAdvisor和Logspout进行了结合,其功能尤其关注日志管理,比如格式检查,日志语法分析,数据改进(Geo-IP地址地理位置信息,元数据标签等)以及日志路由。



在Rancher平台设置Sematext Docker Agent,你只需要选择合适的catalog模板即可(在Rancher的社区Catalog条目下查找“Sematext” )。我们来快速的浏览一下Sematex提供了哪些功能?如何在Rancher平台对其进行设置?


Docker Compose及Kubernetes自动日志标签


所有的日志均被加上了元数据标签,这包含了对Docker/Rancher Compose项目及Kubernetes的支持:


针对Docker Container

  • 容器ID

  • 容器名

  • 镜像名


针对Docker/Rancher Compose

  • 服务名

  • 项目名

  • 容器数(如果你设置了Scale=N)


针对Kubernetes

请注意Kubernetes容器的日志和其它Docker容器的日志并没有什么很大的不同,然而Kubernetes用户需要访问已部署的pods的日志,因此,为日志搜索而抓取Kubernetes特有的信息变得非常有用,例如:

  • 命名空间

  • Pod名称

  • 容器名称

  • Kubernetes UID


诀窍:如需启用Kubernetes标签,请设置Kubernetes=1



对于较为庞大的部署,你也许需要针对不同租户或应用对日志进行索引,将其输出到不同的路径或Logsene应用处理(这样你也可以区分不同的用户对不同日志的访问权)。我们使这个变得非常简单:为你的容器简单地添加一个Docker标签,或设置LOGSENE_TOKEN环境变量(LOGSENE_TOKEN=your app token),于是Sematext Docker Agent会将日志发送至正确的索引项!用这种方式你完全不需要一个中心配置文件来映射容器和索引项/令牌,于是日志路由变得非常灵活,动态与弹性化。



日志的处理基于Docker API以及一个叫做logagent-js的库,该项目被Sematext所开源。这个分析框架包含了日志格式检测和分析标准正式Docker容器所使用的不同日志格式的模式:


  • Web服务器例如Nginx、Apache httpd或其它使用常见Web服务器日志格式

  • 搜索引擎类似Elasticsearch和Solr

  • 消息队列类似Apache Kafaka及nsq.李io

    码头工人监控及日志采集神器