ELK日志分析系统搭建流程介绍

一、ELK简介

1.ELK简介
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储,供以后使用(如搜索)。
Kibana也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供友好的日志分析Web界面,可以帮助你汇总、分析和搜索重要数据日志。
2.ELK工作原理图
在这里插入图片描述
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
简单来说,进行日志处理分析,一般需要经过以下几个步骤:

(1)将日志进行集中化管理(beats);

(2)将日志格式化(logstash);

(3)对格式化后的数据进行索引和存储(elasticsearch);

(4)前端数据的展示(kibana);

二、elasticsearch、logstash、kibana相关介绍

1.Elasticsearch介绍
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
2.Elasticsearch的基础核心概念
(1)接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)。
(2)集群(cluster)
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
(3)节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。
节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。
(3)索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除时,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
索引相对于关系型数据库的库。
(4)类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
类型相对于关系型数据库的表。
(5)文档(document)
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。
文档相对于关系型数据库的列。
(6)分片和副本(shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间,可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
分片的两个最主要原因:

a.水平分割扩展,增大存储量

b.分布式并行跨分片操作,提高性能和吞吐量

分布式分片的机制和搜索请求的文档如何汇总完全是由elasticsearch控制的,这些对用户而言是透明的。
网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。
副本也有两个最主要原因:

a.高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。

b.提供性能,增大吞吐量,搜索可以并行在所有副本上执行。

总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。
3.logstash介绍
Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端与其它开源软件结合,以实现不同的功能。
Logstash的理念很简单,它只做3件事情:

➢ Collect:数据输入

➢ Enrich:数据加工,如过滤,改写等

➢ Transport:数据输出

别看它只做3件事,但通过组合输入和输出,可以变幻出多种架构实现多种需求。这里只抛出用以解决日志汇总需求的部署架构图:
在这里插入图片描述
4.logStash的主要组件
(1)Shipper:日志收集者。
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可。
(2)Indexer:日志存储者。
负责接收日志并写入到本地文件。
(3)Broker:日志Hub。
负责连接多个Shipper和多个Indexer。
(4)Search and Storage:允许对事件进行搜索和存储。
(5)Web Interface:基于Web的展示界面
正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性。
5.LogStash主机分类

➢代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;
只需运行Logstash代理(agent)程序;

➢中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储。

6.Kibana介绍
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。
7.kibana的主要功能

(1)Elasticsearch无缝之集成
Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。

(2)整合数据
Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。

(3)复杂数据分析
Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。

(4)让更多团队成员受益
强大的数据库可视化接口让各业务岗位都能够从数据集合受益。

(5)接口灵活,分享更容易
使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

(6)配置简单
Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行。

(7)可视化多数据源
Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache Flume、Fluentd等。

(8)简单数据导出
Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

三、安装部署elasticsearch集群

elasticsearch官方网站
elasticsearch中文社区
官方参考文档

https://www.elastic.co/guide/en/elasticsearch/reference/6.6/setup-configuration-memory.html

下载地址

https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.6.0/
elasticsearch-6.6.0.rpm
filebeat-6.6.0-x86_64.rpm
kibana-6.6.0-x86_64.rpm
logstash-6.6.0.rpm

1.安装elasticsearch
(1)前提:jdk-1.8.0

[root@node1 ~]# java -version
[root@node1 ~]# yum -y install java

(2)复制elasticsearch-6.6.0.rpm到虚拟机进行安装

[root@node1 ~]# mkdir /soft
[root@node1 soft]# yum -y install elasticsearch-6.6.0.rpm

2.elasticsearch目录和文件

[root@node1 soft]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml  #配置文件
/etc/elasticsearch/jvm.options  #java虚拟机
/etc/init.d/elasticsearch  #服务启动脚本
/etc/sysconfig/elasticsearch  #elasticsearch服务变量
/usr/lib/sysctl.d/elasticsearch.conf  #设置elasticsearch用户使用的内存大小
/usr/lib/systemd/system/elasticsearch.service  #添加系统服务文件
/var/log/elasticsearch/elasticsearch.log  #日志文件路径

3.修改配置文件

[root@node1 soft]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-1  #群集中本机节点名
path.data: /data/elasticsearch  #数据目录
path.logs: /var/log/elasticsearch  #日志目录
bootstrap.memory_lock: true  #锁定内存,需要和/etc/elasticsearch/jvm.options关联
network.host: 192.168.229.160,127.0.0.1  #监听的ip地址
http.port: 9200  #端口号

4.创建数据目录,并修改权限

[root@node1 soft]# mkdir -p /data/elasticsearch
[root@node1 soft]# chown -R elasticsearch:elasticsearch /data/elasticsearch/

5.分配锁定内存
分配时需考虑本身的内存大小,然后分配适当的小于内存的大小

[root@node1 soft]# vim /etc/elasticsearch/jvm.options
-Xms512m  #分配最小内存	
-Xmx512m  #分配最大内存,官方推荐为物理内存的一半,但最大为32G

6.修改锁定内存后无法重启
解决方法如下:

[root@node1 soft]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
F2保存退出
[root@node1 soft]# systemctl daemon-reload
[root@node1 soft]# systemctl restart elasticsearch
[root@node1 soft]# netstat -anput | grep java
tcp6       0      0 192.168.229.160:9200    :::*                    LISTEN      2500/java
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      2500/java
tcp6       0      0 192.168.229.160:9300    :::*                    LISTEN      2500/java
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      2500/java

7.查看主机状态
(1)查看单主机

[root@node1 soft]# curl http://192.168.229.160:9200/

(2)查看群集健康状态

[root@node1 soft]# curl http://192.168.229.160:9200/_cluster/health?pretty

(3)查看整个群集状态信息

[root@node1 soft]# curl http://192.168.229.160:9200/_cluster/state?pretty

8.下载es-head插件
方法一

https://github.com/mobz/elasticsearch-head

下载后解压,复制crx目录下es-head.crx到桌面
改名es-head.crx为es-head.crx.zip
解压es-head.crx.zip到es-head.crx目录,把目录es-head.crx,上传到谷歌浏览器开发工具–扩展程序里
方法二
(1)安装git

[root@node1 soft]# yum -y install git

(2)git中下载elasticsearch-head

[root@node1 soft]# git clone git://github.com/mobz/elasticsearch-head.git

(3)提升权限

[root@node1 soft]# chmod -R 777 elasticsearch-head

(4)下载nodejs

https://nodejs.org/en/download/  
Linux Binaries (x64) 64-bit

(5)安装xz(用来转换nodejs包)

[root@node1 soft]# yum -y install xz

(6)解压nodejs包

[root@node1 soft]# xz -d node-v12.18.3-linux-x64.tar.xz
[root@node1 soft]# tar -xvf node-v12.18.3-linux-x64.tar

(7)将nodejs配置到环境变量中

[root@node1 soft]# vim /etc/profile     
修改内容如下:
    # set node environment
    export NODE_HOME=/soft/node-v12.18.3-linux-x64(这里是node的包路径名称)
    export PATH=$PATH:$NODE_HOME/bin
[root@node1 soft]# source /etc/profile

(8)验证nodejs(如下图所示)

[root@node1 soft]# node -v  #显示出相关版本号
v12.18.3
[root@node1 soft]# npm -v  #显示出相关版本号
6.14.6

(9)配置elasticsearch

[root@node1 soft]# vim /etc/elasticsearch/elasticsearch.yml 
添加内容如下:
http.cors.enabled: ture
http.cors.allow-origin: "*"

(10)启动head
到elasticsearch-head目录下
下载依赖命令:

[root@node1 elasticsearch-head]# npm install
启动命令:
[root@node1 elasticsearch-head]# npm run start
后台启动命令:
[root@node1 elasticsearch-head]# nohup npm run start &

9.创建索引

vipinfo,类型:users,序号:1,数据部分:...
[root@node1 soft]# curl -XPUT '192.168.229.160:9200/vipinfo/users/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"name": "zhangjie","age": "21","job": "xuesheng"}'

选项说明

XPUT  #创建

XDELETE  #删除

10.elasticsearch群集说明
(1)状态颜色

颜色意义
灰色未连接
绿色数据完整态
黄色副本不完整
红色数据分片不完整
紫色数据分片复制过程

(2)群集主机角色

节点作用
主节点master负责管理调度
工作节点负责处理数据

默认情况,所有节点都是工作节点,即主节点也处理数据。
11.往群集添加第二台主机
主机IP为192.168.229.161,安装elasticsearch,注意配置文件需要修改。

[root@node2 ~]# mkdir /soft
[root@node2 ~]# cd /soft/
[root@node2 soft]# java -version
[root@node2 soft]# yum -y install java
[root@node2 soft]# yum -y install elasticsearch-6.6.0.rpm
[root@node2 soft]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-2
path.data: /data/elasticsearch                  
path.logs: /var/log/elasticsearch               
bootstrap.memory_lock: true                             
network.host: 192.168.229.161,127.0.0.1   
http.port: 9200 
discovery.zen.ping.unicast.hosts: ["192.168.229.160", "192.168.229.161"]  #集群发现通过单播实现
discovery.zen.minimum_master_nodes: 2  #添加的值=节点数/2 + 1

12.创建数据目录并修改权限

[root@node2 soft]# mkdir -p /data/elasticsearch
[root@node2 soft]# chown -R elasticsearch:elasticsearch /data/elasticsearch/

13.分配锁定内存

[root@node2 soft]# vim /etc/elasticsearch/jvm.options
-Xms512m  #分配最小内存	
-Xmx512m  #分配最大内存,官方推荐为物理内存的一半,但最大为32G

14.修改锁定内存后无法重启
解决方法如下:

[root@node2 soft]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
F2保存退出
[root@node2 soft]# systemctl daemon-reload
[root@node2 soft]# systemctl restart elasticsearch

15.往群集添加第三台主机
主机IP为192.168.229.167,安装elasticsearch,注意配置文件需要修改。

[root@node3 ~]# mkdir /soft
[root@node3 ~]# cd /soft/
[root@node3 soft]# java -version
[root@node3 soft]# yum -y install java
[root@node3 soft]# yum -y install elasticsearch-6.6.0.rpm
[root@node3 soft]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-3
path.data: /data/elasticsearch                  
path.logs: /var/log/elasticsearch               
bootstrap.memory_lock: true                             
network.host: 192.168.229.167,127.0.0.1   
http.port: 9200 
discovery.zen.ping.unicast.hosts: ["192.168.229.160", "192.168.229.167"]
discovery.zen.minimum_master_nodes: 2   

16.创建数据目录并修改权限

[root@node3 soft]# mkdir -p /data/elasticsearch
[root@node3 soft]# chown -R elasticsearch:elasticsearch /data/elasticsearch/

17.分配锁定内存

[root@node3 soft]# vim /etc/elasticsearch/jvm.options
-Xms512m  #分配最小内存	
-Xmx512m  #分配最大内存,官方推荐为物理内存的一半,但最大为32G

18.修改锁定内存后无法重启
解决方法如下:

[root@node3 soft]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
F2保存退出
[root@node3 soft]# systemctl daemon-reload
[root@node3 soft]# systemctl restart elasticsearch

19.常见群集管理监控命令
(1)查看索引信息

[root@node1 soft]# curl -XGET '192.168.229.160:9200/_cat/indices?pretty'

(2)查看群集健康状态

[root@node1 soft]# curl -XGET '192.168.229.160:9200/_cluster/health?pretty'

(3)统计群集节点

[root@node1 soft]# curl -XGET '192.168.229.160:9200/_cat/nodes?human&pretty'

(4)查看群集所有节点详细信息

[root@node1 soft]# curl -XGET '192.168.229.160:9200/_nodes/_all/info/jvm.process?human&pretty'

注意:企业环境使用脚本监控群集健康状态是否为green或节点数不匹配就邮件报警。
(5)创建索引index1时,修改分片为3和副本数为2。

[root@node1 soft]# curl -XPUT 192.168.229.160:9200/index1 -H 'Content-Type: application/json' -d '{
    "settings" : {
        "index" : {
            "number_of_shards" : 3, 
            "number_of_replicas" : 2 
        }
    }
}'

