51

Filebeat + Redis 管理 LOG日志实践

 6 years ago
source link: https://studygolang.com/articles/17480?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

引用 转载 请注明出处

某早上,领导怒吼声远远传来,空空的办公区放大吼声的“狰狞”程度。“xxxxxx ... ...重量级的日志管理工具不能用,xxxx不代表要自己造轮子。拥抱开源不只是口号,xxxx 要行动啊。... ...”

伴着少儿不宜哔哔哔声音,我开启了探索轻量级开源日志管理工具航程。Filebeat等一干开源日志管理软件进入我的视野。所有说:别人的愤怒时刻,也许是你发现新大陆开端。

之前提到的开源日志管理工具对比文章 ,本文适用于轻量级应用的日志管理。准确点说:如何使用Filebeat将java服务生成log采集到redis服务里。

Filebeat简介

Filebeat 是elastic公司 Beats平台 系列产品中的一个日志采集、入库、路由工具。官方提供功能列表:

B7Nrqeu.png!web

Filebeat introduction

简言之,Filebeat 简化日志采集流程完美接入数据库轻量级的开源产品轻量级 符合我们期望, 支持redis库 兼容我们当前服务,因此是我们的选择。

本文是一篇教程,分为三部分:安装、配置、运行。我们以这个顺序进行介绍。 因实施场景原因,Filebeat参数只涉及一部分。

关于版本说明

软件版本号:

  1. Filebeat 6.5 (发布版)
  2. Linux x86_64 x86_64 GNU/Linux(os版本)
  3. redis_version: 5.0.0 (redis使用单节点模式,对可用性要求高要采用集群或sentinel模式)

如何安装

Filebeat可安装在主流的OS上,也支持docker、k8s方式进行部署,是典型的“麻雀虽小五脏俱全”的工具。

下载传送门

linux下安装包是 gz 的压缩包。解压即安装:

tar xzvf filebeat-5.1.1-darwin-x86_64.tar.gz

rYrYfiv.png!web

安装目录一览

让我们分别介绍目录的功能:

  • data 存储Filebeat实例的uuid号,以及日志读取历史记录。

  • kibana 接入kibana时,其提供可视化配置功能

  • logs Filebeat 运行日志

  • module module.d 配置参数:用于快速启动功能

  • fields.yml Filebeat提供针对不同组件,采集的参数名称 类型等

  • filebeat 可执行文件

  • filebeat.reference.yml Filebeat支持的参数手册,所有支持配置参数都在这

  • filebeat.yml 启动Filebeat需要配置文件。后面我们会重点解析

如何配置

下面描述如何怎样配置,以及配置什么的问题。

  1. Filebeat如何配置?

    它提供三种配置方式:

    filebeat.yml
    
  2. Filebeat配置哪些参数?

    A.我们先说运行必须的、最小配置参数:

    • 配置输入数据类型(log-back生成的log)
