前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引

Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引

作者头像
非著名运维
发布2022-06-22 16:32:26
1.1K0
发布2022-06-22 16:32:26
举报
文章被收录于专栏:非著名运维

1.Filebeat.yml配置

代码语言:javascript
复制
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

参数说明

代码语言:javascript
复制
  fields:
    log_source: messages
  fields_under_root: true

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

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

代码语言:javascript
复制
[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

代码语言:javascript
复制
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值,官方例子

代码语言:javascript
复制
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-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Filebeat.yml配置
  • 2.多个应用的日志都输出到redis
  • 3.不同的应用日志使用不同的rediskey值
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档