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的时间段。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值