filebeat采集docker日志

1.运行一个nginx的docker容器

1
2
3
[root@elk01:2 ~]# docker run --name nginx -d -p 88:80 nginx:alpine

#注:docker的安装不再赘述

2.访问测试

1
2
3
[root@elk01:2 ~]# curl 10.0.0.211:88

#查看是否返回nginx界面,注意端口是否有冲突

3.编写filebeat实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@elk01:0 ~]# cat /etc/filebeat/08-docker-log.yaml 
filebeat.inputs:
- type: docker
tags: 'docker'
#下面写容器的id号,写*代表收集所有容器日志
containers.ids:
- "*"
output.elasticsearch:
hosts: ["http://10.0.0.211:9200","http://10.0.0.212:9200","http://10.0.0.213:9200"]
indices:
- index: "filebeat-docker-%{+yyyy.MM.dd}"
when.contains:
tags: "docker"

setup.ilm.enabled: false
setup.template.name: "filebeat"
setup.template.pattern: "filebeat*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 5
index.number_of_replicas: 0

#启动filebeat实例
[root@elk01:2 ~]# filebeat -e -c /etc/filebeat/08-docker-log.yaml

3.访问nginx使之产生日志

1
2
[root@elk01:2 ~]# curl 10.0.0.211:88
#docker已经映射本地88端口

filebeat模块

模块是filebeat内置的一些中间件日志监控方案,比如常见的nginx,tomcat,mysql,zookeeper等日志监控。

1
2
3
4
5
filebeat内置模块在 /etc/filebeat/modules.d/下。
被禁用的模块后缀带.disabled

#查看模块列表
[root@elk01:2 ~]# filebeat modules list

启禁用模块

1
2
3
[root@elk01:2 ~]# filebeat modules enable nginx tomcat

[root@elk01:2 ~]# filebeat modules disable tomcat

模块分析nginx访问日志

前提准备

1
2
3
4
5
6
7
8
1.防止索引冲突,删除所有索引和索引模式
2.还原nginx日志格式(如果之前你做过nginx输出格式为json格式的话就将nginx配置文件还原为原格式)
3.检查nginx是否启用,配置文件是否OK(nginx -t),启用nginx模块(filebeat modules enable nginx)
4.如果你的nginx日志文件不在默认的目录则修改实例nginx文件,如果默认目录则跳过
[root@elk01:2 ~]# vim /etc/filebeat/modules.d/nginx.yml
···#修改你的日志文件目录
var.paths: ["/yourpath/nginx/access.log*"]
···

