ELK04-filebeat实践

00:文章简介

通过2个案例,介绍filebeat的使用。

01:从nginx日志中提取404相关信息

1.1:属性解析

1
2
3
4
5
6
filebeat默认情况下,可以从文件中获取相关信息,但是该功能并没有开启,
我们还可以借助于include_lines和exclude_files属性获取文件中的特定内容信息。
filebeat的默认输出方式是elasticsearch和logstash,只需要配置好对应的地址即可。
注意:
filebeat的配置文件可以自己随意定制,不一定非要使用默认的filebeat.yaml文件,可以自己创建
一个yaml格式的filebeat配置文件即可。

1.2:编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd /etc/filebeat
mv filebeat.yml backup/filebeat.bak.20210825

vim filebeat.yml
# 定制收集内容的配置
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
include_lines: ['404']
tags: ["404"]
# 设定定制索引名称的配置
setup.ilm.enabled: false
setup.template:
name: "mypro"
pattern: "mypro-*"
overwrite: true
# 定制输出到es的配置
output.elasticsearch:
hosts: ["10.0.0.110:9200"]
index: "mypro-404-%{+yyyy.MM.dd}"

1.3:重启服务查看效果

1
2
3
4
5
6
7
8
9
10
systemctl restart filebeat

# 其他节点
curl 10.0.0.114
curl 10.0.0.114
curl 10.0.0.114

curl 10.0.0.114/adfadf
curl 10.0.0.114/adfadf
curl 10.0.0.114/adfadf

02:实践2:收集基于json格式的nginx日志

2.1:属性解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
我们知道es中的索引的数据获取都是基于json格式数据的键名获取具体信息,
默认情况下,message键里面的内容才是我们需要的内容,
虽然可以获取到我们想要的内容,但是无关信息太多了,比如说,我们仅仅需要获取客户端IP地址的话。
所以为了便于后续我们的定制日志分析,结合es索引数据格式的特点,
我们需要将项目nginx的access日志定制为json格式,然后将error和access拆分到不同的es索引中。

# 1 识别json格式日志:
filebeat默认情况下,无论什么格式日志,都会识别为普通的字符串日志,
我们需要借助于如下两条属性定制日志解析格式:
json.keys_under_root: true
json.overwrite_keys: true

# 2 同时收集error和access两种不同格式日志:
设置两个input,为了方便查看,在传输数据的时候,通过fields方法为不同的日志定制扩展字段
fields:
log_type: "access|error"
fields_under_root: true


# 3 nginx属性配置
获取nginx的客户端ip地址
remote_host -- 前一台主机的ip地址,
策略:
x_real_ip -- 直接在网络入口的主机地址上通过 remote_host获取真实的ip地址
x_forword_for -- 通过层层的反向代理,堆叠出来的 前一个ip地址的集合,最前的ip地址是 真实的ip地址

2.2:配置nginx的json格式日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
cd /etc/nginx
# nginx.conf里配置log的格式
vim nginx.conf
# Logging Settings 在这里增加一个名为json_format的log_format
##
log_format json_format '{"remote_addr": "$remote_addr",'
'"remote_user": "$remote_user",'
'"time_local": "$time_local",'
'"request": "$request", '
'"request_method": "$request_method", '
'"request_time": "$request_time", '
'"status": "$status", '
'"body_bytes_sent": "$body_bytes_sent", '
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_x_real_ip": "$http_x_real_ip"}';


# default网站配置文件里应用log的格式
vim sites-enabled/default

server{
...
root /var/www/html;
# log
access_log /var/log/nginx/access.log json_format; # 增加此行
...
}

# 检查效果
nginx -t
systemctl restart nginx
# 其他节点访问
curl 10.0.0.114
curl 10.0.0.114/sdfa

使用在线json解析查看是否符合json格式

2.3:定制filebeat.yml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
root@Filebeat:/etc/filebeat# cat filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields:
log_type: "access"
fields_under_root: true
json.keys_under_root: true
json.overwrite_keys: true

- type: log
enabled: true
paths:
- /var/log/nginx/error.log
fields:
log_type: "error"
fields_under_root: true

output.elasticsearch:
hosts: ["10.0.0.110:9200"]

# 重启filebeat
systemctl restart filebeat
# 其他节点多次访问产生日志
curl 10.0.0.114
curl 10.0.0.114/sdfa

2.4:查看效果