数据采集--Filebeat(九)

一、Filebeat简介
  filebeat 是基于原先 logstash-forwarder 的源码改造出来的。换句话说:filebeat 就是新版的 logstash-forwarder,也会是 Elastic Stack 在 shipper 端的第一选择。Filebeat是本地文件的日志数据采集器。 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或Logstash进行索引、kafka 等。


Filebeat

Filebeat
官网:https://www.elastic.co/cn/products/beats/filebeat
文档:https://elkguide.elasticsearch.cn/beats/file.html

Filebeat由两个主要组件组成:

prospectors 和 harvesters。 这些组件一起工作来尾随文件并将事件数据发送到您指定的输出。

  1. harvesters
    harvesters负责读取单个文件的内容。 harvesters逐行读取每个文件,并将内容发送到输出。 每个文件启动一台harvesters。 harvesters负责打开和关闭文件,这意味着在harvesters运行时文件描述符保持打开状态。 如果在收获文件时删除或重命名文件,Filebeat将继续读取文件。 这有副作用,在harvesters关闭之前,磁盘上的空间被保留。 默认情况下,Filebeat保持文件打开,直到达到close_inactive的设置(close_inactive默认为5分钟,即5分钟之内,没有最新的日志信息产生则关闭文件句柄)。
    关闭harvester有以下情况:

1.如果在harvester还在读取文件时文件被删除,那么文件处理程序关闭,释放基础资源。
2.只有在scan_frequency过后,文件的采集才会重新开始。(scan_frequency参数默认为10秒,每隔10秒prospector检查目录中日志文件的变化情况)
3.如果在harvester关闭的情况下移动或移除文件,则不会继续收集文件。

  1. prospector
    prospector负责管理harvesters并找到所有的读取源。如果输入类型是日志,则prospector会查找驱动器上与所定义的全局路径匹配的所有文件,并为每个文件启动一个harvesters。 每个prospector都在自己的实例中运行。
    以下示例将Filebeat配置为从与指定的glob模式匹配的所有日志文件中获取行:
