elk搭建及应用服务日志采集

一、日志采集流程简介

1、elasticsearch stack 介绍

elasticsearch stack 主要是是由 elasticsearch + beats + logstash + kibana 四个组件组成。

组件名称 作用
elasticsearch 负责核心存储和检索引擎(比如beats或logstash采集的日志就可以存储在es中)。
beats 有很多种类的beat,比如filebeat主要用于采集日志文件,metricbeat主要用于采集服务性能指标(比如操作系统性能指标,NGINX性能指标,MySQL性能指标,Redis性能指标等),packetbeat主要用于采集网络流量指标等。beat采集的日志一般有两种流向,一是可以直接存储到elasticsearch中,二是可以流向logstash中,经过logstash的一些过滤,切分等处理后再流向elasticsearch中进行存储。
logstash 也可以用于采集数据,但是logstash可以对采集的数据做一定的处理(比如切割,过滤,提取关键词等),然后传递给下游存储系统。
kibana 主要用于将数据进行可视化呈现,支持将数据按客户要求进行呈现(比如:柱形图,饼状图,折线图等)。方便用户查看日志。

elk搭建及应用服务日志采集

2、elasticsearch stack常见使用组合

一般来说,常见的组合流程有如下两种:


组合一、


  • 使用beat采集日志,日志直接流向es中(日志不需要做额外处理)
  • es存储采集到的日志
  • kibana将es中的日志做可视化呈现

组合二、


  • 使用beat采集日志,日志流向logstash中
  • logstash接收来自beat的日志,然后做一些处理(比如:过滤,切分等),然后将处理后的日志流向es中。
  • es存储logstash流过来的日志
  • kibana将es中的日志做可视化呈现

二、本次搭建日志采集流程说明

本次采用上面的组合二的方式来进行搭建!

es的搭建流程见我的上篇!!!https://blog.csdn.net/Hellowenpan/article/details/116497143?spm=1001.2014.3001.5501

1、流程图

elk搭建及应用服务日志采集

2、流程说明

  • 模拟的应用服务产生日志(我们这里使用echo指令定时向某个文件写入日志模拟)。
  • filebeat采集应用服务的日志,然后传递到logstash中。
  • 在logstash中将采集到的服务日志按自己的要求做切分过滤,切分完毕后写入到es中。
  • kibana读取es中的日志做可视化呈现,用户在浏览器*问kibana的可视化界面就可查看到日志。

三、机器规划

  1. 一共使用三台服务器,分别是yuanping-host,hezhen-host,wenpan-host
  2. 三台服务器都部署es
  3. yuanping-host部署filebeat、logstash
  4. hezhen-host部署kibana
  5. 使用echo 命令向app-1.log和app-2.log文件写日志,模拟两个不同应用服务的日志
yuanping-host hezhen-host wenpan-host
Filebeat
Logstash
Es
kibana
模拟的应用服务 使用echo命令向app-1.log、app-2.log写入数据

四、Filebeat搭建

1、下载安装包并解压

下载地址:https://www.elastic.co/cn/downloads/beats/filebeat

# 将filebeat解压到指定的目录
tar -zxvf filebeat-6.5.4-linux-x86_64.tar.gz -C /opt/module/beats/
2、编写配置文件

在filebeat安装目录新建一个config目录,用于存放我们自己编写的配置文件。在config目录下新建一个配置文件wenpan-filebeat-app-test.yml(名字随便取,启动filebeat的时候指定该配置文件即可),写入如下内容:

# 设置filebeat的输入为文件输入
filebeat.inputs:
# 这里可以配置多个path,采集不同应用服务的日志,然后在logstash中按照应用服务名为index保存到es中
- type: log
  enabled: true
  # 采集指定目录的日志(模拟采集第一个应用服务的日志)
  paths:
    - /opt/module/data/logs/app-1.log
  # 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引
  fields:
    appname: test-app01-log
  # 将属性放到根下 比如 appname 属性,在其他地方访问直接 [appname] 即可访问,不开启的话需要 [fields][appname]才能访问
  #fields_under_root: true