filebeat.inputs:
        - type: log     #采集的数据格式 log
        enabled: true  #激活log采集功能
        paths: #采集路径
        - /var/log/*.log
        - /var/path2/*.log

注: 配置文件格式是yaml语言写成,一种置标语言类似json

  • 配置输出数据参数
output.redis:
         hosts: ["localhost"] #单机版 redis
         port: 6379  #port
         password: "my_password" #用户名和密码
         key: "filebeat" # filebeat是数据的key
         db: 0 #数据写入的库

以上配置实现日志导入Redis的基本配置了。Filebeat又有哪些特殊参数?如何实现特色的需求哪?这些在其它配置中一一说明。

B. 其它配置说明

Filebeat输出数据的格式是 json 。类似这样:

{

"@timestamp": "2018-12-18T08:33:01.604Z", #采集时间 UTC

"@metadata": {....}, #描述beat的信息

"message": "日志内容", ### 数据主体

"source": "/var/log/run.log", #数据来源

"prospector": { "type": "log"},

"input": {"type": "log" }, #数据类型

"beat": {.... },

"host": {.... }, #系统信息 ip 系统版本 名称等

"offset": 244 #偏移

}

输出数据格式除包含数据主体 message 外,还包括部分附加信息。对于不需要信息,如何进行过滤和转换哪?这涉及Filebeat不算强大的数据过滤功能。

  • Filebeat数据过滤

    • 过滤内容

      exclude_lines: ['^INFO'] #exclude_lines关键字排除包含内容INFO
       include_lines: ['^ERR', '^WARN']
       exclude_files: ['.gz/pre>] #排查压缩文件
       multiline.pattern: ^\[ #内容拼接,用户异常堆栈输出多行 拼接成一条
       过滤内容和内容拼接,需要日志的格式是json,否则不生效
  • 过滤json中输出字段

Filebeat提供类似管道功能的处理器(processors),来指定生成字段,如下形式。

event -> filter1 -> event1 -> filter2 ->event2 ...

每次数据采集是一个事件,每个filter是一个处理器。让我们自己定义一个处理器,如下:

processors:
            - drop_fields:
            when:
            has_fields:  ['source']
            fields: ["input_type"]

功能:过滤器功能删除字段(drop_fields),条件是当存在source字段时,删除input_type字段。

更多Filebeat处理器和过滤器: 链接

  • 新增字段和列
fields: #字段的类型可以是不同类型或者 list,也可以自定义
             level: debug
             review: 1
             selfDefine: xxxxx

官方文档提示fields 可以用来过滤 json文件,但我 尝试没有成功

  • Redis Key 如何设计

Filebeat提供有限度自定义redis key的功能。如果输入数据是json格式,可以提取Json的字段作为redis的key。我们的key的定义是数据入库时间。配置如下:

when.contains: 
            message: "INFO"
            key: "debug_list"  # send to debug_list if `message` field contains DEBUG

令人遗憾是 :时间不是北京时间,而是UTC时间。即不支持修改,且时间输出有错误。

  • 日志文件扫描参数
max_bytes: 10485760  #10M 缓存层,一次采集数据超出10M 数据会丢弃
   harvester_buffer_size: 16384 #收割器大小
   scan_frequency: 10s #文件扫描频率
   harvester_limit: 0 #采集器数量, 0 表示无限制
   close_inactive: 5m #5m 无活动,关闭采集器

使用配置过程也表明:Filebeat易于配置和使用、过滤和转换功能稍显单一的组件。和logstash相比,各有侧重,但对于大多数采集层而言已然够用。

如何启动

./filebeat -e #简单到让人发指启动命令

后记和求助

Filebeat+ redis实践过程完毕,我们发现作为配置非常简单。甚至不需要关注输入段内容、以及输出端的redis,这才是中间件应有的样子。

Filebeat不足输出端支持的数据库太少,社区也没有计划支持更多的数据库。

最近在看golang,萌生了写一个输出到postgres插件的想法。

如果开发输出到postgres插件,有什么思路,希望各位路过的大侠指点一二。感激不尽。。


Recommend

  • 164

    Elasticsearch分布式搜索和分析引擎。具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。 Logstash日志收集器。搜集各种数据源,并对数据进行过滤、分析、格式化等操作,然后存储到 Elasticsear...

  • 70

    海量日志下的日志架构优化:filebeat+logstash+kafka+ELK

  • 49

    ELK之-redis(错误,警告)日志使用filebeat收集

  • 38
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    Filebeat 收集日志的那些事儿

    女主宣言 最近因为云原生日志收集的需要,我们打算使用Filebeat作为容器日志收集工具,并对其进行二次开发,因此笔者将谈谈 Filebeat 收集日志的那些事儿。本文不涉及过具体的源码分析,希望通过阅读您可以了解filebeat的基本使用方法和原...

  • 17

    前面我们了解了elk集群中的logstash的用法,使用logstash处理日志挺好的,但是有一个缺陷,就是太慢了;当然logstash慢的原因是它依赖jruby虚拟机,jruby虚拟机就是用java语言开发的ruby虚拟机,本身java程序运行在jvm上就已经很慢了,而lo...

  • 7

    本文实战记录使用Filebeat、Kibana、Elasticsearch等软件搭建搜集分析Nginx日志的系统。Filebeat主要负责将Nginx日志数据作为数据源输送至Elasticsearch。

  • 3
    • www.cyhone.com 3 years ago
    • Cache

    FileBeat-Log 相关配置指南

    本文主要介绍 Filebeat 7.5 版本中 Log 相关的各个配置项的含义以及其应用场景。 一般情况下,我们使用 log input 的方式如下,只需要指定一系列 paths 即可。 filebeat.inputs: - type: log paths: - /var/log/messages - /va...

  • 4

    ELK+Filebeat+Kafka分布式日志管理平台搭建 ELK缺点:ELK架构,并且Spring Boot应用使用 logstash-logback-encoder 直接发送给 Logstash,缺点就是Logstash是重量级日志收集server,占用cpu资源高且内存占用比较高 ELFK...

  • 5

    如何在 Filebeat 端进行日志处理如何在 _ 2020年8月19日 下午 8.4k 字 26 分钟目前某项目组日志需要做切割处理,针对日志信息进行分割并提取 k/v 放入 es 中方便查询。这种需求在传统 ELK...

  • 7

    Kubernetes使用filebeat Multiline自定义收集日志 2021-11-11 2 分钟阅读 我们介绍了如何在 kubernetes 环境中使用 filebeat sidecar 方式收集日志 使用的是 filebeat 的 moudle 模块,但凡是常用的软件,基本都有对...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK