使用filebeat简单收集多个nginx应用服务器日志(一)
使用filebeat简单收集日志
1.filebeat原理与介绍
filebeat收集日志的原理类似于tail -f命令,等待应用日志产生后,每隔30s将日志进行收集,收集完成后存放在es的索引库中,最后展示在kibana上
当filebeat关闭后,nginx继续产生日志,filebeat再次开启时不会将原来没有收集到的日志重新收集,而是收集目前最新的日志,当日志索引库被删除后,filebeat重启之后,es上没有生产新的日志索引库的原因只有是nginx没有产生日志,filebeat没有收集到,所有不会产生新的日志索引库
使用filebeat收集日志并展现的实现思路:
1.在应用服务器安装filebeat,在filebeat上配置应用日志的路径及es的地址
2.当es上产生了日志索引库并且有数据之后,在kibana上创建相同名称的所有库
3.在kibana的Discover一栏查看日志收集的数据
1.1.filebeat原理
1.2.环境准备
IP | 角色 | 服务 |
---|---|---|
192.168.81.210 | es集群+kibana | elasticsearch+kibana |
192.168.81.220 | es集群 | elasticsearch |
192.168.81.230 | 日志采集服务器(nginx、tomcat、redis)等日志 | nginx、tomcat、redis等 |
2.安装filebeat
1.下载软件包
[root@logsj ~]# wget https://mirrors.huaweicloud.com/filebeat/6.6.0/filebeat-6.6.0-x86_64.rpm
2.安装filebeat
[root@logsj ~]# rpm -ivh filebeat-6.6.0-x86_64.rpm
3.查看filebeat配置文件
[root@logsj ~]# rpm -qc filebeat
/etc/filebeat/filebeat.yml
/etc/filebeat/modules.d/apache2.yml.disabled
/etc/filebeat/modules.d/auditd.yml.disabled
/etc/filebeat/modules.d/elasticsearch.yml.disabled
/etc/filebeat/modules.d/haproxy.yml.disabled
/etc/filebeat/modules.d/icinga.yml.disabled
/etc/filebeat/modules.d/iis.yml.disabled
/etc/filebeat/modules.d/kafka.yml.disabled
/etc/filebeat/modules.d/kibana.yml.disabled
/etc/filebeat/modules.d/logstash.yml.disabled
/etc/filebeat/modules.d/mongodb.yml.disabled
/etc/filebeat/modules.d/mysql.yml.disabled
/etc/filebeat/modules.d/nginx.yml.disabled
/etc/filebeat/modules.d/osquery.yml.disabled
/etc/filebeat/modules.d/postgresql.yml.disabled
/etc/filebeat/modules.d/redis.yml.disabled
/etc/filebeat/modules.d/suricata.yml.disabled
/etc/filebeat/modules.d/system.yml.disabled
/etc/filebeat/modules.d/traefik.yml.disabled
3.使用filebeat收集单台nginx日志
在做之前可以把es上的数据清空便于查看
systemctl stop elasticsearch
systemctl stop kibana
rm -rf /var/lib/kibana/*
rm -rf /data/elasticsearch/*
systemctl start elasticsearch
systemctl start kibana
3.1.安装nginx程序并启动
1.安装nginx
[root@logsj ~]# yum -y install nginx
2.启动nginx
[root@logsj ~]# systemctl start nginx
[root@logsj ~]# systemctl enable nginx
3.不断刷新页面产生日志,可以访问几个不存在的页面产生错误日志
3.2.配置filebeat收集nginx日志
主要修改filebeat中的inputs和outputs,告诉filebeat收集谁的日志并存在哪个es中
1.配置filebeat
[root@logsj ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log #类型为log,一个type对应一个索引库,如果想搜集多个服务的日志则写多个type即可
enabled: true #是否对该日志进行采集,要改成true,否则不会再es上创建索引
paths: #定义日志所在路径,可以写某一个路径下的*.log也可以分别写
- /var/log/nginx/access.log
- /var/log/nginx/error.log
filebeat.config.modules: #日志收集模板
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings: #针对该日志收集创建的索引分片数是多少,默认是3个分片
index.number_of_shards: 3
setup.kibana:
output.elasticsearch: #存放在哪个es里
hosts: ["192.168.81.210:9200"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
2.重启filebeat
[root@logsj ~]# systemctl restart filebeat
[root@logsj ~]# systemctl enable filebeat
重启完成后,当应用产生日志后,会在es上创建一个索引库存放日志,默认3个分片1个副本
3.3.产生nginx日志观察filebeat收集
3.3.1.观察nginx访问日志
使用curl命令产生一百条nginx访问成功的日志,分别产生100条正确的日志和100条错误的日志
[root@logsj ~]# for i in {1..100}
> do
> curl 127.0.0.1
> done
[root@logsj ~]# for i in {1..100}
> do
> curl 127.0.0.1/aaa
> done
观察nginx日志,已经产生
3.3.2.持续观察filebeat日志
[root@logsj ~]# tail -f /var/log/filebeat/filebeat
可以看到filebeat每隔30秒就会采集一次日志
3.4.查看es上存储的日志数据
数据浏览—选择索引—点击任意一条数据,里面的message就是日志的详细内容
3.5.在kibana上创建一个索引展示filebeat收集的数据
日志虽然收集过来了,但是还没有展现,我们需要在kibana上创建一个和es上同名的日志存储索引,用来展示采集的日志
3.5.1.创建索引
1)点击Managerment—Index Patterns
3.5.2.填写索引信息
Your index pattern can match any of your 2 indices, below,这个是提示我们有2个索引,可以选择其中一个
将filebe-6.6.0-2021.01.14复制到index pattern里,出现seccess表示成功
3.5.3.填写Time Filter field name
下拉选择@timestamp
3.5.4.正常创建
3.5.5.创建成功
3.6.在kibana上查看收集过来的日志
点击Discovery进去执行选择我们创建的索引库
点击下三角即可看日志的详细内容,message就是日志的内容,刚好使我们模拟访问不存在页面产生404的报错日志
4.使用filebeat收集多台nginx日志
在生产环境中肯定不止一台nginx服务,想查看集群中所有nginx的日志,传统的日志统计肯定需要一台一台去合并,有了filebeat和kibana之后,filebeat收集完,都存放在一个索引库中,就省去了合并的步骤,想要搜哪台主机的日志直接在页面上选择即可
4.1.多台nginx服务器部署filebeat并配置日志采集
所有的nginx服务器都按如下配置,我们在另外两台机器上安装nginx
1.安装nginx
yum -y install nginx
systemctl start nginx
systemctl enable nginx
2.安装filebeat
wget https://mirrors.huaweicloud.com/filebeat/6.6.0/filebeat-6.6.0-x86_64.rpm
rpm -ivh filebeat-6.6.0-x86_64.rpm
3.修改filebeat配置文件
vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
output.elasticsearch:
hosts: ["192.168.81.210:9200"]
4.启动filebeat
systemctl start filebeat
systemctl enable filebeat
4.2.快速访问一百次所有nginx应用
[root@elasticsearch ~]# for i in {1..100}
do
for j in {1..3}
do
curl -XGET 192.168.81.2${j}0 -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
done
done
4.3.查看filebeat收集
4.4.在kibana上查看日志收集
刚好是我们刷的300条日志
4.4.1.查看192.168.81.210nginx的日志
由于filebeat将日志收集过来之后存在了一个索引库里,因此我们想要查看某台机器的nginx日志时,只能通过过滤的方式进行匹配查询
kibana的索引库里没有IP地址的字段,可以根据主机名去查询,192.168.81.210的主机名是elasticsearch
点击左上角的Add a filter-的+号之后会让我填写匹配规则,我们可以根据主机名去划分某台主机的日志,host.name就是主机名的字段,is表示匹配,第三列选择对应的主机,可以看到已经帮我列了出来,我们选择elasticsearch,点击保存就可以生产一个按钮,方便我们每次查询,如果下次查询不需要用到这个条件,也可以点击按钮中的对勾进行取消
保存完即可搜索出保护主机名elasticsearch的日志
4.4.2.查询某一个IP访问应用产生的日志
在搜索框中填写我们要查询的内容即可搜出来保护的日志
4.4.3.查询IP地址为192.168.81.1且访问/jiangxl页面内容的日志
kibana可以多个条件一起查询,搜索源ip是192.168.81.1,在增加一个Add a filtert条件为日志内容包含jiangxl的即可查出所要的日志内容
4.4.4.如何只查看收集来日志的某一项内容
kibana展示的日志内容特别长,其中包含了很多信息,我们只想查看某一个条件可以在左侧将该条件添加即可
比如我们只查看内容的具体内容和主机名,其他的一概不看
找到想要的条件点击ADD即可添加
添加的字段可以在Selected fields中查看
过滤完字段,内容就清晰多了,内容中只包含主机名和日志内容以及采集过来的时间
5.注意kibana创建索引名字要写成xxx-*
kibana创建索引时一定要将名字写成xxx-*,因为filebeat每天收集是数据都会在es上创建一个索引,如果我们把索引名称写死的情况下,第二天的日志就在kibana看不到了
第二天的es索引页面,已经出现两个了
虽然es上的索引出现了两个,因为昨天创建kibana索引时把名称写死了,所以第二天就看不到新的日志信息
这里需要重新创建索引了,把索引的名称修改成通配符的形式
只有改成了通配符才能每天看日志情况的时候不要切换索引,否则每天都要新建索引了
当把索引名称改成filebeat-6.6.0-*时会自动把包含filebeat-6.6.0-的索引列出来,方便实时统计
在Discovery中的下拉列表就可以看到其他索引了可以将写死的索引删除
目录 返回
首页