- type: log
  enabled: true
  # 采集指定目录的日志(模拟采集第二个应用服务的日志)
  paths:
    - /opt/module/data/logs/app-2.log
  # 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引
  fields:
    appname: test-app02-log
  #fields_under_root: true


# 指定索引的分区数
setup.template.settings:
  index.number_of_shards: 3

#指定logstash的配置,日志采集后输出到logstash中
output.logstash:
  hosts: ["yuanping-host:5044"]
3、启动filebeat
# 执行如下命令启动filebeat
./filebeat -e -c wenpan-filebeat-app-test.yml -d "publish"

#参数说明
-e: 输出到标准输出,默认输出到syslog和logs下 
-c: 指定配置文件
-d: 输出debug信息

五、logstash搭建

1、下载并安装

下载地址:https://www.elastic.co/cn/downloads/logstash

或使用wget获取:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz

# 解压到指定目录
tar -zxvf logstash-6.5.4.tar.gz -C /opt/module/logstash/
2、创建配置文件wenpan-pipeline-app-test.conf

在config目录下创建一个配置文件wenpan-pipeline-app-test.conf(名字随便取,启动filebeat的时候指定该配置文件即可),写入如下内容:

# 从filebeat中输入
input {
  beats {
       port => "5044"
  }
}

filter {
		# 设置按照 | 拆分日志
    mutate {
      split => {"message"=>"|"}
    }
    
    # 获取拆分后的日志的第1、2、3个字段并为他们指定字段名(非必须)
    mutate {
      add_field => {
        "userId" => "%{message[1]}"
        "visit" => "%{message[2]}"
        "date" => "%{message[3]}"
		  } 
		}
		# 将上面拿到的字段进行类型转换(非必须)
    mutate {
      convert => {
        "userId" => "integer"
        "visit" => "string"
        "date" => "string"
		  } 
		}
}

# 输出到es中
output {
		# 匹配filebeat里面定义的type,以便于一个logstash可以收集多个日志
		if [fields][appname] == "test-app-log" {
      elasticsearch {
          hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"]
          # 刷新频率
          #flush_size => 1000
          # es中创建索引的名称(注意 index里面不能存在大写字符)
          index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
          document_type => "log"
      }
    }
    # 匹配filebeat里面定义的type,以便于一个logstash可以收集多个日志
		if [fields][appname] == "product-app-log" {
      elasticsearch {
          hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"]
          # 刷新频率
          #flush_size => 1000
          # es中创建索引的名称(注意 index里面不能存在大写字符)
          index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
          document_type => "log"
      }
    }
    
    # ======================上面的写法也可以直接写成如下格式,二选一即可======================
    # 推荐下面这种写法,比较简洁
    #elasticsearch {
    #hosts => [ "wenpan-host:9200","hezhen-host:9200","yuanping-host:9200"]
    # 刷新频率
    #flush_size => 1000
    # es中创建索引的名称(注意 index里面不能存在大写字符)
    #index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
    #document_type => "log"
    #}
    
}
3、启动logstash
# 用指定的配置文件启动logstash,后台启动
nohup ./bin/logstash -f ./wenpan-pipeline-app-test.conf &

六、kibana搭建

1、下载并解压

下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana

# 解压到指定目录	
tar -xvf kibana-6.5.4-linux-x86_64.tar.gz -C /opt/module/kibana
2、修改配置文件kibana.yml
vim config/kibana.yml
# 对外暴露服务的地址,如果是阿里云,公网想要访问到的话这里需要配置成0.0.0.0
server.host: "xx.xx.xx.xx"
# 配置Elasticsearch
elasticsearch.url: "http://es的IP:9200" 
3、启动并访问
# 后台启动kibana
nohup ./bin/kibana &

启动报错 FATAL Error: listen EADDRNOTAVAIL xx.xx.xx.xx:5601

**解决方法:**修改server.host为

上一篇:ELK单机版安装部署


下一篇:ELK日志分析系统解释