ELK学习笔记

ELK学习笔记

ELK — Elasticsearch Logstash Kibana

一、ELK概述

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

官方文档:https://www.elastic.co/cn/products

组件介绍

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

组件关系图

组件关系图

二、Logstash详解

架构图

logstash的工作原理架构图
处理过程可分为一个或多个管道。在每个管道中,会有一个或多个输入插件接收或收集数据,然后这些数据会加入内部队列。默认情况下,这些数据很少并且会存储于内存中,但是为了提高可靠性和弹性,也可进行配置以扩大规模并长期存储在磁盘上
处理线程会以小批量的形式从队列中读取数据,并通过配置的过滤插件按顺序进行处理。Logstash 自带大量的插件,能够满足特定类型的操作需要,也就是解析、处理并丰富数据的过程
处理完数据之后,处理线程会将数据发送到对应的输出插件,这些输出插件负责对数据进行格式化并进一步发送数据(例如发送到 Elasticsearch)。

准备

准备安装包 logstash-6.4.0.tar.gz
上传至linux系统

下载地址:链接:https://pan.baidu.com/s/15a681V3l2T_kRETchfvVBg 提取码:aa3s

安装Logstash

1. 解压缩安装logstash-6.4.0.tar.gz

[root@elasticsearch ~]# tar -zxvf logstash-6.4.0.tar.gz -C /usr/

2. 进入配置文件目录

[root@elasticsearch ~]# cd /usr/logstash-6.4.0/config/

3. 创建配置文件并配置

[root@elasticsearch config]# vim simple.conf
# 第一个案例 配置内容如下
input {
	file {
		path => ["/root/testdata.log"]    # 需要采集数据的文件
		sincedb_path => "/dev/null"     # 禁用logstash的记录点功能
		start_position => "beginning"   # 头开始读取文件
	}
}
filter {
}
output {
	stdout {   #标准输出
		codec => rubydebug   #输出至logstash的控制台,即服务窗口
	}
}

注意:任何 Logstash 配置都必须至少包括一个输入插件和一个输出插件。过滤插件是可选项。

4. 启动服务进行测试

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

在这里插入图片描述

5. 创建测试文件testdata.log

[root@elasticsearch ~]# vim testdata.log
# 输入内容
Hello LogStash

6. 查看测试结果

在这里插入图片描述

三、使用Logstash解析Nginx日志

安装Nginx

1. 准备资源

准备安装包nginx-1.11.1.tar.gz
上传至linux系统

下载地址:链接:https://pan.baidu.com/s/1zV91KPHO9edKua8uQpub_A 提取码:yelo

2. 安装gcc

[root@elasticsearch ~]# yum install gcc-c++ perl-devel pcre-devel openssl-devel zlib-devel wget

3. 解压缩安装nginx-1.11.1.tar.gz

[root@elasticsearch ~]# tar -zxvf nginx-1.11.1.tar.gz -C /usr

4. 进入解压缩目录进行配置

[root@elasticsearch ~]# cd /usr/nginx-1.11.1/
# 配置安装位置
[root@elasticsearch nginx-1.11.1]# ./configure --prefix=/usr/local/nginx

5. 编译并安装

[root@elasticsearch nginx-1.11.1]# make && make install

6. 进入安装目录并启动服务

[root@elasticsearch nginx-1.11.1]# cd /usr/local/nginx/
[root@elasticsearch nginx]# sbin/nginx -c conf/nginx.conf

7. 查看服务是否启动

[root@elasticsearch nginx]# ps -ef | grep nginx
# ----------------------------------------------------------
root      24682      1  0 16:58 ?        00:00:00 nginx: master process sbin/nginx -c conf/nginx.conf
nobody    24683  24682  0 16:58 ?        00:00:00 nginx: worker process
root      24694   2030  2 16:59 pts/1    00:00:00 grep --color=auto nginx

8. 远程访问测试

nginx远程访问测试

Nginx访问日志

nginx的访问日志 access.log 数据如下:

192.168.114.1 - - [09/Jan/2019:17:00:58 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
192.168.114.1 - - [09/Jan/2019:17:01:00 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.114.142/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

以某条记录为例,其中

  • 192.168.114.1 客户端地址
  • ’ - ’ 客户端用户名
  • [09/Jan/2019:17:01:00 +0800] 服务器时间
  • “GET /favicon.ico HTTP/1.1” 请求内容,包括方法名,地址,和http协议
  • 404 返回的 http 状态码
  • 571 返回的字节数
  • http://192.168.114.142/” 可以记录用户是从哪个链接访问过来的
    “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36” 用户所使用的代理(一般为浏览器)

使用Grok插件解析数据

Grok插件用来将非结构化的数据解析为结构化数据

参考资料:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

你还需要以下这个网站对你所编写的过滤匹配代码进行debug:

grok debuger : http://grokdebug.herokuapp.com/

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

%{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}

使用Kebana中的grok debuger测试过滤代码:

  1. 启动kibana服务
    [root@elasticsearch ~]# cd /usr/kibana-6.4.0-linux-x86_64/
    [root@elasticsearch kibana-6.4.0-linux-x86_64]# bin/kibana
    
  2. 进行debug测试
    grok过滤代码测试
    更多grok语法请参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

创建并编辑 logstash 配置文件

[root@elasticsearch logstash-6.4.0]# vim config/nginx.conf
# 添加内容
input {
	file {
		path => ["/usr/local/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
	}
}
  • geoip:使用GeoIP数据库对client_ip字段的IP地址进行解析,可得出该IP的经纬度、国家与城市等信息,但精确度不高,这主要依赖于GeoIP数据库;
  • date:默认情况下,elasticsearch内记录的date字段是elasticsearch接收到该日志的时间,但在实际应用中需要修改为日志中所记录的时间。这时候则需要指定记录时间的字段并指定时间格式。如果匹配成功,则会将日志的时间替换至date字段中。

启动Logstash服务

[root@elasticsearch logstash-6.4.0]# bin/logstash -r -f config/nginx.conf

logstash向控制台提供的输出显示:
logstash解析nginx日志

四、使用ELK搭建日志采集分析平台

Filebeat环境搭建

1.准备

准备安装包filebeat-6.4.0-linux-x86_64.tar.gz
上传至linux系统

下载地址:链接:https://pan.baidu.com/s/1RLXfL7nTBw6zI4tQiY3Z1g 提取码:pesk

2. 解压缩安装filebeat

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

3. 修改filebeat的配置文件

[root@elasticsearch ~]# cd /usr/filebeat-6.4.0-linux-x86_64/
[root@elasticsearch filebeat-6.4.0-linux-x86_64]# vim filebeat.yml
# 修改
	...
- type: log
  # Change to true to enable this input configuration.
  # +++++++++++11111+++++++++++++
  enabled: true
  # ++++++++++++++++++++++++++++
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
  # +++++++++22222+++++++++++++++
    - /usr/local/nginx/logs/access*.log
  # ++++++++++++++++++++++++++++
  ...
  ...
#================================ Outputs =====================================
# Configure what output to use when sending the data collected by the beat.
#-------------------------- Elasticsearch output ------------------------------
# ++++++++++33333+++++++++++++
# output.elasticsearch:
  # Array of hosts to connect to.
  # hosts: ["localhost:9200"]
# +++++++++++++++++++++++++++
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
# +++++++++++44444++++++++++++
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.114.142:5044"]
# ++++++++++++++++++++++++++++
  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
  	...
# 保存并退出
esc键 --> :ew! --> Enter键

4. 创建并配置logstash的配置文件

[root@elasticsearch logstash-6.4.0]# vim config/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.114.142:9200" ]
		index => "logs-%{+YYYY.MM.dd}"
	}
}
# 保存并退出

5. 启动logstash服务

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

6. 启动filebeat服务

[root@elasticsearch filebeat-6.4.0-linux-x86_64]# ./filebeat

7. 使用kibana可视化数据

1
2
3
4
5
6
7
8
9
10
11
12
13

posted @ 2019-01-08 21:20  IT-小浣熊  阅读(129)  评论(0)    收藏  举报