(6)针对已有索引,可修改副本数,不可改分片数。下面语句把index1的副本数由2改为1。

[root@node1 soft]# curl -XPUT '192.168.229.160:9200/index1/_settings?pretty' -H 'Content-Type: application/json' -d '{
  "settings": {
    "number_of_replicas": "1"
  }                          
}'
四、EFK日志收集架构搭建
elasticsearch:数据库,存储数据  #java语言编写

logstash:日志收集,过滤数据  #java语言编写

kibana:分析,过滤,展示  #java语言编写

filebeat:收集日志,传输到ES或logstash  #go语言编写 

filebeat官方文档
环境准备

es主机:192.168.229.160(内存:4G)
elasticsearch
kibana
filebeat
nginx

1.把压缩包移动到/soft目录下安装elasticsearch
前提环境:jdk-1.8.0

[root@efk ~]# java -version
-bash: java: 未找到命令
[root@efk ~]# yum -y install java-1.8.0-openjdk*
[root@efk ~]# mkdir /soft
[root@efk ~]# cd /soft/
[root@efk soft]# ls
elasticsearch-6.6.0.rpm    kibana-6.6.0-x86_64.rpm
filebeat-6.6.0-x86_64.rpm  logstash-6.6.0.rpm
[root@efk soft]# yum -y install elasticsearch-6.6.0.rpm

