Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的,这三个产品被设计成一个集成解决方案,称为
Elastic Stack
(旧称ELK stack
)。它是一种能够从任意数据源抽取数据,并实时对数据进行搜索、分析和可视化展现的数据分析框架。ELK主要的作用是将日志数据进行标准化、集中化管理,最终达到可视化的效果。
Elasticsearch
一、概念
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值。
Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
原理
- 用户将数据提交到Elastic Search数据库中
- 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据
- 当用户搜索数据时候,再根据权重将结果排名,打分,并将返回结果呈现给用户
二、安装使用
源码安装
去官网下载
选择对应的环境
下载完成后解压到某个目录,如
/usr/local/elk-es-7.4.0
进入安装目录并启动
cd /usr/local/elk-es-7.4.0/bin && ./elasticsearch
- 报错,一般都是权限问题,修改目录权限
sudo chown -R user:group /usr/local/es
1
2
3
4
5
6
7
8
9
10
11./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elk-es-7.4.0/config/jvm.options
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
at java.base/java.nio.file.Files.newByteChannel(Files.java:374)
at java.base/java.nio.file.Files.newByteChannel(Files.java:425)
at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
at java.base/java.nio.file.Files.newInputStream(Files.java:159)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:61)- 报错,一般都是权限问题,修改目录权限
访问:localhost:9200,有如下输出则表示安装成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"name" : "xxxxx",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "RqiPZ9ehTJ-JNeHv80p4cQ",
"version" : {
"number" : "7.4.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
"build_date" : "2019-09-27T08:36:48.569419Z",
"build_snapshot" : false,
"lucene_version" : "8.2.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}- 查看索引信息
http://127.0.0.1:9200/_cat/indices
- 查看节点信息
http://127.0.0.1:9200/_cat/nodes
- 查询所有索引
http://127.0.0.1:9200/_all
- 查询指定索引
http://127.0.0.1:9200/index_name/_search?pretty
brew安装
- 添加安装源
brew tap elastic/tap
- 开始安装
brew install elastic/tap/elasticsearch-full
1
2
3启动 brew service start elasticsearch
关闭 brew service stop elasticsearch
重启 brew service restart elasticsearch- 添加安装源
brew tap讲解
- brew tap可以为brew的软件的跟踪、更新、安装添加更多的的tap formulae,该命令的仓库源默认来至于Github。
- 相关命令
brew tap <user>/<repo>
:在本地对这个https://github.com/user/repo
仓库上做了一个浅度的克隆,完成后即可正常install/uninstallbrew tap <user>/<repo> URL
:在本地对这个URL仓库上做了一个浅度的克隆(仓库不一定是github)brew untap <user>/<repo> [<user>/<repo> <user>/<repo> ...]
:移除已经安装的tap
三、参考
Logstash
一、概念
Logstash是一款开源的数据收集引擎,具备实时管道处理能力。它可以作为数据源与数据存储分析工具之间的桥梁,结合Elasticsearch以及Kibana等,能够方便的进行数据处理与分析。另外,它插件众多,可以接受几乎各种各样的数据,包括日志、网络请求、关系型数据库、传感器或物联网等等。
Logstash是一个具有实时管道功能的开源数据收集引擎,主要用于日志的收集与解析,它可以动态地将来自不同数据源的数据统一起来,并将数据标准化到指定的目的地(多为Elasticsearch,进而提供全文搜索的功能)。
Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用Grok从非结构化数据中派生出结构,从IP地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。
二、安装使用
使用brew安装,省略
源码安装
- 去官网下载对应平台的安装包(版本要与Elasticsearch、Kibana一直)
- 解压到自定义位置
/usr/local/elk-log-7.4.0
cd /usr/local/elk-log-7.4.0
- 创建配置文件
logstash.conf
,参考文档
1
2
3
4
5input { stdin { } }
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}- 启动服务
bin/logstash -f logstash.conf
1
2
3
4The stdin plugin is now waiting for input:
...
...
Successfully started Logstash API endpoint {:port=>9600}- logstash.conf的输入是标准输入,即此时输入的任何信息都会被实时打印出来
三、参考
Kibana
一、概念
Kibana是一个开源分析和可视化平台,旨在可视化操作Elasticsearch,可以用来搜索、查看和与存储在Elasticsearch索引中的数据进行交互,轻松地进行高级数据分析,并可在各种图表,表格和地图中显示数据。其简单的基于浏览器的界面使您能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的更改。
Kibana是一款基于Apache开源协议的可视化平台,使用JavaScript语言编写,为Elasticsearch提供分析和可视化的Web平台。它可以在 Elasticsearch的索引中查找,交互数据,并生成各种维度的表图。
使用:
1 | Usage: bin/kibana [command=serve] [options] |
二、安装使用
- 安装
- 使用brew安装,省略
- 源码安装
- 去官网下载对应平台的安装包
- 解压到自定义位置
/usr/local/elk-kib-7.4.0
cd /usr/local/elk-kib-7.4.0
- 启动
./bin/kibana
- 默认配置文件
/usr/local/elk-kib-7.4.0/config/kibana.yml
- 默认配置文件
- 使用
- 汉化(7+版本支持)
- 编辑kibana.yml,加入
i18n.locale: "zh-CN"
- 重启
./bin/kibana
- 编辑kibana.yml,加入
- 设置登录密码
- 编辑kibana.yml,加入
i18n.locale: "zh-CN"
- 编辑kibana.yml,加入
- 汉化(7+版本支持)
三、参考
Filebeat
一、概念
在ELK Stack中,日志数据采集有单独的工具,就是Logstash和Beats。Logstash主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式,一般工作方式为C/S架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往Elasticsearch上去。
Logstash是一款开源的数据收集引擎,具备实时管道处理能力。它可以作为数据源与数据存储分析工具之间的桥梁,结合Elasticsearch以及Kibana等,能够方便的进行数据处理与分析。另外,它插件众多,可以接受几乎各种各样的数据,包括日志、网络请求、关系型数据库、传感器或物联网等等。
Beats是一个轻量级日志采集器,使用Golang实现,包含多个成员,其中的Filebeat用于代替早期ELK架构中Logstash占用资源过高的问题,或收集转发日志。
- Packetbeat:网络数据(收集网络流量数据)
- Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
- Filebeat:日志文件(收集文件数据)
- Winlogbeat:windows事件日志(收集Windows事件日志数据)
- Auditbeat:审计数据(收集审计日志)
- Heartbeat:运行时间监控(收集系统运行时的数据)
- Journalbeat:读取收集journald日志
- Functionbeat:收集、传送、监测来自云服务的相关数据
工作原理:Filebeat由两个主要组件组成:harvester和prospector。
采集器harvester的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。 每个文件启动一个 harvester,harvester 负责打开和关闭文件,这意味着在运行时文件描述符保持打开状态。如果文件在读取时被删除或重命名,Filebeat 将继续读取文件。
查找器 prospector 的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。每个 prospector 都在自己的 Go 协程中运行。
使用:
1 | Usage: |
二、安装使用
- 安装
- 使用brew安装,省略
- 源码安装
- 去官网下载对应平台的安装包(版本要与Elasticsearch、Kibana一直)
- 解压到自定义位置
/usr/local/elk-filebeat-7.4.0
cd elk-filebeat-7.4.0
- 编辑
filebeat.yml
- 启动
sudo ./filebeat -e -c filebeat.yml
- 报错
Exiting: error loading config file: config file ("/opt/filebeat/filebeat.yml") can only be writable by the owner but the permissions are "-rwxrwxrwx" (to fix the permissions use: 'chmod go-w /opt/filebeat/filebeat.yml')
- 解决
sudo chmod 755 filebeat.yml
- 重新启动
sudo ./filebeat -e -c filebeat.yml
- 报错:
Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified
- 编辑
filebeat.yml
,加入setup.template.name
和setup.template.pattern
测试配置文件是否有语法错误:
./filebeat test config
,正常会返回Config OK
- 报错:
- 报错
重度洁癖者一般会把配置文件单独存放,测试配置
./filebeat test config -c config/movies.yml
使用
方式一:Filebeat + Elasticsearch
①准备好csv数据源(*有彩蛋*),可通过MySQL导出或下载,本文数据源
/Users/liuyulong/elk/ml-latest-small/movies.csv
②修改
filebeat.yml
,实际使用时一般会启动多个实例,可通过添加多个配置文件并分别启动即可cp filebeat.yml config/movies.yml
cd config && sudo vim movies.yml
1
2
3
4
5
6
7
8
9
10
11
12
13filebeat.inputs:
- type: log
enabled: true
paths:
- /Users/liuyulong/elk/ml-latest-small/movies.csv
output.elasticsearch:
hosts: ["localhost:9200"]
index: "filebeat-movies"
setup.template.name: "filebeat-movies"
setup.template.pattern: "filebeat-moveis-*"
setup.ilm.enabled: false #不设置此选项则自定义的索引名不生效③启动实例
./filebeat -e -c config/movies.yml
④访问Elasticsearch
http://localhost:9200/_cat/indices?v
- 此时你会发现Elasticsearch无任何索引信息,这是因为filebeat只会采集最近更新的日志
⑤依次执行
mv movies.csv movie.csv
和mv movie.csv movies.csv
,此时访问http://localhost:9200/_cat/indices?v
方式二:Filebeat + Logstash + Elasticsearch
方式三:Filebeat + Kafka + Logstash + Elasticsearch