Filebeat

作者: 静如止水yw | 来源:发表于2020-01-14 22:28 被阅读0次

    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
          <Host name="tomcat.oldxu.com"  appBase="/code/tomcat"
                unpackWARs="true" autoDeploy="true">
    
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="tomcat.oldxu.com.log" suffix=".txt"
                   pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}" />
          </Host>
    
    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

        本文链接:https://www.haomeiwen.com/subject/xokzactx.html