docker搭建简单elk日志系统4(filebeat配置文件本地调试)

docker搭建简单elk日志系统1
docker搭建简单elk日志系统2
docker搭建简单elk日志系统3
如有疑问可以去上面文档找相关内容
filebeat收集日志
1.本地下载filebeat,下载后解压缩
windows版filebeat-8.3.3官方下载地址

在这里插入图片描述
2.创建一个最简单的filebeat.yml配置文件filebeat-test.yml
在这里插入图片描述
4.编辑filebeat-test.yml

filebeat.inputs:
  # 标准输入
- type: stdin
  enabled: true
 
# 标准输出
output.console:
  pretty: true
  enable: true

在这里插入图片描述
5.进入filebeat目录打开cmd或powershell窗口
执行

.\filebeat.exe -e -c .\filebeat-test.yml

-e 日志发送到标准错误输出而不是syslog文件
-c 指定配置文件启动
在这里插入图片描述
6.测试
直接在控制台输入一些测试内容
在这里插入图片描述
filebeat收集到一行文本返回的是一个json格式的数据
输入为

filebeat日志测试

输出为

{
  "@timestamp": "2023-03-19T12:28:36.480Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.3.3"
  },
  "host": {
    "name": "DESKTOP-RKE1N90"
  },
  "agent": {
    "version": "8.3.3",
    "ephemeral_id": "22bce021-88d5-4133-a3b6-672bf142c9cf",
    "id": "6dd25f62-cd5e-4c66-b790-d90d25c70e06",
    "name": "DESKTOP-RKE1N90",
    "type": "filebeat"
  },
  "log": {
    "offset": 0,
    "file": {
      "path": ""
    }
  },
  "message": "filebeat日志测试",
  "input": {
    "type": "stdin"
  },
  "ecs": {
    "version": "8.0.0"
  }
}

其中收集到的文本内容在根节点的message字段中,filebeat输出的json数据不仅包含收集的内容,还默认会收集一些其他信息,如主机名、filebeat版本、收集的时间、收集内容来源等等
7.将filebeat-test.yml配置文件的输入改成扫描本地java项目日志文件

filebeat.inputs:
- type: filestream

  # Unique ID among all inputs, an ID is required.
  id: my-filestream-id
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - E:\project\db-server\work\hd.log

在这里插入图片描述
在这里插入图片描述
重新启动filebeat

.\filebeat.exe -e -c .\filebeat-test.yml

在这里插入图片描述
8.启动本地java应用
java应用控制台日志输出:
在这里插入图片描述
filebeat控制台日志输出:
在这里插入图片描述
在这里插入图片描述
可以看到java应用没一行日志输出被filebeat监听到会在filebeat中形成一个json数据
其中日志的内容在message字段上
9.java异常日志收集问题
filebeat收集日志默认是通过行来收集的,但是java应用程序如果出现报错会在日志中打印出栈信息,就会导致一条日志出现多行内容。
示例如下:
java应用控制台打印了一条错误日志
在这里插入图片描述
filebeat收集到了多条数据
在这里插入图片描述
在这里插入图片描述
这种情况在大部分场景下是不符合我们的期望的,我们期望每一条数据经过filebeat收集指挥形成一个json数据
9.java异常日志收集问题解决
修改配置文件为:

#filebeat.inputs:
#  # 标准输入
#- type: stdin
#  enabled: true
 
 
filebeat.inputs:
- type: filestream

  # Unique ID among all inputs, an ID is required.
  id: my-filestream-id
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - E:\project\db-server\work\hd.log
  parsers:
    - multiline:
        type: pattern
        pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2} # 匹配以"年-月-日"时间字符串开始的行
        negate: true # 否定上面的匹配;即匹配所有不以"年-月-日"时间字符串开始的行
        match: after # 把匹配的行组合到上一个事件中;即将匹配的不以"年-月-日"时间字符串开始的行组合到上一条以"年-月-日"时间字符串开始的行上
 
# 标准输出
output.console:
  pretty: true
  enable: true

在这里插入图片描述
重新启动filebeat

.\filebeat.exe -e -c .\filebeat-test.yml

在这里插入图片描述

启动java应用,生成错误日志
在这里插入图片描述
filebeat收集错误日志(此时已经将多行错误日志在filebeat中收集成了一个文档)
在这里插入图片描述
10.filebeat输出到logstash
登录服务器查看logstahs输入输出配置
在这里插入图片描述
logstash默认监听5044端口的数据作为输入;输出到标准输出流中
修改filebeat配置文件,使其输出到logstash

#filebeat.inputs:
#  # 标准输入
#- type: stdin
#  enabled: true
 
 
filebeat.inputs:
- type: filestream

  # Unique ID among all inputs, an ID is required.
  id: my-filestream-id
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - E:\project\db-server\work\hd.log
  parsers:
    - multiline:
        type: pattern
        pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2} # 匹配以"年-月-日"时间字符串开始的行
        negate: true # 否定上面的匹配;即匹配所有不以"年-月-日"时间字符串开始的行
        match: after # 把匹配的行组合到上一个事件中;即将匹配的不以"年-月-日"时间字符串开始的行组合到上一条以"年-月-日"时间字符串开始的行上
 
# 标准输出
#output.console:
#  pretty: true
#  enable: true

# 输出到logstash
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.182.128:5044"]

在这里插入图片描述

11.重启filebeat

.\filebeat.exe -e -c .\filebeat-test.yml

java应用产生日志
在这里插入图片描述
服务器上查看logstash日志

docker logs -f logstash

logstash收到了来自filebeat的日志信息
在这里插入图片描述
12.配置自定义化字段
filebeat收集日志的时候还可以添加一些自定义字段添加到json数据中;这些自定义字段在有些时候会很有用,比如想将一个应用在多个环境下的日志存到同一个elasticsearch中,但又希望不同环境的日志生成不同的索引,就可以在收集日志的时候添加对应的字段,然后传到logstahs,在logstash中根据这些自定义字段往不同的索引中存
例如:可以添加如下三个自定义字段
application;代表索引属于那个应用(gatewat,网关服务/user用户服务/auth认证服务等等)
env;环境(dev/sit/uat/prod等等)
log_type;日志类型(access日志/gc日志/普通日志)
配置文件中添加自定义字段位置如下
在这里插入图片描述
重启filebeat,java后台产生日志,查看logstash日志
可以看到自定义字段已经生效并且正确被logstash所接受,后续就可以在logstah中根据这些自定义字段设置不同的索引
在这里插入图片描述

到这里,一个简单的收集java日志的filebeat配置文件就完成了
完整配置内容为

#filebeat.inputs:
#  # 标准输入
#- type: stdin
#  enabled: true
 
 
filebeat.inputs:
- type: filestream

  # Unique ID among all inputs, an ID is required.
  id: my-filestream-id
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
    - E:\project\db-server\work\hd.log
  parsers:
    - multiline:
        type: pattern
        pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2} # 匹配以"年-月-日"时间字符串开始的行
        negate: true # 否定上面的匹配;即匹配所有不以"年-月-日"时间字符串开始的行
        match: after # 把匹配的行组合到上一个事件中;即将匹配的不以"年-月-日"时间字符串开始的行组合到上一条以"年-月-日"时间字符串开始的行上
  fields: 
    application: test
    env: dev
    log_type: normal
# 标准输出
#output.console:
#  pretty: true
#  enable: true

# 输出到logstash
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.182.128:5044"]

下一篇
docker搭建简单elk日志系统5

猜你喜欢

转载自blog.csdn.net/weixin_44835704/article/details/129612302
今日推荐