filebeat

部署filebeat并测试:
    1)下载filebeat
https://www.elastic.co/cn/downloads/past-releases#filebeat
    
    
    2)解压filebeat软件包
tar xf filebeat-7.17.5-linux-x86_64.tar.gz -C /oldboyedu/softwares/


    3)编写配置文件
cd /oldboyedu/softwares/filebeat-7.17.5-linux-x86_64
mkdir config/
cat > config/01-stdin-to-stdout.yaml < # 指定输入端
filebeat.inputs:
  # 输入端的类型为标准输入
- type: stdin

# 指定输出端,console表示当前终端.
output.console:
  # 以漂亮的格式输出
  pretty: true
EOF

    4)检查配置文件语法
./filebeat test config  -c config/01-stdin-to-stdout.yaml


    5)启动filebeat实例
./filebeat -e  -c config/01-stdin-to-stdout.yaml

    
    6)测试
输入数据测试即可,比如"welcome to oldboyedu !"


将标准输入写入到ES集群:
    1)编写配置文件
cat > config/02-stdin-to-es.yaml < # 指定输入端
filebeat.inputs:
  # 输入端的类型为标注输入
- type: stdin

# 指定输出端,elasticsearch输出到ES集群
output.elasticsearch:
  # ES集群的地址
  hosts: ["http://10.0.0.101:9200","http://10.0.0.102:9200","http://10.0.0.103:9200"] 
EOF


    2)校验配置文件
./filebeat test config config/02-stdin-to-es.yaml

    3)启动filebeat实例
./filebeat -c config/02-stdin-to-es.yaml

 
 
将标准输入写入到ES集群指定索引和分片:
    1)编写配置文件
cat > config/03-stdin-to-es.yaml < # 指定输入端
filebeat.inputs:
  # 输入端的类型为标注输入
- type: stdin

# 指定输出端,elasticsearch输出到ES集群
output.elasticsearch:
  # ES集群的地址
  hosts: ["http://10.0.0.101:9200","http://10.0.0.102:9200","http://10.0.0.103:9200"] 
  # 指定索引名称
  index: "oldboyedu-linux82-elk-%{+yyyy.MM.dd}" 

# 禁用索引声明周期管理,因为启用生命周期管理将自动忽略自定义索引的配置。
setup.ilm.enabled: false
# 索引模板的名称
setup.template.name: "oldboyedu-linux82-filebeat"
# 索引的匹配模式
setup.template.pattern: "oldboyedu-linux82-elk-*"
# 索引模板的设置
setup.template.settings:
  # 指定分片数量
  index.number_of_shards: 10
  # 指定副本数量
  index.number_of_replicas: 0
EOF

    2)校验配置文件
./filebeat test config -c config/03-stdin-to-es.yaml

    3)启动实例
./filebeat -c  config/03-stdin-to-es.yaml

将标准输入写入到文件中:
    1)编写配置文件
cat > config/04-stdin-to-file.yaml < # 指定输入端
filebeat.inputs:
  # 输入端的类型为标注输入
- type: stdin

# 指定输出端,file代表本地文件
output.file:
  # 指定本地文件路径
  path: "/tmp/filebeat"
  # 指定文件的名称
  filename: oldboyedu-linux82-elk
EOF
 
    2)校验配置文件
./filebeat test config -c config/04-stdin-to-file.yaml

    3)启动实例
./filebeat  -c config/04-stdin-to-file.yaml

 
将文件输出到标准输出:
    1)编写配置文件
cat > config/05-log-to-stdout.yaml < # 指定输入端配置
filebeat.inputs:
  # 指定类型为log,表示从本地文件中读取
