从零搭建ELK分布式全文检索和数据分析平台(单机版)

一、ELK概述

ELK 是三个开源软件的缩写,分别表示: Elasticsearch , Logstash , Kibana
ELK 通常用来构建日志分析平台、数据分析搜索平台等

组件介绍

Elasticsearch 是个开源分布式全文检索和数据分析平台。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,负载均衡等特点。
Kibana 是一个针对Elasticsearch的开源数据分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
Logstash 是一款基于插件的数据收集和处理引擎。Logstash 配有大量的插件,以便人们能够轻松进行配置以在多种不同的架构中收集、处理并转发数据。
Beats 轻量级的数据收集处理工具(Agent),具有占用资源少的优点,适合于在各个服务器上采集数据后传输给Logstash,官方也推荐此工具。Beats有多多种类型,比较常用的是 FileBeat
在这里插入图片描述

关于Logstash

在这里插入图片描述
··· 处理过程可分为一个或多个管道。在每个管道中,会有一个或多个输入插件接收或收集数据,然后这些数据会加入内部队列。默认情况下,这些数据很少并且会存储于内存中,但是为了提高可靠性和弹性,也可进行配置以扩大规模并长期存储在磁盘上。

··· 处理线程会以小批量的形式从队列中读取数据,并通过任何配置的过滤插件按顺序进行处理。Logstash 自带大量的插件,能够满足特定类型的操作需要,也就是解析、处理并丰富数据的过程。

··· 处理完数据之后,处理线程会将数据发送到对应的输出插件,这些输出插件负责对数据进行格式化并进一步发送数据(例如发送到 Elasticsearch)

二、搭建ELK

温馨提示:为保证您的身心健康,请最少给本虚拟机分配 1G+ 内存,最好2G/2G++++

下载后上传到root目录下
安装es

# 解压ES到usr目录下
[root@localhost ~]# tar -zxvf elasticsearch-6.4.0.tar.gz -C /usr

启动es
不能使用root用户启动es,否则会报错

[root@localhost elasticsearch-6.4.0]# groupadd es
[root@localhost elasticsearch-6.4.0]# useradd -g es es
# 把es的属主 属组 更改为 es用户 和 es组
[root@localhost elasticsearch-6.4.0]# chown -R es:es /usr/elasticsearch-6.4.0/
[root@localhost elasticsearch-6.4.0]# su es
[es@localhost elasticsearch-6.4.0]$ bin/elasticsearch

测试es是否启动成功

