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-*" #定义模板的匹配索引名称

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-*" #定义模板的匹配索引名称

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

4 Tomcat错误日志收集实践
4.1 错误日志特点
- 报错信息比较多。
- 报错信息分很多行

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如何将匹配的行组合到事件中。

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-*" #定义模板的匹配索引名称

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

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

5分钟以后,检测到路径是不活跃的,关闭,顺便把第四行和第五行输出了
6 多行匹配自定义开头结尾
有时,应用程序日志包含以自定义标记开头和结尾的事件。

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

被折叠的 条评论
为什么被折叠?