编写filebeat的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@elk01:0 ~]# cat /etc/filebeat/10-nginx-modules.yaml 
# 配置filebeat的启用模块
filebeat.config.modules:
# 默认会去找filebeat安装目录下的"modules.d"所有以".yml"结尾的文件
path: ${path.config}/modules.d/*.yml
# 是否支持热加载
reload.enabled: true

output.elasticsearch:
hosts: ["http://10.0.0.211:9200","http://10.0.0.212:9200","http://10.0.0.213:9200"]
index: "filebeat-nginx-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "filebeat-nginx"
setup.template.pattern: "filebeat-nginx*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 5
index.number_of_replicas: 0

#启动filebeat实例
[root@elk01:1 ~]# filebeat -e -c /etc/filebeat/10-nginx-modules.yaml

image-20241004102923489

日后便可以在 菜单栏–>Discover里查询分析nginx日志 如下图

image-20241004103225591

统计网站日PV量

可以理解为 一个页面就是一条PV,filebeat是按行统计,nginx的每个访问记录都为一行,以计数方式统计为日PV

点击保存即可保存可视化库

image-20241004103908465

统计网站日UV

这个统计不太准确,获取的ip是日志里每行第一个的ip,这个ip其实是负载均衡的ip,如果想要获取每个用户真实ip,nginx配置文件需要设置获取用户真实ip才算是日UV量,保存uv库

image-20241004111335927

统计带宽

image-20241004112012078

image-20241004112552478

统计设备类型

image-20241004112842696

统计设备操作系统

image-20241004120352348

全球流量统计

image-20241004115735265

recording

创建仪表板

菜单栏–>Dashboard 新建仪表板,数据从前面保存的库中添加

刷新可显示在线实时数据

image-20241004121524063

filebeat的多行处理

filestream文件流也是采集文件的,log的替代

官网

multiline的count类型

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
[root@elk01:0 ~]# cat /etc/filebeat/11-filestream_multiline.yaml 
filebeat.inputs:
- type: filestream
paths:
- /tmp/student.info
parsers:
- multiline:
type: count
count_lines: 4
output.console:
pretty: true

#注释
# type指定类型,有效值为: pattern和count
# pattern: 基于正则匹配事件。
# count: 将几行数据作为一个事件
#count_lines: 将指定的行数合并为一个事件

#提示 :count类型这种,需要被收集的信息格式是有规律的
例如: count: 2 (数据都是4行4行的或N行N行的)
[root@elk01:0 ~]# cat /tmp/student.info
{
"name": "张三",
"hobby": ["学习","跑步"]
}
{
"name": "李四",
"hobby": ["学习","看书"]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 [root@elk01:0 ~]# filebeat -e -c /etc/filebeat/11-filestream_multiline-.yaml
},
"log": {
"offset": 384,
"file": {
"path": "/tmp/student.info"
},
"flags": [
"multiline"
]
},
"message": "{\n \"name\": \"张三\",\n \"hobby\": [\"学习\",\"跑步\"]\n}",
"input": {
"type": "filestream"
}
}
#将多行数据采集为一行,但必须是有规律的,采集的是上面文件每4行为一组数据

multiline的pattern类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@elk01:0 ~]# cat /etc/filebeat/12-filestream_multiline_pattern.yaml 
filebeat.inputs:
- type: filestream
paths:
- /tmp/student.info
parsers:
- multiline:
type: pattern
pattern: '^\{'
negate: true
match: after
output.console:
pretty: true

#注释
pattern: '^\{' 匹配以{开头的
negate: 匹配规则
match: 匹配规则 见下图

image-20241004212526358

filebeat采集tomcat日志

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
1.部署tomcat
[root@elk01:0 app]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.30/bin/apache-tomcat-10.1.30.tar.gz

2.解压安装tomcat(提前创建安装目录)
[root@elk01:0 app]# tar xf apache-tomcat-10.1.30.tar.gz -C /app
[root@elk01:0 app]# ln -s /app/apache-tomcat-10.1.30/ /app/tomcat

3.配置tomato的jdk环境,使用elasticsearch的jdk即可,查看java版本
[root@elk01:0 app]# /usr/share/elasticsearch/jdk/bin/java --version
openjdk 22.0.1 2024-04-16
OpenJDK Runtime Environment (build 22.0.1+8-16)
OpenJDK 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)

#配置环境变量
[root@elk01:0 app]# cat /etc/profile.d/jdk.sh
#!/bin/bash
export JAVA_HOME=/usr/share/elasticsearch/jdk
export PATH=$PATH:$JAVA_HOME/bin

#重新加载环境变量
[root@elk01:0 app]# source /etc/profile.d/jdk.sh
[root@elk01:0 app]# java --version
openjdk 22.0.1 2024-04-16
OpenJDK Runtime Environment (build 22.0.1+8-16)
OpenJDK 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)

4.启动tomcat
[root@elk01:0 app]# /app/tomcat/bin/startup.sh

编写filebeat实例 使用tomcat采集日志

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
37
1.启用tomcat模块
[root@elk01:0 app]# filebeat modules enable tomcat

2.修改tomcat模块里日志路径
[root@elk01:0 app]# vim /etc/filebeat/modules.d/tomcat.yml
···
## 默认是udp类型,有效值: udp,tcp,file
# 当类型为file时,下面定义的路径才会生效
var.input: file
var.paths:
- /app/tomcat/logs/localhost_access_log.*
···

3.编写filebeat实例
[root@elk01:0 app]# cat /etc/filebeat/13.modules_tomcat.yaml
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true

output:
elasticsearch:
hosts:
- "http://10.0.0.211:9200"
- "http://10.0.0.212:9200"
- "http://10.0.0.213:9200"
index: "modules-tomcat-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: "modules-tomcat"
setup.template.pattern: "modules-tomcat*"
setup.template.overwrite: false
setup.template.settings:
index.number_of_shards: 3
index.number_of_replicas: 0

#启动实例
[root@elk01:0 ~]# filebeat -e -c /etc/filebeat/13.modules_tomcat.yaml