2.修改elasticsearch配置文件

[root@efk soft]# vim /etc/elasticsearch/elasticsearch.yml
node.name: node-1						
path.data: /data/elasticsearch			
path.logs: /var/log/elasticsearch		
bootstrap.memory_lock: true				
network.host: 192.168.229.160,127.0.0.1	
http.port: 9200							

参数解释

cluster.name  #集群名字

node.name  #节点名字

path.data  #数据存放路径

path.logs  #日志存放路径

bootstrap.memory_lock: true  #在启动的时候锁定内存

network.host  #提供服务绑定的IP地址,0.0.0.0代表所有地址

http.port  #侦听端口为9200

3.创建数据目录,并修改权限

[root@efk soft]# mkdir -p /data/elasticsearch
[root@efk soft]# chown -R elasticsearch:elasticsearch /data/elasticsearch/

4.分配锁定内存

[root@efk soft]# vim /etc/elasticsearch/jvm.options
-Xms1g  #分配最小内存	
-Xmx1g  #分配最大内存,官方推荐为物理内存的一半,但最大为32G

5.修改锁定内存后,进行如下操作才可以重启

[root@efk soft]# systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
F2保存退出
[root@efk soft]# systemctl daemon-reload
[root@efk soft]# systemctl restart elasticsearch.service
[root@efk soft]# systemctl enable elasticsearch.service

