一、简介

ELK Stack即Elastic Stack,ELK是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash和Kibana。

Elasticsearch是一个搜索和分析引擎。Logstash是服务器端数据处理管道,能够同时从多个来源采集数据、转换数据,然后将数据发送到诸如Elasticsearch等存储库中。Kibana可以让用户在Elasticsearch中使用图形和图表将数据可视化。

备注:本文使用以windows为例。

二、Elasticsearch

1、简介

Elasticsearch是一个实时的分布式开源搜索和分析引擎。

2、安装与运行

Elasticsearch安装与运行

三、Kibana

1、简介

Kibana是一个开源分析和可视化平台,设计用于Elasticsearch。可以使用Kibana搜索、查看并与存储在Elasticsearch索引中的数据进行交互;也可以轻松地执行高级数据分析,并将数据可视化为各种图表。

2、安装与运行

建议将Kibana安装在Elasticsearch的同一个服务器上,但这不是必须的。如果安装在不同的服务器上,在启动Kibana之前,需要更改Kibana配置文件Kibana.yml中Elasticsearch服务器的URL。

  • 下载

下载Kibana并解压。

  • 配置

修改config/kibana.yml文件,配置Elasticsearch:

elasticsearch.hosts: ["http://localhost:9200"]
  • 运行

解压后在命令行切换到bin目录,运行:

kibana.bat

之后访问http://127.0.0.1:5601/打开Kibana界面。

四、Beats

1、简介

Beats是一种开源数据传送器,可以将它作为代理程序安装在服务器上,然后将操作数据发送到Elasticsearch(或 Logstash)进一步处理和增强数据。

每个Beat是一个单独的可安装产品,例如:Auditbeat可以捕获审计数据,Filebeat可以捕获日志文件,Metrickbeat可以捕获系统和服务的指标和统计数据(衡量标准)等。

2、Filebeat

Filebeat是一个轻量级的、资源友好的工具,它从服务器上的文件中收集日志,并将这些日志转发到Elasticsearch或Logstash实例进行处理。

  • 下载

下载Filebeat并解压。

  • 配置

例如在filebeat.yml文件中配置日志文件位置以及将日志发送到logstash:

filebeat.inputs:
- type: log
  paths:
    - G:\log\file.log
output.logstash:
  hosts: ["localhost:5044"]
  • 启动

切换到解压后的目录,执行:

filebeat -e -c filebeat.yml

3、Metricbeat

Metricbeat的安装与运行:

  • 下载

下载Metricbeat并解压。

  • 设置初始环境

切换到解压后的目录,执行:

metricbeat.exe setup -e
  • 启动

执行:

metricbeat -e

访问http://localhost:5601/app/kibana#/dashboard/Metricbeat-system-overview-ecs即可看到可视化的系统指标:

五、Logstash

1、简介

Logstash可以汇总来自不同来源的数据并对其进行处理,然后将其发送到管道中,通常直接在Elasticsearch进行索引。

2、安装与运行

  • 下载

下载Logstash

  • 运行

解压后在命令行切换到bin目录,运行:

logstash -e "input { stdin { } } output { stdout {} }"

-e参数可以直接从命令行指定配置而不用编辑配置文件。上面示例中的管道从标准输入stdin获取输入,并以结构化格式将输入移动到标准输出stdout。

Logstash启动后,在命令提示符处输入hello world,Logstash会将时间戳和主机地址信息添加到消息中输出:

3、使用Logstash解析日志

  • 配置Filebeat将日志行(Log Lines)发送到Logstash

配置Filebeat

  • 启动Filebeat
filebeat -e -c filebeat.yml -d "publish"
  • 配置Logstash

创建一个Logstash配置管道,该管道使用Beats输入插件接收来自Beats的事件,使用插件过滤器(例如geoip)增强数据后并将数据索引到Elasticsearch。

新建first-pipeline.conf配置文件,内容如下:

input {
  beats {
    port => "5044"
  }
}

filter {
  geoip {
    source => "clientip"
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
	index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

验证配置:

logstash -f ../first-pipeline.conf --config.test_and_exit

--config.test_and_exit参数表示解析配置文件并报告任何错误。

  • 启动Elasticsearch

  • 启动Logstash

logstash -f ../first-pipeline.conf --config.reload.automatic

--config.reload.automatic表示启用自动配置重新加载,当修改配置文件时会停止并重新启动Logstash。

  • 验证

之后访问http://localhost:9200/_cat/indices?v可以看到创建出来的索引:

也可以使用搜索:

http://localhost:9200/filebeat-7.10.2-2021.01.31/_search?pretty&q=1612085856891
  • 使用Kibana可视化数据

参考资料: