Filebeat

Filebeat

1. Filebeat基本介绍

1.1 Filebeat介绍——官网传送门

filebeat是用于“转发”和“集中日志数据”的“轻量型数据采集器”。Filebeat监视您指定的日志文件路径,收集日志事件并将数据转发到Elasticserach或Logstash、Redis等。

图1 filebeat.png
1.2 Filebeat主要组件

Filebeat主要包含两个组件:输入和收割机,这些组件协同工作将文件尾部最新事件数据发送到指定的输出

  • 输入(input):输入负责管理收割机从哪个路径查找所有可读取的资源
  • 收割机(Harvester):负责逐行读取单个文件的内容,然后将内容发送到输出。
1.3 Filebeat工作流程

当filebeat启动后,filebeat通过input读取指定的日志路径然后为该日志启动一个收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到指定的地点。

图2 filebeat工作流程.png
1.4 Filebeat配置
图3 filebeat配置.png

2. Filebeat基本使用

1.安装及使用

#1. 安装filebeat
[root@web01 ~]# rpm -ivh filebeat-7.4.0-x86_64.rpm
#启动
systemctl enable filebeat
systemctl start filebeat

#2. 进到/etc/filebeat,编辑配置文件
[root@web01 ~]# vim test.yml
filebeat.inputs:
- type: stdin     #标准输入
  enabled: true   #启用
output.console:   #标准输出
  pretty: true
  enable: true
#测试启动
filebeat -e -c test.yml

2.将文件最新发生变化的内容,存入es

[root@web01 filebeat]# vim file.yml 
filebeat.inputs:
- type: log    
  paths: /var/log/nginx/access.log
  enabled: true  
  
output.console:
  hosts: ["10.0.0.161:9200", "10.0.0.162:9200", "10.0.0.163:9200"]
  index: nginx-access-log

setup.template.name: nginx
setup.template.pattern: nginx-*

3. 收集系统日志

3.1 系统日志

系统日志一般指的是messages,secure,cron,dmesg,boot,ssh等日志

3.2 统一收集系统日志

需要对系统日志进行统一、集中的管理,

  • 减少无用的数据
  • 调整索引名称
  • 测试调整模板,设定分片

通过rsyslog收集本地所有类型的日志,然后使用filebeat对该文件进行分收集即可。

3.3 系统日志收集实践
  • 安装rsyslog
[root@web01 ~]# yum install rsyslog -y
  • 配置rsyslog
[root@web01 ~]# vim /etc/rsyslog.conf
#配置日志收集的方式
...
*.* /var/log/oldxu.log   #将本地所有日志保存至本地/var/log/oldxu.log
...
  • 重启rsyslog
[root@web01 ~]# systemctl enable rsyslog
[root@web01 ~]# systemctl start rsyslog
  • 测试
root@web01 ~]# cat /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/oldxu.log
  include_lines: ['^ERR', '^WARN', 'sshd']   #只看指定的日志

output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200","10.0.0.163:9200"]
  index: "system-%{[agent.version]}-%{+yyyy.MM.dd}"

setup.ilm.enabled: false
setup.template.name: system   #索引关联的模板名称
setup.template.pattern: system-*

方式一:
###设定system模板的分片数和副本数
#setup.template.settings:            #定义索引分片数和副本
#  index.number_of_shards: 3
#  index.number_of_replicas: 1

方式二:
   "number_of_routing_shards": "30",
   "number_of_shards": "10",
   "number_of_replicas": "1",

1.修改system模板   --->  添加 shards 分片数数量,replicas的数量
2.删除模板关联的索引
3.删除filebeat自行指定的分片数和副本数
4.重启filebeat
5.产生新的日志

[图片上传失败...(image-fb2065-1579012042680)]

4. 收集nginx日志