6.在es主机上安装kibana
(1)安装kibana

[root@efk soft]# yum -y install kibana-6.6.0-x86_64.rpm

(2)修改配置文件

[root@efk soft]# vim /etc/kibana/kibana.yml
修改:
server.port: 5601
server.host: "192.168.229.160"
server.name: "efk"  #自己所在主机的主机名
elasticsearch.hosts: ["http://192.168.229.160:9200"]  #es服务器的ip,便于接收日志数据

(3)启动kibana

[root@efk soft]# systemctl start kibana
[root@efk soft]# systemctl enable kibana

7.在es主机上安装filebeat
(1)安装filebeat

[root@efk soft]# yum -y install filebeat-6.6.0-x86_64.rpm 

(2)修改配置文件

[root@efk soft]# vim /etc/filebeat/filebeat.yml
修改:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log

output.elasticsearch:
  hosts: ["192.168.229.160:9200"]

(3)启动filebeat

[root@efk soft]# systemctl start filebeat
[root@efk soft]# systemctl enable filebeat

8.在es主机安装nginx,httpd-tools进行日志收集测试
(1)安装nginx、httpd-tools

[root@efk soft]# yum -y install epel-release
[root@efk soft]# yum -y install nginx httpd-tools

(2)启动nginx

[root@efk soft]# systemctl start nginx
[root@efk soft]# systemctl enable nginx

(3)使用ab压力测试工具测试访问

