本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。上一篇《容器日志管理(1)》中介绍了Docker自带的logs子命令以及其Logging driver,本篇将会介绍一个流行的开源日志管理方案ELK/EFK。

01

关于ELK

ELK简介

ELK 是Elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearchLogstash 和 Kibana

  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能

  • Logstash是一个用来搜集、分析、过滤日志的工具

  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据  

ELK日志处理流程

  上图展示了在Docker环境下,一个典型的ELK方案下的日志收集处理流程:

  • Logstash从各个Docker容器中提取日志信息

  • Logstash将日志转发到ElasticSearch进行索引和保存

  • Kibana负责分析和可视化日志信息

  由于Logstash在数据收集上并不出色,而且作为Agent,其性能并不达标。基于此,Elastic发布了beats系列轻量级采集组件。

  这里我们要实践的Beat组件是Filebeat,Filebeat是构建于beats之上的,应用于日志收集场景的实现,用来替代 Logstash Forwarder 的下一代 Logstash 收集器,是为了更快速稳定轻量低耗地进行收集工作,它可以很方便地与 Logstash 还有直接与 Elasticsearch 进行对接。

  本次实验直接使用Filebeat作为Agent,它会收集我们在第一篇《Docker logs & logging driver》中介绍的json-file的log文件中的记录变动,并直接将日志发给ElasticSearch进行索引和保存,其处理流程变为下图,你也可以认为它可以称作 EFK。

02

ELK/EFK套件的安装与运行

本次实验我们采用Docker方式部署一个最小规模的ELK运行环境,当然,实际环境中我们或许需要考虑高可用和负载均衡。

  首先拉取一下sebp/elk这个集成镜像,这里选择的tag版本是640(最新版本已经是7XX了):

docker pull sebp/elk:640

  注:由于其包含了整个ELK方案,所以需要耐心等待一会。

  通过以下命令使用sebp/elk这个集成镜像启动运行ELK:

docker run -it -d --name elk \    -p 5601:5601 \    -p 9200:9200 \    -p 5044:5044 \    sebp/elk:640

  运行完成之后就可以先访问一下 http://[Your-HostIP]:5601 看看Kibana的效果:  

  Kibana管理界面

Kibana Index Patterns界面

  当然,目前没有任何可以显示的ES的索引和数据,再访问一下http://[Your-HostIP]:9200 看看ElasticSearch的API接口是否可用:

ElasticSearch API

  Note:如果启动过程中发现一些错误,导致ELK容器无法启动,可以参考《Docker启动ElasticSearch报错》及《ElasticSearch启动常见错误》一文。如果你的主机内存低于4G,建议增加配置设置ES内存使用大小,以免启动不了。例如下面增加的配置,限制ES内存使用最大为1G:

docker run -it -d --name elk \    -p 5601:5601 \    -p 9200:9200 \    -p 5044:5044 \   -e ES_MIN_MEM=512m \    -e ES_MAX_MEM=1024m \    sebp/elk:640

03

Filebeat配置

安装Filebeat

这里我们通过rpm的方式下载Filebeat,注意这里下载和我们ELK对应的版本(ELK是6.4.0,这里也是下载6.4.0,避免出现错误):

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-x86_64.rpmrpm -ivh filebeat-6.4.0-x86_64.rpm

配置Filebeat

这里我们需要告诉Filebeat要监控哪些日志文件 及 将日志发送到哪里去,因此我们需要修改一下Filebeat的配置:

cd /etc/filebeatvim filebeat.yml

  要修改的内容为:

  (1)监控哪些日志?