4.1 编写配置文件
[root@web01 nginx]# vim nginx.conf
...
log_format json '{ "time_local": "$time_local", '
                      '"remote_addr": "$remote_addr", '
                      '"referer": "$http_referer", '
                      '"request": "$request", '
                      '"status": $status, '
                      '"bytes": $body_bytes_sent, '
                      '"agent": "$http_user_agent", '
                      '"x_forwarded": "$http_x_forwarded_for", '
                      '"up_addr": "$upstream_addr",'
                      '"up_host": "$upstream_http_host",'
                      '"upstream_time": "$upstream_response_time",'
                      '"request_time": "$request_time"'
'}';
    access_log /var/log/nginx/access.log json;
...
4.2 配置nginx站点目录
[root@web01 conf.d]# cat elk.oldxu.com.conf 
server {
    listen 80;
    server_name elk.oldxu.com;
        root /code/elk;
    access_log  /var/log/nginx/elk.oldxu.com.log json;
    
    location / {
        index index.html;
    }
}

[root@web01 conf.d]# cat bk.oldxu.com.conf 
server {
    listen 80;
    server_name bk.oldxu.com;
    root /code/bk;
        access_log  /var/log/nginx/bk.oldxu.com.log json;
#        error_log  /var/log/nginx/blog_error.log;
    location / {
        index index.php index.html;
    }
}

[root@web01 conf.d]# cat bs.oldxu.com.conf 
server {
    listen 80;
    server_name bs.oldxu.com;
    root /code/bs;
        access_log  /var/log/nginx/bs.oldxu.com.log json;
#        error_log  /var/log/nginx/blog_error.log;
    location / {
        index index.php index.html;
    }
}
4.3 测试,模拟产生日志
[root@web01 conf.d]# curl -H Host:elk.oldxu.com http://10.0.0.7 
elk.oldux.com 

[root@web01 conf.d]# curl -H Host:bs.oldxu.com http://10.0.0.7 
bs.oldux.com 

[root@web01 conf.d]# curl -H Host:bk.oldxu.com http://10.0.0.7 
bk.oldux.com
4.4 配置filebeat
[root@web01 filebeat]# cat filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/elk.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-elk-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/bs.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-bs-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/bk.oldxu.com.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-bk-host"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["nginx-error"]

output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200","10.0.0.163:9200"]
  indices:
    - index: "nginx-elk-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-elk-host"

    - index: "nginx-bs-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-bs-host"

    - index: "nginx-bk-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-bk-host"

    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "nginx-error"

setup.ilm.enabled: false
setup.template.name: nginx   #索引关联的模板名称
setup.template.pattern: nginx-*

5. Tomcat日志

5.1 安装tomcat
#上传apache-tomcat-9.0.27.tar.gz
#解压
mkdir /soft
tar xf apache-tomcat-9.0.27.tar.gz -C /soft
ln -s apache-tomcat-9.0.27 tomcat
5.2 编辑tomcat配置文件
vim /soft/tomcat/conf/server.xml
      

        
      
5.3 配置filebeat
[root@web02 filebeat]# vim filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /soft/tomcat/logs/tomcat.oldxu.com.log.*.txt
  json.keys_under_root: true    #默认Flase,还会将json解析的日志存储至messages字段
  json.overwrite_keys: true     #覆盖默认的key,使用自定义json格式的key
  tags: ["tomcat-access"]

- type:
  enabled: true
  paths:
    - /soft/tomcat/logs/catalina.out
  multiline.pattern: '^\d{2}'   #匹配以2数字开头的
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 10000   #默认最大合并行为500,可根据实际情况调整
  tags: ["tomcat-error"]
  
output.elasticsearch:
  hosts: ["10.0.0.161:9200","10.0.0.162:9200"]
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyyy.MM.dd}"
      when.contains:
        tags: "tomcat-error"

setup.ilm.enabled: false
setup.template.name: tomcat   #索引关联的模板名称
setup.template.pattern: tomcat-*

你可能感兴趣的:(Filebeat)