[root@efk soft]# ab -n 100 -c 20 http://192.168.229.160/

(4)在es浏览器查看filebeat索引和数据
(5)在kibana添加索引
网页访问

http://192.168.229.160:5601
management--create index--Time Filter field name选择@timestamp 
discover--右上角--选择today

(6)修改nginx的日志格式为json,清空日志,ab测试访问生成json格式日志。

[root@efk soft]# vim /etc/nginx/nginx.conf
添加在http {}内:
 log_format log_json '{ "@timestamp": "$time_local", '
'"remote_addr": "$remote_addr", '
'"referer": "$http_referer", '
'"request": "$request", '
'"status": $status, '
'"bytes": $body_bytes_sent, '
'"agent": "$http_user_agent", '
'"x_forwarded": "$http_x_forwarded_for", '
'"up_addr": "$upstream_addr",'
'"up_host": "$upstream_http_host",'
'"up_resp_time": "$upstream_response_time",'
'"request_time": "$request_time"'
' }';
    access_log  /var/log/nginx/access.log  log_json;
[root@efk soft]#  systemctl restart nginx
[root@efk soft]#  vim /var/log/nginx/access.log
[root@efk soft]# ab -n 200 -c 20 http://192.168.229.160/

(7)修改filebeat配置文件

[root@efk soft]# vim /etc/filebeat/filebeat.yml
修改为:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["192.168.1.104:9200"]
  index: "nginx-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@efk soft]# systemctl restart filebeat

清除kibana日志索引,然后重新创建日志索引即可查看到json格式的日志记录。
(8)配置access.log和error.log分开

[root@efk soft]# vim /etc/filebeat/filebeat.yml
修改为:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]
  
- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

output.elasticsearch:
  hosts: ["192.168.1.104:9200"]
  #index: "nginx-%{[beat.version]}-%{+yyyy.MM.dd}"
  indices:
    - index: "nginx-access-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "access"
    - index: "nginx-error-%{[beat.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "error"

setup.template.name: "nginx"
setup.template.patten: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@efk soft]# systemctl restart filebeat

访问kibana创建索引处看到error日志已被发现。
kibana图表

登录--左侧面板选择visualize--点击“+”号--选择图表类型--选择索引
--Buckets--x-Axis--Aggregation(选择Terms)--Field(remote_addr.keyword)
--size(5)--点击上方三角标志

kibana监控(x-pack)

登录--左侧面板选择--Monitoring--启用监控
五、构建filebeat+redis+logstash+es+kibana架构

1.logstash基本使用方法
Logstash使用管道方式进行日志的搜集处理和输出。有点类似linux系统的管道命令xxx | ccc | ddd,xxx执行完了会执行ccc,然后执行ddd。
在logstash中,包括了三个阶段

输入input --> 处理filter(不是必须) --> 输出output

在这里插入图片描述
每个阶段都由很多的插件配合工作,比如file、elasticsearch、redis等。
每个阶段也可以指定多种方式,比如输出既可以输出到elasticsearch中,也可以指定到stdout在控制台打印。
由于这种插件式的组织方式,使得logstash变得易于扩展和定制。
2.logstash命令行中常用的命令

-f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash。

-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“”则默认使用stdin作为输入,stdout作为输出)。

-t:测试配置文件是否正确,然后退出

格式

logstash -e:在命令行执行;input输入,stdin标准输入,是一个插件;output输出,stdout:标准输出

用法如下

[root@elk-node1 ~]# logstash -e 'input { stdin{} } output { stdout{} }'
22:50:19.889 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com 输入
2017-08-09T14:51:26.277Z elk-node1 www.baidu.com 输出
www.sina.com.cn 输入
2017-08-09T14:51:30.971Z elk-node1 www.sina.com.cn 输出

使用rubydebug显示详细输出,codec为一种编解码器。

[root@elk-node1 ~]# logstash -e 'input { stdin{} } output { stdout{ codec =>rubydebug} }'
22:54:23.075 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com 输入
{
    "@timestamp" => 2017-08-09T14:54:31.236Z,
      "@version" => "1",
        "host" => "elk-node1",
      "message" => "www.baidu.com"
}
www.sina.com.cn 输入
{
    "@timestamp" => 2017-08-09T14:54:39.412Z,
      "@version" => "1",
        "host" => "elk-node1",
      "message" => "www.sina.com.cn"
}