- type: log
  # 指定路径,支持通配符。但不支持软连接!
  paths:
    - /tmp/oldboyedu-linux82/*.log
    - /tmp/oldboyedu-linux82/test.txt
    - /tmp/oldboyedu-linux82/link

# 指定输出端,console表示当前终端.
output.console:
  # 以漂亮的格式输出
  pretty: true
EOF

    2)校验配置文件
./filebeat test config -c config/05-log-to-stdout.yaml

    3)启动实例
./filebeat  -c config/05-log-to-stdout.yaml


使用收集nginx日志到ES集群:
    1)安装nginx环境
curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install nginx
systemctl start nginx

    2)编写配置文件
cat > config/06-nginx-to-es.yaml < filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:9200"
  - "http://10.0.0.102:9200"
  - "http://10.0.0.103:9200"
  index: "oldboyedu-linux82-nginx-%{+yyyy.MM.dd}" 

setup.ilm.enabled: false 
setup.template.name: "oldboyedu-linux82-nginx"
setup.template.pattern: "oldboyedu-linux82-nginx-*"
setup.template.settings:3*
  index.number_of_shards: 3
  index.number_of_replicas: 0
EOF


    3)启动实例
./filebeat -c config/06-nginx-to-es.yaml


使用filebeat解析JSON格式数据:
    1)修改nginx的配置文件
vim /etc/nginx/nginx.conf
...
  log_format oldboyedu_nginx_json '{"@timestamp":"$time_iso8601",'
                              '"host":"$server_addr",'
                              '"clientip":"$remote_addr",'
                              '"SendBytes":$body_bytes_sent,'
                              '"responsetime":$request_time,'
                              '"upstreamtime":"$upstream_response_time",'
                              '"upstreamhost":"$upstream_addr",'
                              '"http_host":"$host",'
                              '"uri":"$uri",'
                              '"domain":"$host",'
                              '"xff":"$http_x_forwarded_for",'
                              '"referer":"$http_referer",'
                              '"tcp_xff":"$proxy_protocol_addr",'
                              '"http_user_agent":"$http_user_agent",'
                              '"status":"$status"}';

    access_log  /var/log/nginx/access.log  oldboyedu_nginx_json;
                                                                     
    
    2)重新加载nginx的配置文件
nginx -t
systemctl reload nginx


    3)使用filebeat收集nginx的JSON格式日志
cat > config/07-nginx-to-es.yaml < filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log
  # 解析message字段的JSON格式,并将KEY放在文档的顶级字段。
  json.keys_under_root: true
  # 如果启用了keys_under_root,建议将overwrite_keys设置为TRUE,以防止数据冲突
  json.overwrite_keys: false


output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:9200"
  - "http://10.0.0.102:9200"
  - "http://10.0.0.103:9200"
  index: "oldboyedu-linux82-nginx-%{+yyyy.MM.dd}" 

setup.ilm.enabled: false 
setup.template.name: "oldboyedu-linux82-nginx"
setup.template.pattern: "oldboyedu-linux82-nginx-*"
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 0
EOF

    4)启动filebeat实例
rm -rf data/
./filebeat -c config/07-nginx-to-es.yaml 

面试题: filebeat实例4-5点的数据丢失了, 5点后filebeat数据正常,请问,如何找回4-5点的数据。
    1.找到文件在4点的offset   ----> "offset":18    ---> "cat data/registry/filebeat/log.json"
date --date='@1660897682'


    2.使用程序解决即可。
比如使用Python的程序读取文件的偏移量。


4之前的: 18

5点时候: 301


此时文件的offset是10w+

使用filebeat收集tomcat日志:
    1)安装tomcat
tar xf apache-tomcat-9.0.65.tar.gz -C /oldboyedu/softwares/
/oldboyedu/softwares/apache-tomcat-9.0.65/bin/startup.sh


    2)修改tomcat的配置文件
cp /oldboyedu/softwares/apache-tomcat-9.0.65/conf/{server.xml,server.xml-bak}
vim /oldboyedu/softwares/apache-tomcat-9.0.65/conf/server.xml
...(直接切换到末行模式。)
                          unpackWARs="true" autoDeploy="true">

                            prefix="tomcat.oldboyedu.com_access_log" suffix=".txt"
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","request":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","http_user_agent":"%{User-Agent}i"}"/>

         


    3)重启tomcat服务
/oldboyedu/softwares/apache-tomcat-9.0.65/bin/shutdown.sh 
/oldboyedu/softwares/apache-tomcat-9.0.65/bin/startup.sh 

    
    4)编写配置文件收集tomcat日志
cat > config/08-tomcat-to-es.yaml < filebeat.inputs:
- type: log
  paths:
    - /oldboyedu/softwares/apache-tomcat-9.0.65/logs/*.txt
  # 解析message字段的JSON格式,并将KEY放在文档的顶级字段。
  json.keys_under_root: true


output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:9200"
  - "http://10.0.0.102:9200"
  - "http://10.0.0.103:9200"
  index: "oldboyedu-linux82-tomcat-%{+yyyy.MM.dd}" 

setup.ilm.enabled: false 
setup.template.name: "oldboyedu-linux82-tomcat"
setup.template.pattern: "oldboyedu-linux82-tomcat-*"
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 0
EOF


    5)启动实例
./filebeat  -c config/08-tomcat-to-es.yaml


多行匹配:
    推荐阅读:
        https://www.elastic.co/guide/en/beats/filebeat/7.17/multiline-examples.html
        
    (1)停止服务,修改配置文件制造错误
/oldboyedu/softwares/apache-tomcat-9.0.65/bin/shutdown.sh
vim /oldboyedu/softwares/apache-tomcat-9.0.65/conf/server.xml
...  # 随意发挥,该错配置文件即可,但是一定要学会恢复错误哟!
    
      ....
    
/oldboyedu/softwares/apache-tomcat-9.0.65/bin/startup.sh

    
    (2)编写配置文件
cat > config/09-tomcat_error-to-es.yaml < filebeat.inputs:
- type: log
  paths:
    - /oldboyedu/softwares/apache-tomcat-9.0.65/logs/catalina*
  # 指定多行匹配的类型,可选值为"pattern","count"
  multiline.type: pattern
  # 指定匹配模式
  multiline.pattern: '^\d{2}'
  # 下面2个参数参考官方架构图即可,如上图所示。
  multiline.negate: true
  multiline.match: after


output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:9200"
  - "http://10.0.0.102:9200"
  - "http://10.0.0.103:9200"
  index: "oldboyedu-linux82-tomcat-error-%{+yyyy.MM.dd}" 

setup.ilm.enabled: false 
setup.template.name: "oldboyedu-linux82-tomcat"
setup.template.pattern: "oldboyedu-linux82-tomcat-*"
setup.template.settings:
  index.number_of_shards: 3
  index.number_of_replicas: 0
EOF

    (3)启动实例
./filebeat -c config/09-tomcat_error-to-es.yaml

你可能感兴趣的:(filebeat)