Filebeat
1. Filebeat基本介紹
1.1 Filebeat介紹——官網傳送門
filebeat是用于“轉發(fā)”和“集中日志數據”的“輕量型數據采集器”。Filebeat監(jiān)視您指定的日志文件路徑,收集日志事件并將數據轉發(fā)到Elasticserach或Logstash、Redis等。

圖1 filebeat.png
1.2 Filebeat主要組件
Filebeat主要包含兩個組件:輸入和收割機,這些組件協(xié)同工作將文件尾部最新事件數據發(fā)送到指定的輸出
- 輸入(input):輸入負責管理收割機從哪個路徑查找所有可讀取的資源
- 收割機(Harvester):負責逐行讀取單個文件的內容,然后將內容發(fā)送到輸出。
1.3 Filebeat工作流程
當filebeat啟動后,filebeat通過input讀取指定的日志路徑然后為該日志啟動一個收割進程(harvester),每一個收割進程讀取一個日志文件的新內容,并發(fā)送這些新的日志數據到處理程序(spooler),處理程序會集合這些事件,最后filebeat會發(fā)送集合的數據到指定的地點。

圖2 filebeat工作流程.png
1.4 Filebeat配置

圖3 filebeat配置.png
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.將文件最新發(fā)生變化的內容,存入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. 收集系統(tǒng)日志
3.1 系統(tǒng)日志
系統(tǒng)日志一般指的是messages,secure,cron,dmesg,boot,ssh等日志
3.2 統(tǒng)一收集系統(tǒng)日志
需要對系統(tǒng)日志進行統(tǒng)一、集中的管理,
- 減少無用的數據
- 調整索引名稱
- 測試調整模板,設定分片
通過rsyslog收集本地所有類型的日志,然后使用filebeat對該文件進行分收集即可。
3.3 系統(tǒng)日志收集實踐
- 安裝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
<Host name="tomcat.oldxu.com" appBase="/code/tomcat"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="tomcat.oldxu.com.log" suffix=".txt"
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}" />
</Host>
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-*