[root@localhost ~]# curl -X GET localhost:9200
{
  "name" : "VAQeOmY",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "7S6buHWkRD-wtDxeH5ll7g",
  "version" : {
    "number" : "6.4.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "595516e",
    "build_date" : "2018-08-17T23:18:47.308994Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

配置es的远程访问

[root@localhost elasticsearch-6.4.0]# vim config/elasticsearch.yml
51 # ---------------------------------- Network -----------------------------------
52 #
53 # Set the bind address to a specific IP (IPv4 or IPv6):
54 #
55 network.host: 192.168.23.141  #更改为本机ip

此时重启es服务会出现异常
需要更改到root用户更改如下配置

[root@localhost elasticsearch-6.4.0]# vim /etc/security/limits.conf
# 在文件末尾添加以下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
[root@localhost elasticsearch-6.4.0]# vim /etc/sysctl.conf
# 添加以下内容
vm.max_map_count=655360
[root@localhost elasticsearch-6.4.0]# sysctl -p
vm.max_map_count = 655360
# 重启虚拟机使更改生效
[root@localhost elasticsearch-6.4.0]# reboot

保证防火墙处于关闭状态

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

重启虚拟机后,再次启动es服务,打开浏览器访问 http://ip+9200
在这里插入图片描述
success!

Tips: 集成中文分词器

[es@localhost root]$ cd /usr/elasticsearch-6.4.0/
[es@localhost elasticsearch-6.4.0]$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
[es@localhost elasticsearch-6.4.0]$ ll plugins/
total 0
drwxr-xr-x. 2 es es 229 Jan  3 10:04 analysis-ik
# 重新启动es的服务
[root@localhost ~]# jps
2673 Elasticsearch
46151 Jps
40921 PluginCli
[root@localhost ~]# kill -9 2673
[root@localhost ~]# cd /usr/elasticsearch-6.4.0/
[root@localhost elasticsearch-6.4.0]# su es
[es@localhost elasticsearch-6.4.0]$ bin/elasticsearch
[root@localhost ~]# tar -zxvf kibana-6.4.0-linux-x86_64.tar.gz -C /usr
[root@localhost ~]# cd /usr/kibana-6.4.0-linux-x86_64/
[root@localhost kibana-6.4.0-linux-x86_64]# vim config/kibana.yml

# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "192.168.252.113"     #更改这里!!! 自己的虚拟机ip

# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://192.168.252.113:9200"  #更改这里!!! 自己的虚拟机ip+port

[root@localhost kibana-6.4.0-linux-x86_64]# bin/kibana

测试
打开浏览器访问 http://ip+5601
在这里插入图片描述
success!

  • 3 安装Logstash
[root@localhost ~]# tar -zxvf logstash-6.4.0.tar.gz -C /usr
[root@localhost logstash-6.4.0]# cd /usr/logstash-6.4.0/
# 创建一个测试用的配置文件
[root@localhost logstash-6.4.0]# vim config/simple.conf
# 第一个案例 配置内容如下
input {
	file {
		path => ["/root/testdata.log"]  # 需要采集数据的文件
		sincedb_path => "/dev/null"
		start_position => "beginning"  # 头开始读取文件
	}
}
filter {

}
output {
	stdout {
		codec => rubydebug
	}
}

启动测试

[root@localhost logstash-6.4.0]# bin/logstash -r -f config/simple.conf

[root@localhost ~]# vim testdata.log
# 输入内容
Hello Logstash

logstash向控制台提供的输出显示

{
  "@timestamp" => 2019-01-06T03:04:18.645Z,
     "path" => "/root/testdata.log",
   "message" => "Hello Logstash",
   "@version" => "1",
     "host" => "localhost.localdomain"
}

至此,Elasticsearch、Logstash、Kibana分别已经搭建完成
但是我们的ELK平台还差一些配置才能完成


这里使用Nginx服务器的访问日志作为ELK平台的测试数据
请安装 Nginx
这里省略步骤,但是提供车票 https://nginx.org/en/download.html
安装Nginx需要先安装其依赖如gcc等


目前搭建的ELK平台以分析Nginx的访问日志access.log为例

当浏览器访问一次Nginx服务器,access.log文件中就会多出一条数据
(例)

192.168.252.113 - - [07/Jan/2019:03:38:21 -0500] "GET /favicon.ico HTTP/1.1" 404 571"http://192.168.23.143/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64)AppleWebKit/537.36 (KHTML,like Gecko) Chrome/71.0.3578.80 Safari/537.36"

其中

192.168.252.113 客户端地址
第一个 - 占位
第二个 - 客户端用户名
[07/Jan/2019:03:38:21 -0500] 服务器时间
GET /favicon.ico HTTP/1.1 请求内容,包括方法名,地址,和http协议
404 返回的http 状态码
571 返回的大小
http://192.168.252.113/ 可以记录用户是从哪个链接访问过来的
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36 用户所使用的代理(一般为浏览器)

	geoip:使用GeoIP数据库对client_ip字段的IP地址进行解析,可得出该IP的经纬度、国家与城市等信息,但精确度不高,这主要依赖于GeoIP数据库;
	
	date:默认情况下,elasticsearch内记录的date字段是elasticsearch接收到该日志的时间,但在实际应用中需要修改为日志中所记录的时间。这时候则需要指定记录时间的字段并指定时间格式。如果匹配成功,则会将日志的时间替换至date字段中。

上面的日志的过滤代码如下:

%{IPORHOST:client_ip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %
{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" {NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:http_referer} %{QS:http_user_agent}

更多语法参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

测试Lostash
修改 Logstash 配置文件,内容如下:

[root@localhost config]# vim simple.conf
input {
	file {
		path => ["/usr/nginx/logs/access.log"]   # 要监听的文件位置
		sincedb_path => "/dev/null"
		start_position => "beginning"
	}
}
filter {
	grok {
		match =>{
			"message" => "%{IPORHOST:client_ip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:http_referer} %{QS:http_user_agent}"
		}
	}
	geoip {
		source => "client_ip"
	}
	date {
		match => [ "time" , "dd/MMM/YYYY:HH:mm:ss Z" ]
	}
}
output {
	stdout {
		codec => rubydebug
	}
}

# 重启logstash

访问Nginx,Logstash向控制台提供的输出显示

{
     "timestamp" => "07/Jan/2019:05:08:38 -0500",
     "response" => "304",
      "http_user_agent" => "\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/71.0.3578.98 Safari/537.36\"",
       "auth" => "-",
    "httpversion" => "1.1",
     "client_ip" => "110.52.250.126",
      "message" => "110.52.250.126 - - [07/Jan/2019:05:08:38 -0500] \"GET / HTTP/1.1\"
304 0 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/71.0.3578.98 Safari/537.36\"",
       "geoip" => {
    "country_code2" => "CN",
      "city_name" => "Changsha",
       "latitude" => 28.1792,
       "location" => {
      "lon" => 113.1136,
      "lat" => 28.1792
   },
     "country_name" => "China",
       "timezone" => "Asia/Shanghai",
      "longitude" => 113.1136,
    "continent_code" => "AS",
     "region_code" => "43",
          "ip" => "110.52.250.126",
    "country_code3" => "CN",
     "region_name" => "Hunan"
 },
       "verb" => "GET",
       "host" => "MiWiFi-R3P-srv",
    "@timestamp" => 2019-01-07T10:22:39.711Z,
       "bytes" => "0",
       "path" => "/usr/local/nginx/logs/access.log",
   "http_referer" => "\"-\"",
     "@version" => "1",
      "request" => "/"
}

success!
以上为测试Logstash是否能成功分析Nginx的访问日志,我们的搭建工作还没有完成

[root@localhost ~]# tar -zxvf filebeat-6.4.0-linux-x86_64.tar.gz -C /usr
[root@localhost ~]# vim /usr/filebeat-6.4.0-linux-x86_64/filebeat.yml

- type: log
 # Change to true to enable this input configuration.
enabled: true   #  第一处
 # Paths that should be crawled and fetched. Glob based paths.
paths:	
- /usr/local/nginx/logs/access*.log    #第二处  要监听的配置文件位置
------------------------------------------------------------------省略若干行
# output.elasticsearch:
 # Array of hosts to connect to.
 # hosts: ["localhost:9200"]
output.logstash:
 # The Logstash hosts
hosts: ["192.168.252.113:5044"]     #第三处   本机ip

配置解析 access*.log 日志文件 的Logstash的配置文件

[root@localhost filebeat-6.4.0-linux-x86_64]# cd /usr/logstash-6.4.0/config/
[root@localhost config]# vi elk.conf

# 配置输入为 beats
input {
	beats {
		port => "5044"
	}
}
# 数据过滤 解析
filter {
	grok {
		match =>{
			"message" => "%{IPORHOST:client_ip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:http_referer} %{QS:http_user_agent}"
		}
	}
	geoip {
		source => "client_ip"
	}
	date {
		match => [ "time" , "dd/MMM/YYYY:HH:mm:ss Z" ]
	}
}
# 输出到本机的 ES
output {
	elasticsearch {
		hosts => [ "192.168.252.110:9200" ]
		index => "logs-%{+YYYY.MM.dd}"
	}
}

启动服务测试

# 启动logstash
[root@localhost logstash-6.4.0]# bin/logstash -r -f config/elk.conf

# 启动filebeat
[root@localhost filebeat-6.4.0-linux-x86_64]# ./filebeat

在这里插入图片描述
搭建成功 -_-
感谢观赏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值