beat

filebeat

介绍

​ filebeat中message要么是一段字符串,要么在日志生成的时候拼接成json然后在filebeat中指定为json。但是大部分系统日志无法去修改日志格式,filebeat则无法通过正则去匹配出对应的field,这时需要结合logstash的grok来过滤,所以filebeat只负责在服务器上收索转发日志数据,过滤功能则交给logstash来处理。

​ Filebeat更加的轻量级,Logstash占用更多的系统资源,如果在每个服务器上部署Logstash,有时候会影响到业务服务,导致服务响应缓慢;

​ Filebeat能够记录文件状态,文件状态记录在文件中(~FILEBEAT_HOME/data/registry)。此状态可以记住harvesters 收集文件的偏移量,重启后prospectors 能知道每个日志文件的记录状态再进行收集文件;

​ Filebeat保证至少有一次输出,因为Filebeat将每个事件的传递状态保存在文件中。在没有得到接收方确认时,会尝试一直发送,直到得到回应。

beat6.0之前可以配置多个输出。


配置文件及说明

filebeat.yml

filebeat.inputs:
- type: log
  paths:  # 这里是容器内的path
      - /var/lib/docker/containers/*/*.log

  json.keys_under_root: true # 因为docker使用的log driver是json-file,因此采集到的日志格式是json格式,设置为true之后,filebeat会将日志进行json_decode处理
  json.overwrite_keys: true
  json.add_error_key: true #如果启用此设置,则在出现JSON解组错误或配置中定义了message_key但无法使用的情况下,Filebeat将添加“error.message”和“error.type:json”键。
  json.message_key: log #一个可选的配置设置,用于指定应用行筛选和多行设置的JSON密钥。 如果指定,键必须位于JSON对象的顶层,且与键关联的值必须是字符串,否则不会发生过滤或多行聚合。
  tail_files: true #每次从尾部开始检测

  multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}' #合并错误日志 
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s

processors:
  - drop_fields:
        fields: ["prospector","source","input", "beat", "offset","tags","host"]
  - decode_json_fields:
        fields: ['message'] #要进行解析的字段
        target: "" #json内容解析到指定的字段,如果为空(“”),则解析到顶级结构下
        overwrite_keys: true #如果解析出的json结构中某个字段在原始的event(在filebeat中传输的一条数据为一个event)中也存在,是否覆盖event中该字段的值,默认值:false
        #process_array: false #数组是否解码,默认值:false
        #max_depth: 1 #解码深度,默认值:1

#output.file:     #输出到文件
#  path: "/tmp"
#  filename: "filebeat_test.txt" 
output:
  logstash:  # 我这里是输出到logstash
     hosts: ["logstash:5044"] # 
     
  • json.message_key 根据具体设置的key,对此内容进行json化,但解析后,保存日志完整内容的message字段(也即完整的json串)消失了,解决方法加入decode_json_fields

  • @version,@timestamp等filebeat自带字段在脚本里无法drop_fields,具体删除可在logstash里进行处理

  • scan_frequency: 50 #扫描间隔,单位为秒;设置太小会引起filebeat频繁扫描文件,导致cpu占用百分比过高

  • filebeat输入设置

    #============== Filebeat prospectors ===========
    filebeat.inputs:   # 6.3以前是 filebeat.prospectors:
    - type: log        # 默认为log  。6.0以前配置是 - input_type: log
    
  • filebeat 探测器读取日志行数文件位于 /usr/share/filebeat/data/registry(6x版本与7x不同,7x改路径为文件夹,6x为文件),filebeat服务运行请设置管理员权限。

Filebeat 用处理器(processors)实现了类似 Logstash 中 filter 的功能

常用的 processors:

  • add_cloud_metadata:添加云服务器的 meta 信息;
  • add_locale:添加本地时区;
  • decode_json_fields:解析并处理包含 Json 字符串的字段;
  • drop_event:丢弃符合条件的消息事件;
  • drop_fields:删除符合条件的字段;
  • include_fields:选择符合条件的字段;
  • rename:字段重命名;
  • add_kubernetes_metadata:添加 k8s 的 meta 信息;
  • add_docker_metadata:添加容器的 meta 信息;
  • add_host_metadata:添加操作系统的 meta 信息;
  • dissect:类似与 gork 的正则匹配字段的功能;
  • dns:配置 filebeat 独立的 dns 解析方式;
  • add_process_metadata:添加进程的元信息。

metricbeat

metricbeat可以监控服务器的CPU使用率、内存使用情况、线程数等机器物理性能,类似于Windows的资源管理器功能。而且内部自带docker,nginx,mysql,redis等监控模块方便使用。

metricbeat.yml

metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

#output.file:
#  path: '/tmp'
#  filename: 'test'
output.elasticsearch:
  #hosts: ['127.0.0.1:9200'] 
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
setup.kibana:
  host: "11.23.254.120:5601"
setup.dashboards.enabled: true #设置metricbeat自带模板,导入kibana仪表盘


  • metricbeat modules enable xxx.yml.disabled 激活相关配置,其实直接改后缀名也可
  • metricbeat.reference.yml 官方demo配置文档

docker启动脚本

#!/bin/bash
docker service rm metricbeat
docker service create \
--name metricbeat \
-u root \
--network wushan \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source="$(which docker)",target="$(which docker)" \
--mount type=bind,source=/usr/lib64/libltdl.so.7,target=/usr/lib64/libltdl.so.7 \
--mount type=bind,source="$(pwd)"/config/metricbeat.yml,target=/usr/share/metricbeat/metricbeat.yml \
--mount type=bind,source="$(pwd)"/modules.d,target=/usr/share/metricbeat/modules.d \
--replicas 3 \
docker.elastic.co/beats/metricbeat:6.7.2

  • metricbeat作为docker内部容器,要获取docker的相关运行信息必须实现以下两个绑定

    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock
    --mount type=bind,source="(which docker)"

  • 必须赋予metricbeat服务管理员权限

    -u root


其他说明

在具有POSIX文件权限的系统上,所有Beats配置文件都受到所有权和文件权限检查。 这些检查的目的是防止未经授权的用户提供或修改由Beat运行的配置。 配置文件的所有者必须是root用户或执行Beat进程的用户。 每个文件的权限必须禁止所有者以外的任何人写入。

​ 当通过RPM或DEB软件包安装时,/etc/{beatname}/{beatname}.yml中的配置文件将具有正确的所有者和权限。 该文件由root拥有,文件权限为0644(-rw-r - r--)。

​ 如果配置文件未能通过这些检查,可能会遇到以下错误:

Exiting: error loading config file: config file ("{beatname}.yml") must be owned by the beat user (uid=501) or root

​ 若要更正此问题,可以使用chown root {beatname} .yml或chown 501 {beatname} .yml来更改配置文件的所有者。

Exiting: error loading config file: config file ("{beatname}.yml") can only be writable by the owner but the permissions are "-rw-rw-r--" (to fix the permissions use: 'chmod go-w /etc/{beatname}/{beatname}.yml')

​ 要解决此问题,请使用chmod go-w /etc/{beatname}/{beatname}.yml删除除所有者以外的任何人的写入权限。其他配置文件(如modules.d目录中的文件)受到相同的所有权和文件权限检查。

你可能感兴趣的:(beat)