ELK搭建流程
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据
系统环境
ubuntu 16.04
jdk1.8
安装logstash
Logstash三个组件的第二个组件,也是真个Logstash工具中最复杂,最蛋疼的一个组件,当然,也是最有作用的一个组件。
logstash概念很简单,它主要做三件事
1、collect:数据输入
2、enrich:数据加工,如过滤、改写等
3、transport:数据输出
ELK三个工具都在elastic官网可以下载的到。
下面开始下载logstash
上官网下载安装包,然后解压
创建logstash.conf文件
启动logstash 并指定配置文件 -f表示指定启动时使用的配置文件
由于上面的配置文件没有指定输入、输出的方式,所以启动成功后进程就停止了。
重新编辑logstatsh.conf文件,并启动logstash
stdin{}表示从控制台接收数据
stdout{}表示把内容输出到控制台
启动成功后,在控制台随便输入一些内容,回车后下面会跟着打印一行内容
安装elasticSearch
进入config路径下,打开elasticsearch.yml,放开下面两个地方的注释,先把network.host:后面的默认值改为localhost
由于elasticSearch不允许通过root用户来启动,所以需要新建一个用户,用新键的用户来启动elasticSearch,我这里已经新建了一个用户:wuzhangwei
启动elasticSearch
由于elasticSearch解压在usr/lib/路径下,在该路径下新建文件夹或文件需要有root权限,所以需要做些设置。
再次启动
用浏览器访问一下该URL:http://localhost:9200/
出现像下面这样的信息,说明启动成功
安装elasticSearch插件elasticSearch-head
./bin/plugin install mobz/elasticsearch-head
访问http://localhost:9200/_plugin/head/
出现下面这个页面
修改logstash.conf文件,使控制台的内容可以输出到elasticSearch里去。
重新启动logstash
随便输入几句话,回车后去elasticSearch-head插件界面中看看是否有索引生成。
我的如下图所示,两条数据都生成了索引
不用插件也可以查看索引数据
http://localhost:9200/_search?pretty
结尾加?pretty是为了更直观的展示内容。不然内容会全堆在一起。
安装Kibana
启动kibana,启动失败,根据提示知道是权限不足,更改一下该目录的权限
更改权限,并重新启动
在kibana设置页面里设置一个index,根据官网提示,至少要设置一个索引
进入Discover选项卡页面,这个页面是用来查看elasticSearch里的索引数据的,默认只展示15分钟之内的数据,如果想查看更早的数据,则点击右上角的时钟图标,选择合适的时间范围。
ELK串联验证
- 启动elasticsearch(如果已经启动,则跳过)
- 启动logstash(如果已经启动,则跳过)
- 启动kibana(如果已经启动,则跳过)
在浏览器中验证
部署成功
接下来配一个logstash从系统日志文件中读取内容,然后传给Elasticsearch进行存储、建搜索的索引,kibana提供前端的页面再进行搜索和图表可视化。
logstash.conf文件配置如下
#收集日志
input {
#stdin{} #从控制台输入
#file表示从文件输入
file {
path => “/home/wuzhangwei/IdeaProjects/work/easywork.log” #日志存放的绝对路径
start_position => “beginning” #beginning表示从头开始读取文件
}
}
#过滤日志配置
filter{
grok {
match => [“message”,"%{TIMESTAMP_ISO8601:time}"] #从message中抠出日志生成的日期
}
date {
match => [“time”, “yyyy-MM-dd HH:mm:ss.SSS”] #匹配前面抠出来的日期time
target => “@timestamp” #用于指定赋值的字段名,默认是@timestamp
remove_field => [“time”] #删除前面匹配出来的time字段
}
}
#输出配置
output{
stdout{codec => rubydebug} #在控制台输出
elasticsearch {hosts => “localhost”} #输出到es
}
上产生日志的系统随便操作一下,使其产生日志记录。
打开kibana页面,可以看见刚刚系统产生的日志可以在该页面查看了。
在页面提供的查询输入框中随便输入一些你想看见的关键字,kibana都可以很快速的帮你找到并高亮显示
由于在logstash.conf文件的filter字段里添加里日期过滤和替换的配置,所以下面两张图中的@timestamp字段和日志生成时间是一致的,这对你以后图表的建设来说非常重要。
如该logstash.conf文件没有在filter里添加类似下面的日期过滤,则在kibana页面上看到的@timestamp字段的值和你系统产生的日志的时间是不一致的,比如下面两张图。@timestamp字段的值会比你系统产生日志的时间晚一些,因为@timestamp字段的值默认是读取日志文件的时间。
grok {
match => [“message”,"%{TIMESTAMP_ISO8601:time}"] #从message中抠出日志生成的日期
}
date {
match => [“time”, “yyyy-MM-dd HH:mm:ss.SSS”] #匹配前面抠出来的日期time
target => “@timestamp” #用于指定赋值的字段名,默认是@timestamp
remove_field => [“time”] #删除前面匹配出来的time字段
}
如果想查看更详细的logstash正则表达式,可以点击下面的连接
logstash正则表达式
参考文章:
https://yq.aliyun.com/articles/154341?utm_content=m_27283