从零搭建ELK + filebeat 日志分析系统(以Windows为例)

1. 什么是ELK?

ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 ElasticSearch、Logstash 和 Kibana。

2. filebeat

Filebeat工作流程图

​ Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

  Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。

3. 安装ElasticSearch

3.1 ES 单节点搭建

  1. 首先在官网下载Windows版本的Elasticsearch压缩包, 在任意处解压。

    解压后文件结构如下:

  2. 启动方式:

    进入bin文件目录,在此处打开终端窗口,运行 elasticsearch.bat文件即可

    待命令行窗口显示started即为启动成功.

  3. 此时可以在浏览器访问http://localhost:9200, 可以看到浏览器返回如下信息

3.2 ES 集群搭建

  1. 创建elasticsearch-cluster 文件夹, 将ES安装包解压出的内容物复制三份分别命名如下:

  2. 配置各节点的配置文件(各节点config文件夹下的elasticsearch.yml文件)

    节点1配置文件配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 节点1的配置信息:
    # 集群名称, 节点之间要保持一致
    cluster.name: my-elasticsearch
    #节点名称, 集群唯一
    node.name: node-1
    node.master: true
    node.data: true

    # ip地址
    network.host: localhost
    # http端口
    http.port: 9201
    # tcp监听端口
    transport.tcp.port: 9301

    discovery.seed_hosts: ["localhost:9301", "localhost:9302","localhost:9303"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5

    # 集群内可被选为主节点的节点列表
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

    # 跨域配置
    # action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    节点2配置文件配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 节点 2 的配置信息:
    # 集群名称,节点之间要保持一致
    cluster.name: my-elasticsearch
    # 节点名称,集群内唯一
    node.name: node-2
    node.master: true
    node.data: true
    #ip 地址
    network.host: localhost
    # http端口
    http.port: 9202
    #tcp监听端口
    transport.tcp.port: 9302

    discovery.seed_hosts: ["localhost:9301"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5

    # 集群内可被选为主节点的节点列表
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

    # 跨域配置
    # action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    节点3配置文件配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 节点 3 的配置信息:
    # 集群名称,节点之间要保持一致
    cluster.name: my-elasticsearch
    # 节点名称,集群内要唯一
    node.name: node-3
    node.master: true
    node.data: true
    #ip 地址
    network.host: localhost
    # http端口
    http.port: 9203
    #tcp监听端口
    transport.tcp.port: 9303

    discovery.seed_hosts: ["localhost:9301", "localhost:9302"]
    discovery.zen.fd.ping_timeout: 1m
    discovery.zen.fd.ping_retries: 5

    # 集群内可被选为主节点的节点列表
    cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

    # 跨域配置
    # action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"
  3. 修改好各节点的配置文件之后, 依次启动各节点即可成功创建ES集群

  4. Multi Elasticsearch Head 插件的安装

    我们可以在如下链接下载此浏览器插件进行安装,浏览器插件安装方式请自行搜索有关资料

    安装插件完成之后我们可以点击插件,进入监控 Elasticsearch 状态界面,

    在此页面我们可以方便地对ES集群进行管理,可以查看到索引所有节点各个分片的健康度等信息,并且能够对索引进行增删改查操作

4. Kibana的安装及启动

  1. 在官网下载Kibana安装压缩包, 并解压

    1. 进入bin目录,双击kibana.bat即可启动成功

      访问http://localhost:5601, 查看kibana页面:

      页面修改为中文需要在 config/kibana.yml中添加 i18n.locale: "zh-CN" 配置

    5. Logstash 的安装与配置

    1. 首先从官网下载Logstash的zip压缩包, 随后解压:

      image-20220819192802301

    2. 修改config/logstash.conf 文件如下, 为修改elasticsearch:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      # Sample Logstash configuration for creating a simple
      # Beats -> Logstash -> Elasticsearch pipeline.

      input {
      beats {
      port => 5044
      }
      }

      filter {
      grok {
      match => { "message" => "%{NGINXACCESS}" }

      }
      geoip {
      source => "http_x_forwarded_for"
      target => "geoip"
      database => "C:\Software\nginx-1.22.0\GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
      }

      mutate {
      convert => [ "[geoip][coordinates]", "float" ]
      convert => [ "response","integer" ]
      convert => [ "bytes","integer" ]
      replace => { "type" => "nginx_access" }
      remove_field => "message"
      }

      date {
      match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]

      }
      mutate {
      remove_field => "timestamp"

      }


      }


      output {
      elasticsearch {
      hosts => ["http://localhost:9201"]
      }


      stdout {
      codec => rubydebug
      }
      }
    3. 启动命令.\bin\logstash.bat -f <配置文件路径(config/logstash.conf)>

6. Filebeat 的安装与配置

  1. 从官网下载Filebeat压缩包, 并解压缩

  2. 随后以采集nginx产生的日志为例:

    配置filebeat.yml:

    1
    2
    3
    output.logstash:
    # The Logstash hosts
    hosts: ["localhost:5044"]

    运行.\filebeat.exe modules enable nginx,随后更改modules.d\nginx.yml设置nginx日志的输出路径.

    随后使用.\filebeat.exe -e运行filebeat即可

    也或可将filebeat注册到Windows服务启动

7. 启动整个日志系统

按顺序(ES(集群)=>logstash=>filebeat=>kibana)依次启动各项服务,随后启动nginx服务,并产生部分日志:

随后回到kibana界面, 使用logstash-* 新建索引模式

随后就可看见kibana收集来的nginx日志

更多使用方法可以查阅Kibana官网文档