filebeat.inputs:# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.- type: log  # Change to true to enable this input configuration.  enabled: true  # Paths that should be crawled and fetched. Glob based paths.  paths:    - /var/lib/docker/containers/*/*.log    - /var/log/syslog

  这里指定paths:/var/lib/docker/containers/*/*.log,另外需要注意的是将 enabled 设为 true。

  (2)将日志发到哪里?

#-------------------------- Elasticsearch output ------------------------------output.elasticsearch:  # Array of hosts to connect to.  hosts: ["192.168.16.190:9200"]  # Optional protocol and basic auth credentials.  #protocol: "https"  #username: "elastic"  #password: "changeme"

  这里指定直接发送到ElasticSearch,配置一下ES的接口地址即可。

  Note:如果要发到Logstash,请使用后面这段配置,将其取消注释进行相关配置即可:

#----------------------------- Logstash output --------------------------------#output.logstash:  # The Logstash hosts  #hosts: ["localhost:5044"]  # Optional SSL. By default is off.  # List of root certificates for HTTPS server verifications  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]  # Certificate for SSL client authentication  #ssl.certificate: "/etc/pki/client/cert.pem"  # Client Certificate Key  #ssl.key: "/etc/pki/client/cert.key"

启动Filebeat

由于Filebeat在安装时已经注册为systemd的服务,所以只需要直接启动即可:

systemctl start filebeat.service

  检查Filebeat启动状态:

systemctl status filebeat.service

验证Filebeat

通过访问ElasticSearch API可以发现以下变化:ES建立了以filebeat-开头的索引,我们还能够看到其来源及具体的message。

04

Kibana配置

接下来我们就要告诉Kibana,要查询和分析ElasticSearch中的哪些日志,因此需要配置一个Index Pattern。从Filebeat中我们知道Index是filebeat-timestamp这种格式,因此这里我们定义Index Pattern为 filebeat-*

  点击Next Step,这里我们选择Time Filter field name为@timestamp

  单击Create index pattern按钮,即可完成配置。

  这时我们单击Kibana左侧的Discover菜单,即可看到容器的日志信息啦:

  仔细看看细节,我们关注一下message字段:

  可以看到,我们重点要关注的是message,因此我们也可以筛选一下只看这个字段的信息:

  此外,Kibana还提供了搜索关键词的日志功能,例如这里我关注一下日志中包含unhandled exception(未处理异常)的日志信息:

  这里只是朴素的展示了导入ELK的日志信息,实际上ELK还有很多很丰富的玩法,例如分析聚合、炫酷Dashboard等等。笔者在这里也是初步使用,就介绍到这里啦。

05

Fluentd引入

关于Fluentd

前面我们采用的是Filebeat收集Docker的日志信息,基于Docker默认的json-file这个logging driver,这里我们改用Fluentd这个开源项目来替换json-file收集容器的日志。

  Fluentd是一个开源的数据收集器,专为处理数据流设计,使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。Fluentd也是云原生基金会 (CNCF) 的成员项目之一,遵循Apache 2 License协议,其github地址为:https://github.com/fluent/fluentd/。Fluentd与Logstash相比,比占用内存更少、社区更活跃,两者的对比可以参考这篇文章《Fluentd vs Logstash》。

  因此,整个日志收集与处理流程变为下图,我们用 Filebeat 将 Fluentd 收集到的日志转发给 Elasticsearch。

  当然,我们也可以使用Fluentd的插件(fluent-plugin-elasticsearch)直接将日志发送给 Elasticsearch,可以根据自己的需要替换掉Filebeat,从而形成Fluentd => ElasticSearch => Kibana 的架构,也称作EFK

运行Fluentd

这里我们通过容器来运行一个Fluentd采集器:

docker run -d -p 24224:24224 -p 24224:24224/udp \  -v /edc/fluentd/log:/fluentd/log \  fluent/fluentd

  默认Fluentd会使用24224端口,其日志会收集在我们映射的路径下。

  此外,我们还需要修改Filebeat的配置文件,将/edc/fluentd/log加入监控目录下:

#=========================== Filebeat inputs =============================filebeat.inputs:# Each - is an input. Most options can be set at the input level, so# you can use different inputs for various configurations.# Below are the input specific configurations.- type: log  # Change to true to enable this input configuration.  enabled: true  # Paths that should be crawled and fetched. Glob based paths.  paths:    - /edc/fluentd/log/*.log

  添加监控配置之后,需要重新restart一下filebeat:

systemctl restart filebeat

运行测试容器

为了验证效果,这里我们Run两个容器,并分别制定其log-dirver为fluentd:

docker run -d \           --log-driver=fluentd \           --log-opt fluentd-address=localhost:24224 \           --log-opt tag="test-docker-A" \           busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'docker run -d \           --log-driver=fluentd \           --log-opt fluentd-address=localhost:24224 \           --log-opt tag="test-docker-B" \           busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'

  这里通过指定容器的log-driver,以及为每个容器设立了tag,方便我们后面验证查看日志。

验证

这时再次进入Kibana中查看日志信息,便可以通过刚刚设置的tag信息筛选到刚刚添加的容器的日志信息了:

06

小结

本文从ELK的基本组成入手,介绍了ELK的基本处理流程,以及从0开始搭建了一个ELK环境,演示了基于Filebeat收集容器日志信息的案例。然后,通过引入Fluentd这个开源数据收集器,演示了如何基于EFK的日志收集案例。当然,ELK/EFK有很多的知识点,笔者也还只是初步使用,希望未来能够分享更多的实践总结。

参考资料:

CloudMan,《每天5分钟玩转Docker容器技术》

一杯甜酒,《ELK学习总结》

于老三,《快速搭建ELK日志分析系统》

zpei0411,《Logstash beats系列 & Fluentd》

曹林华,《从ELK到EFK的演进》

点个【在看】,和更多人一起分享!

容器日志管理 (2) 开源日志管理方案 ELK/EFK相关推荐

  1. 你必须知道的容器日志 (2) 开源日志管理方案 ELK/EFK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...

  2. ExpRe[14] 文献管理[0] 开源文献管理软件Zotero

    文章目录 Zotero 本体和Chrome插件下载安装 初步使用 集成Markdown here插件 时效性 本篇撰写时间为2021.11.21,由于计算机技术日新月异,博客中所有内容都有时效和版本限 ...

  3. 一文读懂开源日志管理方案 ELK 和 EFK 的区别

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 前言 主流的 ELK (Elasticsearch, Logstash, Kibana) 目前已经转变为 EFK ...

  4. 【基于容器的部署、扩展和管理】3.6 集群监控和日志收集

    往期回顾: 第一章:[云原生概念和技术] 第二章:[容器化应用程序设计和开发] 第三章:[3.1 容器编排系统和Kubernetes集群的构建] 第三章:[3.2 基于容器的应用程序部署和升级] 第三 ...

  5. Apache的配置与应用【Apache访问控制】以及apache日志管理【日志分割、awstats日志分析】

    Apache的配置与应用以及日志管理 文章目录 Apache的配置与应用以及日志管理 一.Apache连接和访问控制 1.Apache连接 [1]KeepAlive [2]KeepAlive Time ...

  6. Java开源开发平台O2OA V7.0发布,支持Docker容器化部署和三员管理模式

    O2OA开发平台开源至今,已经有很多开发者参与我们每个版本的迭代和更新,有的开发者已经利用O2OA在公司内部搭建公司的开发平台,有的开发者在商业项目中使用O2OA平台作为信息化系统建设的基础能力平台. ...

  7. Linux日志记录服务,日志管理工具

    syslog 简介: syslog是一种广泛使用的日志记录服务,用于记录系统和应用程序的事件,详细记录包括时间戳.主机IP地址.应用程序名称.优先级.消息内容等信息.syslog有三个主要部分:客户端 ...

  8. linux更改日志输出级别,Linux-日志管理

    本章内容 日志介绍 日志配置 日志管理 远程日志 基于MYSQL的日志 日志介绍 日志: 历史事件:时间,地点,人物,事件 日志级别:事件的关键性程度,Loglevel 系统日志服务: sysklog ...

  9. 浅谈Oracle服务器归档日志,oracle服务器运行时管理归档日志文件不管理联机重做日志文件...

    <Oracle数据库管理与维护实战>--2.4 Oracle后台进程结构 本节书摘来自异步社区出版社<Oracle数据库管理与维护实战>一书中的第2章,第2.4节,作者: 何伟 ...

最新文章

  1. makefille的使用
  2. docker 容器无法使用中文 解决方案
  3. c# equals与==的区别【转】
  4. 大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...
  5. 布隆过滤器(Bloom Filter)- 原理、实现和推导
  6. 【JDK】JDK源码分析-CountDownLatch
  7. 一张图看懂ITIL V3 与ITIL4的主要差异
  8. 使用触发器对学生表操作进行日志记录
  9. 红帽linux安装ftp服务,红帽Linux安装FTP服务
  10. html5 uc qq,(进阶版)手机浏览器用户体验报告:UC、QQ、360,到底哪个好?
  11. LTE CAT M1模块为辅助生活系统提供了宽带和智能手机的替代方案
  12. 简单说 通过CSS的滤镜 实现 火焰效果
  13. 互联网创业新思路,桔子拓客帮您一键解决流量难题
  14. Google 镜像站搜集
  15. php 中等职业教材,中等职业教育计算机专业系列教材
  16. ind2vec和vec2ind函数用法
  17. 调整字体像刻在下面图层上的方法
  18. #读书#黑白之间——中国历史文化中的任侠者
  19. 原来眼镜是可以摘掉的
  20. 关于5G的真正价值,贝西浅谈

热门文章

  1. Teams Bot开发系列:Activity和Turn
  2. 本地服务器下的局域网安全吗_本地安全认证服务器
  3. 当检测到运动时如何自动打开门灯
  4. html仿微信滑动删除,使用Vue实现移动端左滑删除效果附源码
  5. css3 伪类选择器
  6. Linq 实现 DataTable 行转列
  7. 微软 改变 开源【几个站点】
  8. css 中图片旋转,倾斜,位移,平滑
  9. CentOS利用crontab执行计划任务
  10. Sql plus命令报command not found的解决笔记