ELK分布式日志搜集分析系统
那么,ELK 到底是什么呢? “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。(引用官网ELK Stack:Elasticsearch、Logstash 和 Kibana | Elastic)
ElasticSearch 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash 是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
Filebeat 是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到ElasticSearch或Logstash进行索引。
Filebeat与Logstash优劣势:
优势
Logstash 主要的有点就是它的灵活性,主要因为它有很多插件,详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源,几乎可以处理任何问题。
Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄。
劣势
Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。这里有Logstash 与 filebeat 的性能对比。它在大数据量的情况下会是个问题。另一个问题是它目前不支持缓存,目前的典型替代方案是将 Redis 或 Kafka 作为中心缓冲池。
Filebeat 的应用范围十分有限,所以在某些场景下我们会碰到问题。例如,如果使用 Logstash 作为下游管道,我们同样会遇到性能问题。正因为如此,Filebeat 的范围在扩大。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而现在它可以将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具备过滤的能力。
1、服务器集群节点安装Logstash日志收集系统插件
2、每台服务器节点将日志输入到Logstash中
3、Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中
4、浏览器使用Kibana查询详细的日志信息
一个完整的集中式日志系统,是离不开以下几个主要特点的。
基础日志流动过程
日志数据直接处理:
Filebeat -> Elasticsearch
索引之前过滤拆分字段,通过Logstash中转:
Filebeat -> Logstash -> Elasticsearch
如果日志数据量过大,建议中间再加一个消息队列
Filebeat -> Kafka / Redis -> Logstash -> Elasticsearch
Docker介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Dokcer的应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Dokcer基础命令
// 查看运行中的容器
$ docker ps
// 查看所有容器
$ docker ps -a
// 启动一个已停止的容器
$ docker start <容器 ID>
// 启动一个已启动的容器
$ docker stop <容器 ID>
// 重启容器
$ docker restart <容器 ID>
// 查看容器的配置和状态信息
$ docker inspect <容器 ID>
// 删除容器
$ docker rm -f <容器 ID>
// 进入容器
$ docker exec -it <容器 ID> /bin/bash
// 查看镜像
$ docker images
// 查找镜像
$ docker search <镜像名>
// 拉取远程镜像
$ docker pull <镜像名>
// 删除镜像
$ docker rmi <镜像名>
docker run -d --name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:6.2.4
访问地址: http://localhost:9200
启动命令
docker run -d -u 0 --name kibana \
-p 5601:5601\
docker.elastic.co/kibana/kibana:6.2.4
修改配置文件
1、docker exec -it kibana /bin/bash (进入容器)
2、/usr/share/kibana/config/kibana.yml (文件位置)
3、elasticsearch.url: http://localhost:9200
xpack.monitoring.ui.container.elasticsearch.enabled: false
(实际部署不要用127.0.0.1,要用虚拟机或服务器IP)
修改完配置文件后退出
exit
重启容器
docker restart kibana
命令
docker run -d -u 0 --name logstash \
-p 5044:5044\
docker.elastic.co/logstash/logstash:6.2.4
进入容器
docker exec -it logstash /bin/bash
修改配置文件 (/usr/share/logstash/pipeline)
logstash.conf
input {
tcp {
port => 5044
codec => json_lines
}
}
output{
elasticsearch {
hosts => ["localhost:9200"]
action => "index"
index => "%{[appname]}"
}
stdout { codec => rubydebug }
}
退出容器
exit
重启容器
doccker restart logstash
Logstash的文件配置详解篇:
https://blog.csdn.net/qq_14985851/article/details/122696002https://blog.csdn.net/qq_14985851/article/details/122696002
完毕!!!