由Rancher社区维护的应用商店最近迎来了两个明星项目——SPM 和 Logsene,来自Sematext的监控与日志工具。如果你已经熟悉Logstash,Kibana,Prometheus,Grafana这些监控或日志解决方案,那么朋友请认真阅读本文,它将向你展示SPM和Logsene为Rancher用户带来了什么样的功能,和其它解决方案有着什么样的差异。
接触Sematext Docker Agent
Sematext Docker Agent 是一个时下Docker原生的监控及日志采集代理(Agent)程序。它在每一个Docker宿主机运行一个非常小的容器,用以为所有集群节点以及这些节点上的容器采集日志、系统指标与事件。Agent代理程序监听所有Rancher管理的节点,在部署Sematext Docker Agent后,所有的日志、Docker事件、各项指标都能被外部所访问。
这将变得很有价值,为什么呢?因为它意味着你不再需要耗费几个小时甚至好几天时间去弄明白究竟需要采集哪些数据或如何将它们图表化。还有,你不需要花资源来维护你自己的日志监控体系,你的Docker系统指标及事件都会输出给SPM 而日志将输出给Logsene(SPM是一个应用程序性能监控服务,它支持与诸多平台进行集成,这当然也包括Docker,而Logsene 是一个日志管理服务,一个托管于Rancher的ELK应用栈,它能很好的和Kibana和Grafana一并工作)
DevOps工具对比
有一些Docker日志与指标处理的开源工具供我们选择,比如cAdvisor以及Logspout。遗憾的是,这些工具都不具备足够的综合能力。一种解决办法是集成一系列工具来达成目标,可是这样的后果是把体系带向“Franken-monitoring(指技术大杂烩,各个组件并不能按承诺的功能正常运行)”的方向,用户将因此而背负沉重的技术债,也没有人会愿意解决这种复杂的故障。因此,另一种解决办法像Sematext Docker Agent这样的工具,则只是将cAdvisor和Logspout进行了结合,其功能尤其关注日志管理,比如格式检查,日志语法分析,数据改进(Geo-IP地址地理位置信息,元数据标签等)以及日志路由。
通过Rancher Catalog配置Sematext Docker Agent
在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
- 数据库类似MongoDB, HBase, MySQL
- 检测JSON日志格式,通常被Node.js程序所使用,例如bunyan和winston日志框架
提示: 如果要创建自定义模式,请在Rancher Catalog模板里把它们添加到叫做LOGAGENT_PATTERNS的字段里。
自动的容器日志Geo-IP增强项
从Docker容器之外获取到经过采集运送并分析后的日志已经节约了大量的时间,但是有一些应用日志需要从其它数据源获取额外的增强信息。一个常见的案例是增强Web Server的日志信息(或者说任意包含IP地址信息的日志),为日志中的IP地址提供其地理位置信息。
Sematext Docker Agent 支持Geo-IP enrichment of docker logs。它使用Maxmind Geo-IP轻量数据库,它能为你定期的提供更新信息,无需停止容器或为其挂载包含Geo-IP数据库的新卷,或任何其它手动操作。
诀窍: 如果需要开启Geo-IP增强功能,请设置环境变量GEOIP_ENABLED=true。
过滤容器日志
在某些场景,我们只需要收集重要应用的日志而忽略掉那些较低优先级的或较为嘈杂的服务日志(例如那些频繁的清理工作)。这样我们可以使用白名单或黑名单(针对容器名或镜像名)来处理这些容器即可,其设置采用正则表达式匹配相应的元数据字段。
Whitelist containers
MATCH_BY_NAME 正则表达式对容器名进行白名单设置
MATCH_BY_IMAGE 正则表达式对镜像名进行白名单设置
Blacklist containers 正则表达式对容器名进行黑名单设置,将日志忽略该容器
SKIP_BY_NAME
SKIP_BY_IMAGE 正则表达式对镜像名进行黑名单设置,将日志忽略该镜像
如何使用Sematext Catalog项目
在Rancher的UI里,进入社区的Catalog项目列表,搜索关键字“sematext”、“monitoring”或“logs”即可。
点击“View Details”,在“Configuration Options”选项里输入SPM和Logsene App的tokens。你可以从https://apps.sematext.com进行注册并创建你的SPM和Logsene应用,然后即可获取这些访问令牌(tokens)。如果你的Rancher集群运行在防火墙(代理)之后, 你需要在HTTPS_PROXY或 HTTP_PROXY环境变量处填写proxy URL。如果你在这个集群里同时也运行了Kubernetes,请选择KUBERNETES=1。
如果你想收集所有的日志,不要填写任何容器或镜像名的过滤值,直接点击“Launch”即可。
总结
我们希望这篇对Rancher平台中Sematext Docker Agent的介绍,能帮助你在开始对Docker进行监控与日志处理时,不用采用大杂烩的繁琐模式。该项目完整的配置参数可从Github获得参考。 我们相信新的Catalog模板已经能覆盖最常用的选项,如果你发现一些重要项目缺失,请将其提交至Rancher community catalog (提交issue或是pull request)。结合Rancher试用一下Sematext Docker Agent 吧,所有服务将被轻松接管,你将就此高枕无忧。Rancher Community Catalog让日志监控系统能瞬间设置并运行起来,一切都变得如此容易。
译者简介
彭攀(Alan Peng),Rancher中国社区技术专家委员会成员。近20年IT及互联网企业服务经验,曾供职于GlobalSouces、PICCHealth、SmartDriveSystems等公司,对基础架构规划运营、虚拟化及云计算产品有着多年实践经验。现就职于睿云智合深圳总部,为项目交付团队技术负责人。