社区编辑申请
注册/登录
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
数据库 Redis
在redis中显示的效果是都会输出到key值nginx_log对应的列表中,根据key值是没法进行区分的,只能根据key值列表中每一行数据中的log_source或者自己定义的属性来判断该行是哪一个应用的日志。

1.Filebeat.yml配置

filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access.log
exclude_files: ['.gz$','INFO']
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
tags: ["nginx-log-messages"]
fields:
log_source: messages
fields_under_root: true


output.redis:
hosts: ["192.168.0.111:6379"]
key: nginx_log
password: nginxredis
db: 0

参数说明:

  fields:
log_source: messages
fields_under_root: true

使用fields表示在filebeat收集的日志中多增加一个字段log_source,其值是messages,用来在logstash的output输出到elasticsearch中判断日志的来源,从而建立相应的索引 若fields_under_root设置为true,表示上面新增的字段是顶级参数。

顶级字段在output输出到elasticsearch中的使用如下:

[root@es-master21 logstash]# vim config/logstash.conf
input {
redis {
data_type => "list"
host => "192.168.0.111"
db => "0"
port => "6379"
key => "nginx_log"
password => "nginxredis"
}
}

output {
# 根据redis键 messages_secure 对应的列表值中,每一行数据的其中一个参数来判断日志来源
if [log_source] == 'messages' { # 注意判断条件的写法
elasticsearch {
hosts => ["192.168.0.111:9200"]
index => "nginx-message-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "elastic123"
}
}

#或者也可以根据tags判断
if "nginx-log-messages" in [tags] {
elasticsearch {
hosts => [""192.168.0.111:9200"]
index => "nginx-message-%{+YYYY.MM.dd}"
}
}

}

2.多个应用的日志都输出到redis

filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access.log
tags: ["nginx-log-access"]
fields:
log_source: access
fields_under_root: true

- type: log
enabled: true
paths:
- /usr/local/nginx/logs/error.log
tags: ["nginx-log-error"]
fields:
log_source: error
fields_under_root: true

output.redis:
hosts: ["192.168.0.111:6379"]
key: nginx_log
password: nginxredis
db: 0

 在redis中显示的效果是都会输出到key值nginx_log对应的列表中,根据key值是没法进行区分的,只能根据key值列表中每一行数据中的log_source或者自己定义的属性来判断该行是哪一个应用的日志。

3.不同的应用日志使用不同的rediskey值

使用output.redis中的keys值,官方例子:

output.redis:
hosts: ["localhost"]
key: "default_list"
keys:
- key: "error_list" # send to info_list if `message` field contains INFO
when.contains:
message: "error"
- key: "debug_list" # send to debug_list if `message` field contains DEBUG
when.contains:
message: "DEBUG"
- key: "%{[fields.list]}"

说明:默认的key值是default_list,keys的值是动态分配创建的,当redis接收到的日志中message字段的值包含有error字段,则创建key为error_list,当包含有DEBUG字段,则创建key为debug_list。

问题的解决方法是在每个应用的输出日志中新增一个能够区分这个日志的值,然后再在keys中设置,这样一来就能够把不同应用的日志输出到不同的redis的key中。

责任编辑:武晓燕 来源: 非著名运维
相关推荐

2022-04-12 11:15:31

Redis消息队列数据库

2022-03-25 10:38:40

索引MySQL数据库

2022-04-08 08:40:36

Nginx日志服务器

2022-03-22 10:24:48

Linux开源Elasticsea

2022-03-01 10:45:38

Redis服务器数据

2022-04-02 14:02:23

WindowsRedis 6.xredis

2022-04-21 08:09:18

Spark字段血缘Spark SQL

2022-03-31 13:58:37

分布式SpringRedis

2022-04-12 10:36:52

数据库PostgreSQLMongoDB

2022-04-25 11:26:16

开发SpringBoot

2022-04-22 14:41:12

美团慢查询数据库

2022-03-19 12:16:49

Redis高并发系统集群部署

2022-02-25 08:55:19

BitMapRedis面试题

2022-04-26 09:44:03

group byExtraMySQL

2022-04-24 14:11:26

病毒僵尸网络网络攻击

2022-04-08 09:54:43

2022-02-28 08:55:31

数据库MySQL索引

2022-04-08 14:47:11

ArkUI列表字母索引鸿蒙

2022-04-14 09:00:22

开源数据存储Ignite

2022-03-22 15:20:32

微信全文搜索

同话题下的热门内容

讲讲Redis各个数据类型的底层数据结构

编辑推荐

几款开源的图形化Redis客户端管理软件推荐Redis内存淘汰策略,看这一篇就够了!Redis 的默认端口为啥是 6379 ?Redis集群的5种使用方式,各自优缺点分析Redis为什么这么快?一文深入了解Redis内存模型!
我收藏的内容
点赞
收藏

51CTO技术栈公众号