Filebeat
1. Filebeat基本介绍
1.1 Filebeat介绍——官网传送门
filebeat是用于“转发”和“集中日志数据”的“轻量型数据采集器”。Filebeat监视您指定的日志文件路径,收集日志事件并将数据转发到Elasticserach或Logstash、Redis等。
1.2 Filebeat主要组件
Filebeat主要包含两个组件:输入和收割机,这些组件协同工作将文件尾部最新事件数据发送到指定的输出
- 输入(input):输入负责管理收割机从哪个路径查找所有可读取的资源
- 收割机(Harvester):负责逐行读取单个文件的内容,然后将内容发送到输出。
1.3 Filebeat工作流程
当filebeat启动后,filebeat通过input读取指定的日志路径然后为该日志启动一个收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到指定的地点。
1.4 Filebeat配置
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
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-*