使用logstash将信息写入到elasticsearch中

[root@elk-node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=> ["192.168.229.160:9200"]} }'
22:59:03.834 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
www.sina.com.cn
www.google.com

在elasticsearch中查看logstash新加的索引。
3.安装redis,并启动
(1)准备安装和数据目录

[root@efk ~]# mkdir -p /data/soft
[root@efk ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}

(2)下载redis安装包

[root@efk ~]# cd /data/soft
[root@efk soft]# wget http://download.redis.io/releases/redis-5.0.7.tar.gz

(3)解压redis到/opt/redis_cluster/

[root@efk soft]# tar xf redis-5.0.7.tar.gz -C /opt/redis_cluster/
[root@efk soft]# ln -s /opt/redis_cluster/redis-5.0.7  /opt/redis_cluster/redis

(4)切换目录安装redis

[root@efk soft]# cd /opt/redis_cluster/redis
[root@efk redis]# yum -y install gcc gcc-c++
[root@efk redis]# make && make install 

(5)编写配置文件

[root@efk redis]# vim /opt/redis_cluster/redis_6379/conf/6379.conf
添加:
bind 127.0.0.1 192.168.229.160
port 6379
daemonize yes
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
databases 16
dbfilename redis.rdb
dir /opt/redis_cluster/redis_6379

(6)启动当前redis服务

[root@efk redis]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf

4.修改filebeat配置文件,output给redis
(参考文档:https://www.elastic.co/guide/en/beats/filebeat/6.6/index.html)
(1)修改filebeat配置output指向redis,重启

[root@efk redis]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["access"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

setup.template.settings:
  index.number_of_shards: 3

setup.kibana:

output.redis:
  hosts: ["192.168.229.160"]
  key: "filebeat"
  db: 0
  timeout: 5
[root@efk redis]# systemctl restart filebeat

(2)测试访问网站,登录redis,查看键值

[root@efk redis]# redis-cli  #登录
keys *  #列出所有键
type filebeat  #filebeat为键值名
LLEN filebeat  #查看list长度
LRANGE filebeat 0 -1  #查看list所有内容

5.安装logstash,收集redis的日志提交给es
(1)安装logstash(安装包提前放在了/soft下)

[root@efk redis]# cd /soft/
[root@efk soft]# yum -y install logstash-6.6.0.rpm 

(2)配置logstash

[root@efk soft]# vim /etc/logstash/conf.d/redis.conf
可以通过文件读入的方式添加:最后一行:r ../logstash-sample.conf
input {
  redis {
    host => "192.168.229.160"
    port => "6379"
    db => "0"
    key => "filebeat"
    data_type => "list"
  }
}

filter {
  mutate {
    convert => ["upstream_time","float"]
    convert => ["request_time","float"]
  }
}

output {
  stdout {}
  elasticsearch {
    hosts => ["http://192.168.229.160:9200"]
    index => "nginx_access-%{+YYYY.MM.dd}"
    manage_template => false
  }
}

(3)启动logstash

[root@efk soft]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf 

(4)修改logstash配置文件,实现access和error日志分离。

[root@efk soft]# vim /etc/logstash/conf.d/redis.conf
添加:
input {
  redis {
    host => "192.168.229.160"
    port => "6379"
    db => "0"
    key => "filebeat"
    data_type => "list"
  }
}

filter {
  mutate {
    convert => ["upstream_time","float"]
    convert => ["request_time","float"]
  }
}

output {
  stdout {}
   if "access" in [tags] {
    elasticsearch {
      hosts => ["http://192.168.229.160:9200"]
      index => "nginx_access-%{+YYYY.MM.dd}"
      manage_template => false
    }
   }
   if "error" in [tags] {
    elasticsearch {
      hosts => ["http://192.168.229.160:9200"]
      index => "nginx_error-%{+YYYY.MM.dd}"
      manage_template => false
    }
   }
}
[root@efk soft]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值