暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

快速搭建一个简易的ELK日志分析系统【测试成功】

巴韭特锁螺丝 2023-11-07
83

一、ELK简介

ELK就是一款非常优秀的、开源的、用于搭建实时日志分析平台的组件。ELK是Elasticsearch、Logstash和Kiabana这3款开源框架首字母的缩写。通过这三个组件,构建一个统一的日志管理系统,用来收集分布式部署系统中分散在不同设备上的日志,方便后续进行日志分析。

  • Elasticsearch

Elasticsearch是一个实时的分布式搜索和分析引擎,建立在全文搜索引擎Apache Lucene基础之上,使用Java语言编写,具有分布式、高可用性、易扩展、具有副本和索引自动分片功能、提供基于HTTP协议以JSON为数据交互格式的REST风格API、多数据源、实时分析存储等特点。

  • Logstach

Logstach主要用于对日志进行收集、过滤,对数据进行格式化处理,并将所收集的日志传输到相关系统进行存储。Logstash是用Ruby语言开发的,由数据输入端、过滤器和数据输出端3部分组成。

其中数据输入端可以从数据源采集数据,过滤器是数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式;数据输出端是将Logstash收集的数据经由过滤器处理后输出到其他系统,Kafka、HDFS、Elasticsearch等。

  • Kibana

Kibana是一款针对Elasticsearch开源分析及可视化平台,使用node.js开发,可用来搜索,展示存储在Elasticsearch中的数据。同时提供了丰富的图表模板,只需通过简单的配置就可以方便地进行高级数据分析和绘制各种图表。

其实,在实际的ELK系统中,还需要配置一个日志收集器,比如FileBeats等。安装在每台需要收集日志的服务器上,将日志发送给Logstash进行处理,所以Beats是一个“搬运工”,将你的日志搬运到日志收集服务器上。这篇博文暂时先不考虑这类组件。

二、需要环境

1、关闭防火墙(生产环境开放对应端口即可)

2、JDK环境1.8

三、Elasticsearch安装

1、下载Elasticsearch,这里选择Elasticsearch6.3.1这个版本,命令如下:

#当前目录:/usr/local/soft/ELKB/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz

2、解压

#当前目录:/usr/local/soft/ELKB/
tar -zvxf elasticsearch-6.3.1.tar.gz

3、修改配置文件

入门教程,本着尽量使用默认配置的原则,修改配置文件/usr/local/soft/ELKB/elasticsearch-6.3.1//config/elasticsearch.yml
文件,添加如下配置即可:

network.host: 192.168.1.8
http.port: 9200

其中,/usr/local/soft/ELKB/elasticsearch-6.3.1/
表示elasticsearch-6.3.1
解压后的根目录,根据实际情况即可。

4、创建启动elasticsearch的用户(elasticsearch不能够使用root用户启动)

adduser elkb
# 将es的拥有者和group改为elk
chown -R elkb:elkb usr/local/soft/ELKB/elasticsearch-6.3.1/

5切换用户(elkb),启动elasticsearch

#切换用户
su elkb
#启动elasticsearch,当前所在目录/usr/local/soft/ELKB/elasticsearch-6.3.1/
bin/elasticsearch

bin/elasticsearch -d
 后台运行,避免关掉客户端就会停掉ES。但是这样就不会打印日志,建议在正式环境使用。

6、验证

访问http://192.168.1.8:9200/
,出现如下界面,说明启动成功。

四、Kibana 安装

1、下载Kibana ,这里选择kibana6.3.1这个版本(和elasticsearch同步),命令如下:

#当前目录:/usr/local/soft/ELKB/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.1-linux-x86_64.tar.gz

2、解压

#当前目录:/usr/local/soft/ELKB/
tar -zvxf kibana-6.3.1-linux-x86_64.tar.gz

3、修改配置文件

修改配置文件/usr/local/soft/ELKB/kibana-6.3.1-linux-x86_64/config/kibana.yml
文件,添加如下配置即可:

# Kibana 端口
server.port: 5601
# Kibana ip
server.host: "192.168.1.8"
# elasticsearch 地址
elasticsearch.url: "http://192.168.1.8:9200"

4、启动(root用户)

#启动kebana,当前目录/usr/local/soft/ELKB/kibana-6.3.1-linux-x86_64
bin/kibana

5、验证

访问http://192.168.1.8:5601
,出现如下界面,说明成功。扩展:最全的java面试题库

五、Logstash 安装

1、下载Logstash ,这里选择Logstash6.3.1
 这个版本(和elasticsearch同步),命令如下:

#当前目录:/usr/local/soft/ELKB/
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.tar.gz

2、解压

#当前目录:/usr/local/soft/ELKB/
tar -zxvf logstash-6.3.1.tar.gz

3、验证【root用户】