filebeat.prospectors:
    - type: log
      paths:
        - /var/log/*.log
        - /var/path2/*.log

Filebeat目前支持两种prospector类型:log和stdin。 每个prospector类型可以定义多次。
Filebeat的prospectors只能读取本地文件。 没有功能连接到远程主机读取存储的文件或日志。

Filebeat如何保持文件的状态?
  Filebeat保持每个文件的状态,并经常刷新注册表文件中的磁盘状态。状态用于记住收割机正在读取的最后偏移量,并确保发送所有日志行。

# 状态信息记录在/usr/local/filebeat-6.1.1/data目录中的registry文件
[root@vl010001134060 data]# pwd
/usr/local/filebeat-6.1.1/data
[root@vl010001134060 data]# ls
meta.json  registry

如果输出(如Elasticsearch或Logstash)无法访问,Filebeat将跟踪发送的最后一行,并在输出再次可用时继续读取文件。当Filebeat正在运行时,每个prospectors的状态信息也被保存在内存中。当Filebeat重新启动时,来自注册表文件的数据被用来重建状态,并且Filebeat继续在最后一个已知位置的每个harvester。
  每个prospectors为每个找到的文件保留一个状态。由于文件可以被重命名或移动,文件名和路径不足以识别文件。对于每个文件,Filebeat存储唯一标识符以检测文件是否先前被收集。
  如果您的使用案例涉及每天创建大量新文件,您可能会发现注册表文件会变得太大。(使用clean_inactive、clean_removed参数来调整)

Filebeat如何确保至少一次交付?
  Filebeat保证事件至少被传递到配置的输出一次,没有数据丢失。 Filebeat能够实现此行为,因为它将每个事件的传递状态存储在注册表文件中。
  在定义的输出被阻止并且没有确认所有事件的情况下,Filebeat会一直尝试发送事件,直到输出确认已经收到事件。
如果Filebeat在发送事件的过程中关闭,则不会等待输出在关闭之前确认所有事件。 任何发送到输出的事件,在Filebeat关闭之前没有被确认,在重新启动Filebeat时会再次发送。 这可确保每个事件至少发送一次,但最终可能会将重复事件发送到输出。 您可以通过设置shutdown_timeout选项来配置Filebeat以在关闭之前等待特定时间。(shutdown_timeout选项默认是关闭状态,可以设置时间,关闭时等待多长时间后再关闭)。
  但是如果日志写入磁盘的速度超过了Filebeat读取日志的速度,当日志删除或者日志被覆盖时,则可能会丢失数据。
例如:
  在Linux文件系统上,Filebeat使用inode和设备来识别文件。从磁盘中删除文件时,可将inode分配给新文件。在涉及文件旋转的使用情况下,如果旧文件被删除并且之后立即创建新文件,则新文件可能与删除的文件具有完全相同的inode。在这种情况下,Filebeat假定新文件与旧文件相同,并尝试在旧位置继续读取,这是不正确的。
  默认状态不会从注册表文件中删除。要解决inode重用问题,我们建议您使用clean_ *选项(特别是clean_inactive)来删除非活动文件的状态。例如,如果您的文件每24小时轮换一次,并且轮换的文件不再更新,则可以将ignore_older设置为48小时,将clean_inactive设置为72小时。
  您可以使用clean_removed从磁盘中删除的文件。请注意,clean_removed会在扫描期间无法找到文件时清除注册表中的文件状态。如果该文件稍后再次显示,则将从头开始重新发送。

二、下载安装(手动安装)

下载地址:https://www.elastic.co/guide/en/beats/filebeat/6.4/setup-repositories.html

filebeat

  1. 下载
# 6.4.3版本下载
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.3-linux-x86_64.tar.gz

# 解压
[root@localhost ~]# tar -zxvf filebeat-6.4.3-linux-x86_64.tar.gz -C /usr/local

  1. 配置
    同yum。
  2. 启动测试
nohup  ./bin/filebeat &  --在后台运行

三、(YUM)安装(参照官网)

  1. 导入key
[root@localhost ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

  1. 创建repo 文件
    /etc/yum.repos.d/目录存放的就是默认的repo文件。
    执行yum时,它只会读取yum.repo.d下这个目录下的所有以.repo结尾的文件。
# 切换目录
[root@localhost ~]# cd /etc/yum.repos.d/
# 创建文件
[root@localhost yum.repos.d]# vi elastic.repo
# 内容
[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  1. 安装
# 安装filebeat
[root@localhost yum.repos.d]# yum install filebeat -y
# 查看安装内容
[root@localhost ~]# rpm -ql filebeat-6.8.3
/etc/filebeat/filebeat.yml                   => 配置文件
/etc/init.d/filebeat                              => 启动脚本
/lib/systemd/system/filebeat.service         => systemctl也可以启动
/usr/bin/filebeat                            => filebeat命令
# 启动filebeat
[root@localhost ~]# systemctl start filebeat
# 查看服务
[root@localhost ~]# ps -ef|grep filebeat
root      18018      1  0 10:39 ?        00:00:00 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat
root      18029  17568  0 10:39 pts/0    00:00:00 grep --color=auto filebeat
# 停止服务
[root@localhost ~]# systemctl stop filebeat

# 设置开机启动
[root@localhost ~]# chkconfig --add filebeat

  1. 配置
# 配置文件路径:/etc/filebeat/filebeat.yml
[root@localhost ~]# vi /etc/filebeat/filebeat.yml
# 内容
# 1. 输入
filebeat.inputs:
- type: log
  # 更改为true以启用此输入配置。
  enabled: true
  # 应该爬网和获取的路径。基于全局的路径。
  paths:
    - /var/log/*.log
  # fields表示自定义字段
  #fields:
  #  level: debug
  #  review: 1
  ## 多行合并参数,正则表达式
  #multiline.pattern: ^\[
 ## true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
 #multiline.negate: true
 ## after 或 before,合并到上一行的末尾或开头
 #multiline.match: after

# 2. 搜索引擎
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.77.132:9200"]
 # 默认情况下,Filebeat写事件到名为filebeat-6.4.0-yyyy.MM.dd的索引,其中yyyy.MM.dd是事件被索引的日期。
 # 为了用一个不同的名字,你可以在Elasticsearch输出中设置index选项。
  index: "%{[fields.log_type]}-%{[beat.version]}-%{+yyyy.MM.dd}"
  # 使ILM(测试版)能够使用索引生命周期管理而不是每日索引。
  #ilm.enabled: false

  # 任择议定书和基本身份验证凭据。
  #protocol: "https"
  username: "elastic"
  password: "xW9dqAxThD5U4ShQV1JT"

# 3. Kibana
setup.kibana:
   host: "192.168.77.132:5601"
   # username: "my_kibana_user"  
   # password: "{pwd}"
# 4. Logstash
#output.logstash:
  # Logstash主机
  #hosts: ["192.168.77.132:5044"]

主要配置项说明:
enabled:true 代表开启这个配置节
paths: 监控指定目录下的文件,支持模糊搜索
fields: 增加fields额外字段,本例在fields下面增加了app_id、log_type字段
multiline 多行日志监控,下面配置的意思是:不以时间格式开头的行都合并到上一行的末尾(正则写的不好,忽略忽略)
pattern:正则表达式
negate:true 或 & false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
match:after 或 before,合并到上一行的末尾或开头
output.elasticsearch 配置host指定搜索引擎地址

四、启动测试

# 1. 启动es 2. 启动kiaba
# 启动filebeat
[root@localhost kibana-6.4.3-linux-x86_64]# systemctl start filebeat

查看数据

五、采集SpringBoot日志

  1. 构建日志(定时输出日志)
@SpringBootApplication
@Slf4j
public class GoodsApplication {
    Random random=new Random(10000);
    public static void main(String[] args) {
        SpringApplication.run(GoodsApplication.class, args);
        new  GoodsApplication().initTask();
    }
    private void initTask(){
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                log.info("seed:"+random.nextInt(999999));
            }
        },100,100, TimeUnit.MILLISECONDS);
    }
}
  1. 然后在部署了filebeat的机器上部署该应用,应用的输出文件为/var/log/goods-service.log,应用启动命令如下:
[root@localhost ~]# nohup java -jar  goods.1.0.0.jar > /var/log/goods-service.log 2>&1  &1
  1. 日志路径图


    日志路径图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容