使用Beat收集nginx日志和指标数据
项目需求
Nginx是一款非常优秀的web服务器,往往nginx服务会作为项目的访问入口,那么,nginx的性能保障就变得非常重要了,如果nginx的运行出现了问题就会对项目有较大的影响,所以,我们需要对nginx的运行有监控措施,实时掌握nginx的运行情况,那就需要收集nginx的运行指标和分析nginx的运行日志了。
业务流程
说明:
- 通过Beats采集Nginx的指标数据和日志数据
- Beats采集到数据后发送到Elasticsearch中
- Kibana读取数据进行分析
- 用户通过Kibana进行查看分析报表
部署Nginx
部署教程可以参考这篇博客:CentOS下如何安装Nginx?
部署完成后,我们就可以启动nginx了
启动完成后,我们通过下面命令,就可以获取到nginx中的内容了
tail -f /var/log/nginx/access.log
Beats简介
通过查看ElasticStack可以发现,Beats主要用于采集数据
官网地址:https://www.elastic.co/cn/beats/
Beats平台其实是一个轻量性数据采集器,通过集合多种单一用途的采集器,从成百上千台机器中向Logstash或ElasticSearch中发送数据。
通过Beats包含以下的数据采集功能
- Filebeat:采集日志文件
- Metricbeat:采集指标
- Packetbeat:采集网络数据
-
如果我们的数据不需要任何处理,那么就可以直接发送到ElasticSearch中
如果们的数据需要经过一些处理的话,那么就可以发送到Logstash中,然后处理完成后,在发送到ElasticSearch
最后在通过Kibana对我们的数据进行一系列的可视化展示
Filebeat
介绍
Filebeat是一个轻量级的日志采集器
-
为什么要用Filebeat?
当你面对成百上千、甚至成千上万的服务器、虚拟机和溶气气生成的日志时,请告别SSH吧!Filebeat将为你提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁华,关于Filebeat的记住以下两点:
- 轻量级日志采集器
- 输送至ElasticSearch或者Logstash,在Kibana中实现可视化
架构
用于监控、收集服务器日志文件.
-
流程如下:
- 首先是input输入,我们可以指定多个数据输入源,然后通过通配符进行日志文件的匹配
- 匹配到日志后,就会使用Harvester(收割机),将日志源源不断的读取到来
- 然后收割机收割到的日志,就传递到Spooler(卷轴),然后卷轴就在将他们传到对应的地方
下载
官网地址:https://www.elastic.co/cn/downloads/beats/filebeat
选中对应版本的Filebeat,我这里是Centos部署的,所以下载Linux版本
下载后,我们上传到服务器上,然后创建一个文件夹
# 创建文件夹 mkdir -p /soft/beats # 解压文件 tar -zxvf filebeat-7.9.1-linux-x86_64.tar.gz # 重命名 mv filebeat-7.9.1-linux-x86_64/ filebeat
然后我们进入到filebeat目录下,创建对应的配置文件
# 进入文件夹
cd filebeats
# 创建配置文件
vim mogublog.yml
添加如下内容
filebeat.inputs: # filebeat input输入 - type: stdin # 标准输入 enabled: true # 启用标准输入 setup.template.settings: index.number_of_shards: 3 # 指定下载数 output.console: # 控制台输出 pretty: true # 启用美化功能 enable: true
启动
在我们添加完配置文件后,我们就可以对filebeat进行启动了
./filebeat -e -c mogublog.yml
后台启动
nohup ./logstash -f ./mogu-dashboard.conf > catalina.out 2>&1 &
然后我们在控制台输入hello,就能看到我们会有一个json的输出,是通过读取到我们控制台的内容后输出的
内容如下
{ "@timestamp":"2019-01-12T12:50:03.585Z", "@metadata":{ #元数据信息 "beat":"filebeat", "type":"doc", "version":"6.5.4" }, "source":"", "offset":0, "message":"hello", #元数据信息 "prospector":{ "type":"stdin" #元数据信息 }, "input":{ #控制台标准输入 "type":"stdin" }, "beat":{ #beat版本以及主机信息 "name":"itcast01", "hostname":"ElasticStack", "version":"6.5.4" }, "host":{ "name":"ElasticStack" } }
读取文件
我们需要再次创建一个文件,叫 mogublog-log.yml,然后在文件里添加如下内容
filebeat.inputs: - type: log enabled: true paths: - /soft/beats/logs/*.log setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
添加完成后,我们在到下面目录创建一个日志文件
# 创建文件夹 mkdir -p /soft/beats/logs # 进入文件夹 cd /soft/beats/logs # 追加内容 echo "hello" >> a.log
然后我们再次启动filebeat
./filebeat -e -c mogublog-log.yml
能够发现,它已经成功加载到了我们的日志文件 a.log
同时我们还可以继续往文件中追加内容
echo "are you ok ?" >> a.log
追加后,我们再次查看filebeat,也能看到刚刚我们追加的内容
可以看出,已经检测到日志文件有更新,立刻就会读取到更新的内容,并且输出到控制台。
自定义字段
但我们的元数据没办法支撑我们的业务时,我们还可以自定义添加一些字段
filebeat.inputs: - type: log enabled: true paths: - /soft/beats/logs/*.log tags: ["web", "test"] #添加自定义tag,便于后续的处理 fields: #添加自定义字段 from: test-web fields_under_root: true #true为添加到根节点,false为添加到子节点中 setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
添加完成后,我们重启 filebeat
./filebeat -e -c mogublog-log.yml
然后添加新的数据到 a.log中
echo "test-web" >> a.log
我们就可以看到字段在原来的基础上,增加了两个
输出到ElasticSearch
我们可以通过配置,将修改成如下所示
filebeat.inputs: - type: log enabled: true paths: - /soft/beats/logs/*.log tags: ["web", "test"] fields: from: test-web fields_under_root: false setup.template.settings: index.number_of_shards: 1 output.elasticsearch: hosts: ["127.0.0.1:9200"]
启动成功后,我们就能看到它已经成功连接到了es了
然后我们到刚刚的 logs文件夹向 a.log文件中添加内容
echo "hello mogublog" >> a.log
在ES中,我们可以看到,多出了一个 filebeat的索引库
然后我们浏览对应的数据,看看是否有插入的数据内容