/usr/local/soft/ELKB/logstash-6.3.1
目录下,通过执行bin/logstash -e ‘input { stdin { } } output { stdout {} }’
,然后在输入hello,出现如下界面说明,logstash可以正常使用。

#当前目录:/usr/local/soft/ELKB/logstash-6.3.1
[root@node08 logstash-6.3.1]# bin/logstash -e 'input { stdin { } } output { stdout {} }'
hello #
Sending Logstash's logs to usr/local/soft/ELKB/logstash-6.3.1/logs which is now configured via log4j2.properties
[2020-05-14T13:23:50,509][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/usr/local/soft/ELKB/logstash-6.3.1/data/queue"}
[2020-05-14T13:23:50,534][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/local/soft/ELKB/logstash-6.3.1/data/dead_letter_queue"}
[2020-05-14T13:23:51,495][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2020-05-14T13:23:51,699][INFO ][logstash.agent ] No persistent UUID file found. Generating new UUID {:uuid=>"95edb338-9c94-47d4-b357-4406ffa6ba33", :path=>"/usr/local/soft/ELKB/logstash-6.3.1/data/uuid"}
[2020-05-14T13:23:52,846][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.3.1"}
[2020-05-14T13:23:55,728][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2020-05-14T13:23:56,398][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x55098452 run>"}
The stdin plugin is now waiting for input:
[2020-05-14T13:23:56,532][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
"message" => "hello",
"@version" => "1",
"@timestamp" => 2020-05-14T05:23:56.445Z,
"host" => "node08"
}
[2020-05-14T13:23:57,375][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}

六、示例

通过上述步骤,已经完成了三个组件的安装工作,下面来实现读取nginx访问日志,并写入到ES中的例子,保证存在/usr/local/nginx/logs/access.log
访问日志(目录可以随意),用来作为logstash采集日志的来源。扩展:最全的java面试题库

1、配置logstash采集处理日志的配置

/usr/local/soft/ELKB/logstash-6.3.1
目录,创建job目录(目录自定义,可以随意),然后进入目录创建一个nginx.conf
文件,内容如下:

input {#配置日志来源,使用固定文件的方式
file{
path => "/usr/local/nginx/logs/access.log"
start_position => "beginning"
type => "nginx_access_log"
}
}

filter {
if [type] == "nginx" { # 这里的type是日志类型
grok {
match => { "message" => "%{COMBINEDAPACHELOG} %{QS:gzip_ratio}" } # 使用自带的pattern即可,注意空格
}
# 更改匹配到的字段的数据类型
mutate {
convert => ["response", "integer"]
convert => ["bytes", "integer"]
convert => ["responsetime", "float"]
}
# 指定时间戳字段以及具体的格式
date {
match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
remove_field => ["timestamp"]
}
}
}
output {#配置elasticsearch作为输出目的地
elasticsearch {
hosts => [ "192.168.1.8:9200" ]
index => "%{type}-%{+YYYY.MM.dd}" # index中含有时间戳
}
}

2、根据上述nginx.conf
文件重新启动logstash
,命令如下:

#当前目录:/usr/local/soft/ELKB/logstash-6.3.1下,执行如下命令
#

bin/logstash -f job/nginx.conf
注意:执行较慢,需要等待。

3、配置ES的Index的Mapping信息

通过执行如下命令即可。

curl -H "Content-Type: application/json" -XPUT 192.168.1.8:9200/_template/nginx -d '


#下面的内容直接输入:


{

"template": "nginx*",
"mappings": {
"_default_": {
"properties": {
"clientip": {
"type": "keyword"
},
"ident": {
"type": "keyword"
},
"auth": {
"type": "keyword"
},
"verb": {
"type": "keyword"
},
"request": {
"type": "keyword"
},
"httpversion": {
"type": "keyword"
},
"rawrequest": {
"type": "keyword"
},
"response": {
"type": "keyword"
},
"bytes": {
"type": "integer"
},
"referrer": {
"type": "keyword"
},
"agent": {
"type": "keyword"
},
"gzip_ratio": {
"type": "keyword"
}
}
}
}
}'

4、使用Kibana查看Elasticsearch索引数据

通过访问【http://192.168.3.88:5601
】打开Kibana界面,找到Management菜单,如下图所示:

创建索引的匹配规则(正则表达式),点击下一步

创建索引,选择“I don’t want to use the Time Filter”
,然后点击创建按钮。

点击创建后,进入如下页面,说明创建成功

点击Disconer
菜单,这个时候,就可以看到了nginx
访问日志中数据了,如下所示。

七、写在最后

在这篇博文中,我们只是简单的演示了如何部署ELK中的三个组件,和配置了一个简单读取nginx访问日志的示例。

    版权声明:本文内容来自知乎:老炮说Java,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
    本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
    原文链接:https://zhuanlan.zhihu.com/p/567242002
    如有涉及到侵权,请联系,将立即予以删除处理。
    在此特别鸣谢原作者的创作。
    此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。


    文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论