部署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 <
- 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 <
- 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
...(直接切换到末行模式。)
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 <
- 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 <
- 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