目錄
一、Filebeat 收集 Nginx 日志實踐
1.1 為什么收集 Nginx 日志
1.2 Nginx 日志收集架構圖
1.3 Nginx 日志收集實踐
1.3.1 安裝 Nginx?
1.3.2 配置 filebeat
1.3.3 kibana 展示
1.4 Nginx json 日志收集實踐
1.4.1 收集問題
1.4.2 解決方案
1.4.3 配置 json
1.4.4 配置 Filebeat
1.4.5 Kibana 展示
1.5 Nginx 多個日志收集實踐
1.5.1 配置 Filebeat
1.5.2 kibana 展示
1.6 Nginx 多虛擬主機收集實踐
1.6.1 nginx 配置多站點
1.6.2 配置 Filebeat
1.6.3 kibana 展示
二、Filebeat 收集 Tomcat 日志
2.1?Tomcat 日志收集思路
2.2?Tomcat 日志收集架構圖
2.3 Tomcat 訪問日志收集實踐
2.3.1?安裝 Tomcat
2.3.2 修改日志為 json 格式
2.3.3 配置 Filebeat
2.3.4 配置 kibana
2.4?Tomcat 錯誤日志收集實踐
2.4.1?錯誤日志特點
2.4.2?錯誤日志收集思路
2.4.3?錯誤日志收集實踐
2.4.4 kibana 展示
2.5?收集多臺 Tomcat 節(jié)點日志
三、ES 錯誤日志收集實踐
一、Filebeat 收集 Nginx 日志實踐
1.1 為什么收集 Nginx 日志
????????我們需要獲取用戶的信息,比如:來源的 IP 是哪個地域,網(wǎng)站的 PV、UV、狀態(tài)碼、訪問時間等等,所以需要收集 Nginx 日志。
1.2 Nginx 日志收集架構圖
nginx+filebeat --> elasticsearch --> kibana
1.3 Nginx 日志收集實踐
1.3.1 安裝 Nginx?
[root@se-node3 ~]# yum -y install nginx
[root@se-node3 ~]# vim /etc/nginx/conf.d/elk.conf
server {
listen 80;
server_name elk.com;
location / {
root /opt;
index index.html;
}
}
[root@se-node3 ~]# echo elk123 >> /opt/index.html
[root@se-node3 ~]# systemctl enable --now nginx.service
1.3.2 配置 filebeat
配置 Filebeat,收集本機 Nginx 的日志:
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/access.log # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "nginx" # 定義模板名稱
setup.template.pattern: "nginx-*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
1.3.3 kibana 展示
使用 kibana 添加索引(nginx-access*),然后展示數(shù)據(jù):
1.4 Nginx json 日志收集實踐
1.4.1 收集問題
????????我們實現(xiàn)了 Nginx 日志的收集,但是所有的數(shù)據(jù)都在 message 字段中,無法滿足分析的需求,比如:
-
需要統(tǒng)計狀態(tài)碼的情況
-
統(tǒng)計所有請求總產(chǎn)生的流量大小
-
統(tǒng)計來源使用的客戶端等等
這些是沒有辦法實現(xiàn)的。
1.4.2 解決方案
????????需要將日志中的每一個選項都拆分出來,拆分成 key-value 的形式,那么就需要借助 json 的格式。
-
基本寫法: sky 男 20
-
json 寫法: 姓名: sky 性別: 男 年齡: 20
????????當需要篩選年齡時,通過JSON 的方式就能很好的提取出對應指標的值。這樣也便于后續(xù)的分析。
1.4.3 配置 json
將 nginx 日志格式轉換成 json 格式:
# 配置 log_format 即可
[root@se-node3 ~]# vim /etc/nginx/nginx.conf
······
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format json '{ "time_local": "$time_local", '
'"remote_addr": "$remote_addr", '
'"referer": "$http_referer", '
'"request": "$request", '
'"status": "$status", '
'"bytes": "$body_bytes_sent", '
'"browser_agent": "$http_user_agent", '
'"x_forwarded": "shttp_x_forwarded_for", '
'"up_addr": "Supstream addr", '
'"up_host": "$upstream_http_host", '
'"upstream_time": "$upstream_response_time", '
'"request_time": "$request_time"'
'}';
access_log /var/log/nginx/access.log json;
······
1.4.4 配置 Filebeat
nginx 修改日志為 JSON 格式后,需要修改 filebeat 配置文件:
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/access.log # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
json.keys_under_root: true # 默認為 false 將 json 解析的格式存儲至 messages 字段,true 則不存儲至 messages 字段
json.overwrite_keys: true # 覆蓋默認的 messages 字段,使用自定義 json 格式的 key
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "nginx" # 定義模板名稱
setup.template.pattern: "nginx-*" # 定義模板的匹配索引名稱
# 重啟 nginx、Filebeat 并清空日志,重新生產(chǎn) json 格式的日志
[root@se-node3 ~]# systemctl reload nginx.service
[root@se-node3 ~]# systemctl restart filebeat.service
[root@se-node3 ~]# > /var/log/nginx/access.log
1.4.5 Kibana 展示
????????每次修改完 Filebeat 的配置文件后都需要刪除 es、Kibana 的索引,并重新創(chuàng)建 kibana 索引模式才能生效:
1.5 Nginx 多個日志收集實踐
????????nginx 存在訪問日志和錯誤日志,那么如何使用 filebeat 同時收集 nginx 的訪問日志、錯誤日志呢;我們希望的狀態(tài)如下:
-
nginx 訪問日志--存儲--> nginx-access-7.8.1-2023.03 索引
-
nginx 錯誤日志--存儲--> nginx-error-7.8.1-2023.03 索引?
1.5.1 配置 Filebeat
配置 Filebeat 收集多個日志,需要通過 tags 標簽進行區(qū)分:
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/access.log # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
json.keys_under_root: true
json.overwrite_keys: true
tags: ["nginx-access"]
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/error.log # 日志所在路徑
tags: ["nginx-error"]
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
indices:
- index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-access" # tags 為 nginx-access 的日志存儲至 nginx-access-* 索引
- index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-error" # tags 為 nginx-error 的日志存儲至 nginx-error-* 索引
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "nginx" # 定義模板名稱
setup.template.pattern: "nginx-*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
1.5.2 kibana 展示
使用 kibana 添 nginx 錯誤日志索引,然后展示數(shù):
1.6 Nginx 多虛擬主機收集實踐
Nginx 如果有多個站點,filebeat 該如何收集多個域名的訪問日志。
1.6.1 nginx 配置多站點
[root@se-node3 ~]# vim /etc/nginx/conf.d/elk.conf
server {
listen 80;
server_name elk.com;
access_log /var/log/nginx/elk.log json;
location / {
root /opt;
index index.html;
}
}
[root@se-node3 ~]# cp /etc/nginx/conf.d/elk.conf /etc/nginx/conf.d/kk.conf
[root@se-node3 ~]# vim /etc/nginx/conf.d/kk.conf
server {
listen 86;
server_name kk.com;
access_log /var/log/nginx/kk.log json;
location / {
root /opt;
index index.html;
}
}
[root@se-node3 ~]# systemctl reload nginx.service
1.6.2 配置 Filebeat
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/access.log # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
json.keys_under_root: true
json.overwrite_keys: true
tags: ["nginx-access"]
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/elk.log # 日志所在路徑
json.keys_under_root: true
json.overwrite_keys: true
tags: ["nginx-elk-access"]
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/kk.log # 日志所在路徑
json.keys_under_root: true
json.overwrite_keys: true
tags: ["nginx-kk-access"]
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/nginx/error.log # 日志所在路徑
tags: ["nginx-error"]
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
indices:
- index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-access"
- index: "nginx-elk-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-elk-access"
- index: "nginx-kk-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-kk-access"
- index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
when.contains:
tags: "nginx-error"
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "nginx" # 定義模板名稱
setup.template.pattern: "nginx-*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
1.6.3 kibana 展示
創(chuàng)建 Kibana 索引模式:
二、Filebeat 收集 Tomcat 日志
2.1?Tomcat 日志收集思路
????????前面已經(jīng)收集過 Nginx 日志,所以下面收集 java 類型的 Tomcat 日志就比較簡單了,我們只需要安裝好 tomcat,然后將 tomcat 修改為 json 格式日志,在使用 filebeat 進行收集即可。
2.2?Tomcat 日志收集架構圖
tomcat+filebeat --> elasticsearch --> kibana
2.3 Tomcat 訪問日志收集實踐
2.3.1?安裝 Tomcat
Tomcat 下載地址:Index of /apache/tomcat/tomcat-9/v9.0.73/bin
[root@se-node3 ~]# yum install -y java
[root@se-node3 ~]# tar -zxvf apache-tomcat-9.0.73.tar.gz
[root@se-node3 ~]# mv apache-tomcat-9.0.73 /usr/local/tomcat-9.0.73
2.3.2 修改日志為 json 格式
修改默認網(wǎng)站日志格式為 json:
[root@se-node3 ~]# vim /usr/local/tomcat-9.0.73/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="{"clientip":"%h","clientuser":"%1","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","sendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","Agentversion":"%{user-Agent}i"}" />
</Host>
[root@se-node3 ~]# /usr/local/tomcat-9.0.73/bin/startup.sh
2.3.3 配置 Filebeat
# 把前面的 nginx 配置備份一下
[root@se-node3 ~]# cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml_nginx
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /usr/local/tomcat-9.0.73/logs/localhost_access_log*.txt # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
json.keys_under_root: true
json.overwrite_keys: true
tags: ["tomcat-access"]
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
index: "tomcat-access-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "tomcat" # 定義模板名稱
setup.template.pattern: "tomcat-*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
2.3.4 配置 kibana
使用 kibana 添加索引,進行數(shù)據(jù)展示:
2.4?Tomcat 錯誤日志收集實踐
2.4.1?錯誤日志特點
JAVA 錯誤日志的特點
-
報錯信息比較多
-
報錯信息分很多行
2.4.2?錯誤日志收集思路
????????例1:Tomcat 正常日志是以“日期”開頭的。而報錯日志中間的錯誤都不是以“日期”開頭的。所以我們可以匹配以“日期”開頭的一直到下一個日期出現(xiàn)則為一個事件日志。
????????例2:Elasticsearch 正常日志是以"[]"開頭的。而報錯日志中間的錯誤信息不是以"[]"開頭,所以可以匹配以"["開頭的行,一直到下一個"["開頭的出現(xiàn)則為一個事件日志。
官方多行匹配方式:Manage multiline messages | Filebeat Reference [7.4] | Elastic
2.4.3?錯誤日志收集實踐
配置 filebeat 收集 Tomcat 錯誤日志:
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /usr/local/tomcat-9.0.73/logs/localhost_access_log*.txt # 日志所在路徑
#include_lines: ['^WARN', '^ERR', 'sshd', '^CROND', '^systemd']
json.keys_under_root: true
json.overwrite_keys: true
tags: ["tomcat-access"]
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /usr/local/tomcat-9.0.73/logs/catalina.out # 日志所在路徑
tags: ["tomcat-error"]
multiline.pattern: '^\d{2}' # 匹配以兩個數(shù)字開頭的行
multiline.negate: true
multiline.match: after
multiline.max_lines: 1000 # 默認最大合并行為 500,可根據(jù)實際情況調整
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
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 # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "tomcat" # 定義模板名稱
setup.template.pattern: "tomcat-*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
2.4.4 kibana 展示
配置 kibana 添加索引,然后展示數(shù)據(jù):
2.5?收集多臺 Tomcat 節(jié)點日志
????????思路是再另一臺 Tomcat 節(jié)點的機器上安裝 Filebeat 組件,并重復 2.3 、2.4 的相同步驟,不需要做其他修改(如索引名稱等),配置好 Filebeat 然后啟動后, Kibana 會自動匯總聚合相同索引的數(shù)據(jù),使用?agent.name 字段區(qū)分 Tomcat 節(jié)點即可:
三、ES 錯誤日志收集實踐
配置 filebeat 收集 Elasticsearch 錯誤日志:
[root@se-node3 ~]# vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log # 收集日志的類型
enabled: true # 啟用日志收集
paths:
- /var/log/elasticsearch/my-es.log # 日志所在路徑
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
multiline.max_lines: 1000
output.elasticsearch: # 輸出日志至 es
hosts: ["192.168.170.132:9200", "192.168.170.133:9200", "192.168.170.134:9200"] # es 集群 ip 和端口
enabled: true
index: "es-node3-%{[agent.version]}-%{+yyyy.MM.dd}" # 自定義索引名稱
setup.ilm.enabled: false # 索引生命周期 ilm 功能默認開啟,開啟情況下索引名稱只能為 filebeat-*
setup.template.name: "es" # 定義模板名稱
setup.template.pattern: "es-node*" # 定義模板的匹配索引名稱
[root@se-node3 ~]# systemctl restart filebeat.service
上一篇文章:【Elastic (ELK) Stack 實戰(zhàn)教程】05、Filebeat 日志收集實踐(上)_Stars.Sky的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-789787.html
下一篇文章:【Elastic (ELK) Stack 實戰(zhàn)教程】07、Logstash 快速入門及 Input、Filter 插件講解_Stars.Sky的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-789787.html
到了這里,關于【Elastic (ELK) Stack 實戰(zhàn)教程】06、Filebeat 日志收集實踐(下)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!