1 Filebeat收集Nginx日志

filebeat.inputs:
- type: log
  paths: /var/log/nginx/access.log*

output.elasticsearch:
  hosts: ["192.168.137.141:9200","192.168.137.142:9200","192.168.137.143:9200"]
  index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称

setup.ilm.enabled: false
setup.template.name: "nginx"       #定义模板名称
setup.template.pattern: "nginx-*"  #定义模板的匹配索引名称

Filebeat输入案例_tomcat

2 Filebeat收集nginx json日志

1 nginx日志配置
log_format json '{ "time_local": "$time_local",'
                        '"remote_addr": "$remote_addr",'
                        '"referer": "$http_referer",'
                        '"request": "$request",'
                        '"status": $status,'
                        '"bytes": $body_bytes_sent,'
                        '"test_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/json.log  json;

2 Filebeat配置
filebeat.inputs:
- type: log
  paths: /var/log/nginx/json.log*
  json.keys_under_root: true
  json.add_error_key: true

output.elasticsearch:
  hosts: ["192.168.137.141:9200","192.168.137.142:9200","192.168.137.143:9200"]
  index: "json-nginx-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称

setup.ilm.enabled: false
setup.template.name: "json-nginx"       #定义模板名称
setup.template.pattern: "json-nginx-*"  #定义模板的匹配索引名称

Filebeat输入案例_nginx_02

3 Filebeat收集tomcat日志

1 tomcat安装配置
tar -xf apache-tomcat-9.0.73.tar.gz
mv apache-tomcat-9.0.73 tomcat

vim tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="qingchen_json_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"}"/>

2 Filebeat配置
cat config/log-tomcat.conf
filebeat.inputs:
- type: log
  paths: /app/module/tomcat/logs/qingchen_json_log*.txt
  json.keys_under_root: true
  json.add_error_key: true

output.console:
  # 表示输出的内容以漂亮的格式显示
  pretty: true

Filebeat输入案例_json_03

4 Tomcat错误日志收集实践

4.1 错误日志特点

  1. 报错信息比较多。
  2. 报错信息分很多行

Filebeat输入案例_nginx_04

4.2 错误日志收集思路

例1: Tomcat正常日志是以 “日期” 开头的。而报错日志中间的错误都不是以 “日期” 开头的。 所以我们可以匹配以 “日期” 开头的一直到下一个日期出现则为一个事件日志。

例2: Elasticsearch正常日志是以 [] 开头的。而报错日志中间的错误信息不是以 [] 开头,所以可以匹配以 [开头的行,一直到下一个 [开头的出现则为一个事件日志。

官方例子https://www.elastic.co/guide/en/beats/filebeat/7.17/multiline-examples.html

4.3 多行设置参数

multiline.type

定义要使用的聚合方法。默认值为pattern,另一个选项count,它允许您聚合恒定数量的行。

multiline.pattern

指定要匹配的正则表达式模式。

multiline.negate

定义模式是否被否定。默认值为false

multiline.match

指定Filebeat如何将匹配的行组合到事件中。

Filebeat输入案例_tomcat_05

4.4 Filebeat配置

filebeat.inputs:
- type: log
  paths: /app/module/tomcat/logs/qingchen_json_log*.txt
  json.keys_under_root: true
  json.add_error_key: true
  tags: ["access"]

- type: log
  paths: /app/module/tomcat/logs/catalina.out
multiline.type: pattern
  multiline.pattern: '^\d{2}'  #匹配以两个数字开头的
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 1000       # 最大的合并行数 默认合并的数量是500
  tags: ["error"]

output.elasticsearch:
  hosts: ["192.168.137.141:9200","192.168.137.142:9200","192.168.137.143:9200"]
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称
      when.contains:
        tags: "access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyyy.MM.dd}" #自定义索引名称
      when.contains:
        tags: "error"

setup.ilm.enabled: false
setup.template.name: "tomcat"       #定义模板名称
setup.template.pattern: "tomcat-*"  #定义模板的匹配索引名称

Filebeat输入案例_tomcat_06

5 多行匹配案例补充

# 指定多行匹配的类型为count

multiline.type: count

filebeat.inputs:
- type: log
  paths: /tmp/qingchen/*.log
  multiline:
    # 指定多行匹配的类型为count
    type: count
    # 将3行数据合并为1行数据
    count_lines: 3

output.console:
  pretty: true
  
cat /tmp/qingchen/aa.log
111111
22222
33333
44444
55555

Filebeat输入案例_tomcat_07

第四行和第五行两行不符合要求,直接不输出

Filebeat输入案例_nginx_08

5分钟以后,检测到路径是不活跃的,关闭,顺便把第四行和第五行输出了

6 多行匹配自定义开头结尾

有时,应用程序日志包含以自定义标记开头和结尾的事件。

Filebeat输入案例_nginx_09

multiline.type: pattern  
multiline.pattern: 'Start new event'  #指定事件开始的选项
multiline.negate: true
multiline.match: after
multiline.flush_pattern: 'End event'  #指定事件的结束或最后一行