Mac下配置Filebeat+ELK日志管线的方法

介绍
日常维护运行在集群上的服务时,依次登录到机器上查看日志文件显然是非常低效的。另一方面,这些日志文件经常是有着良好的格式以及固定的路径。如果能将指定的日志文件批量导出到一个数据库里,无论是查看还是检索都会方便很多。这里记录一下在构建日志管理系统时的一些工具和方法,方便以后取用。

本文将构建的系统如下面的框图所示,用于管理日志文件(例如.log文件),并可以通过可视化工具Kibana显示、查找。

 

整个系统全部使用Elastic家族的服务,包括日志监控/读取服务Filebeat,数据管线Logstash,弹性存储和搜索服务Elasticsearch,以及最终的可视化工具Kibana。其中,Logstash是可选的,Filebeat也支持直接注入数据到Elasticsearch中,它存在的意义在于对日志进行一次filter处理,减轻Elasticsearch上的存储压力。

为了便于操作,本文整个系统都在一台电脑上实现。实际应用中,各个服务可能搭建在不同的机器上,服务之间通过网络通讯。但是原理都是一致的。

安装
这次用到的Elastic全家桶可以用homebrew安装,非常方便。

brew tap elastic/tap
brew install elastic/tap/elasticsearch-full
brew install elastic/tap/filebeat-full
brew install elastic/tap/logstash-full
brew install elastic/tap/kibana-full
其中,Logstash需要java支持,而且必须是java8或java11。可以用brew安装:

brew cask install homebrew/cask-versions/adoptopenjdk8
也可以自己前往oracle官网下载安装。

以上安装完成后,运行

brew services list
如果看到

Name Status User Plist
elasticsearch-full stopped
filebeat-full stopped
kibana-full stopped
logstash-full stopped
则证明安装成功了。稍后配置完成后,我们再回头启动这些service。

配置路径
这次用到了一共4个服务,这些服务的配置、日志等路径都不一样,整理如下。需要注意的是,本文是用brew安装在mac上的,在其他系统上路径结构可能会不一样。

服务 安装路径 配置路径 日志路径
Filebeat /usr/local/var/homebrew/linked/filebeat-full/ /usr/local/etc/filebeat /usr/local/var/log/filebeat
Logstash /usr/local/var/homebrew/linked/logstash-full
/usr/local/Cellar/logstash-full/7.2.0/libexec/config/pipelines.yml

(其他配置路径均在pipelines.yml中指定)

/usr/local/var/log/logstash.log

Elasticsearch /usr/local/var/homebrew/linked/elasticsearch-full
(ES_PATH_CONF)

/usr/local/etc/elasticsearch

(path.logs)

/usr/local/var/log/elasticsearch

其中,Logstash的路径可能比较难找,Filebeat和Elasticsearch的路径在官方文档中都有详细的说明。

配置和测试
配置过程主要是根据数据流水线设置前后的输入输出。在这里所有的服务都是用端口链接,这是因为正常情况下这些服务是分布在不同机器上的。而我们作为测试全部放在一台机器上配置。

Filebeat
Filebeat的功能是监控log文件,并将更新的日志信息输出。

打开Filebeat的配置文件,brew安装的路径是 /usr/local/etc/filebeat/filebeat.yml

在Filebeat.inputs项下面配置需要监控的日志路径:

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
将output下面的elasticsearch output注释掉,因为我们这里filebeat的下游是logstash,logstash的下游才是elasticsearch:

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
然后取消logstash下面的两行注释:

output.logstash:
hosts: ["localhost:5044"]
这样算是将Filebeat配好了。

对Filebeat的测试需要启动Filebeat服务之后才能看到。Filebeat的log在 /usr/local/var/log/filebeat/filebeat里,如果Filebeat正常的话,启动服务后可以在这个文件里看到时间戳和运行信息。

Logstash
Logstash的输入时Filebeat输出的日志信息,输出端是Elasticsearch。Logstash存在的意义在于,它可以添加filter对数据进行一波处理。

Logstash安装好就可以直接在命令行运行,并进行测试:

cd /usr/local/Cellar/logstash-full/7.2.0
bin/logstash -e 'input { stdin { } } output { stdout {} }'
该命令的意思是,直接用指定的配置启动Logstash。而这个配置的将输入输出全部绑定到标准流。

Logstash启动后,在命令行输入

hello logstash
会看到Logstash的输出

{
"host" => "yujinshiairbnb.local",
"@timestamp" => 2019-07-23T08:54:16.665Z,
"message" => "hello logstash",
"@version" => "1"
}
这样表示Logstash可以正常运行了。

对Logstash的配置比较复杂,首先要配置pipeline,配置文件的路径在

/usr/local/Cellar/logstash-full/7.2.0/libexec/config/pipelines.yml
比如配置一条test流水线,config文件指向另外一个地方:

- pipeline.id: test
path.config: "/usr/local/Cellar/logstash-full/7.2.0/libexec/config/logstash.conf"
pipeline.workers: 1
更多关于流水线的参数的设置可以参考官方文档。

conf文件如下配置:

input {
beats {
port => "5044"
}
}
filter {
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
这样一条简单的输入输出流水线就算配置好了。

Elasticsearch
Elasticsearch的作用是保存输入的日志,相关的有三个不同作用的配置文件,分别为:

elasticsearch.yml Elasticsearch的配置文件
jvm.options 配置JVM设置
log4j2.properties 配置Elasticsearch的日志信息
这里保持默认配置即可,不需要修改。

Kibana
Kibana配置也不需要修改,直接启动然后从网页端配置即可。

启动
使用brew管理服务:

sudo brew services elasticsearch-full
sudo brew services filebeat-full
sudo brew services logstash-full
sudo brew services kibana-full
启动之后,可以用brew services list命令看到这些服务都是运行状态。

各个服务的日志可以去相应的路径查看。

Kibana界面配置
所有的服务都启动以后,Kibana已经在本地的5601端口(默认)启动了。因此访问

http://localhost:5601

即可打开Kibana网页。

 

第一次进入需要稍微配置一下,主要是配置Kibana从Elasticsearch读取的内容。

进入主页后如下图所示。

 

点击主页上的"connect to your Elasticsearch index",配置index pattern:

 

index pattern即从Elasticsearch中读取的日志的pattern,如上图中列出了一个indices为”logstash-2019.07.24-000001",意思是2019.07.24创建的Logstash。如果这里没有indices,可能是上游某个服务没有配好,应该回去查看前面各个环节的日志,确保没有error。

输入一个index pattern匹配该indices:

logstash-*
创建好index pattern之后,点击左侧栏的第一项“explorer”:

 

这个页面即可看到Filebeat收集到的日志信息。如果这里为空,可能是当前时间段没有新的日志,可以尝试修改filter的时间段。

到此,整个系统就搭好了。更多深入的探究,可以参考官方的说明文档。


原文链接:https://blog.csdn.net/u010281174/article/details/97178567

posted @ 2024-10-31 14:00  星云惊蛰  阅读(33)  评论(0)    收藏  举报