之前我們已經(jīng)搞定了nginx+keepalived雙機(jī),花了一個(gè)多星期時(shí)間把業(yè)務(wù)都遷移過(guò)來(lái)之后,基本穩(wěn)定,中間還遇到一次意外宕機(jī),keepalived也順利做了主備切換,接下來(lái)就要做日志分析了。
日志分析,本身從等保的要求就是需要日志第三方存儲(chǔ)的,另外就是日志也是分析訪問(wèn)量的一個(gè)重要依據(jù),比如網(wǎng)站訪問(wèn)量、比如從錯(cuò)誤日志中分析數(shù)據(jù),等等。
nginx反代作為集中發(fā)布的平臺(tái),首先已經(jīng)能夠很完善的收集到數(shù)據(jù)了(否則你是拿不到分散在各個(gè)業(yè)務(wù)系統(tǒng)上的weblog的),接下來(lái),就是轉(zhuǎn)發(fā)和分析,這里就用elasticsearch來(lái)做了,畢竟平臺(tái)之前已經(jīng)搞定了。
因?yàn)槭羌兾谋救罩?,這里我們就是用es的Filebeat組件直接轉(zhuǎn)發(fā)給es,這是一個(gè)輕量的日志收集工具,也就省得再去轉(zhuǎn)syslog,或者轉(zhuǎn)logstash、kafka之類的,畢竟咱的數(shù)據(jù)量也不大。
安裝Filebeat
CentOS 7
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.3-x86_64.rpm
sudo rpm -vi filebeat-7.16.3-x86_64.rpm
配置Filebeat
創(chuàng)建elasticsearch的連接密碼
這樣就不用再filebeat的配置文件里寫入明文密碼了。此時(shí)鑰匙串的名字就叫做
password
filebeat keystore create
filebeat keystore add password
filebeat keystore list
啟用nginx module
filebeat modules enable nginx
filebeat modules list
- 其實(shí)就是把nginx模塊的配置文件的disable去掉了
- 配置文件參考如下
- module: nginx
access:
enabled: true
#注意日志的格式,是數(shù)組形式
var.paths: ["/var/log/nginx/access.log"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log"]
ingress_controller:
enabled: false
調(diào)整nginx日志格式
nginx的默認(rèn)日志格式其實(shí)已經(jīng)夠用了,如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
唯一有個(gè)問(wèn)題就是缺少了主機(jī)名
這個(gè)選項(xiàng),所以我們要加一條$host
進(jìn)去。如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$host"'
'"$http_user_agent" "$http_x_forwarded_for"';
$host
變量我加在了第二行,不知道為啥加在最后一行不生效。$host
在這里指的是http請(qǐng)求的主機(jī)頭,如果$hostname
那就變成nginx主機(jī)的名字了
測(cè)試并運(yùn)行filebeat
- 使用
filebeat test config -e
可以測(cè)試配置文件 - 使用
filebeat -e
可以運(yùn)行filebeat,會(huì)同時(shí)輸出日志。 - 當(dāng)然如果確定沒問(wèn)題還是用
systemctl start filebeat
更好一點(diǎn)
如果提示
2023-01-18T15:40:10.917+0800 INFO [publisher_pipeline_output] pipeline/output.go:151 Connection to backoff(elasticsearch(http://192.168.0.1:9200)) established
說(shuō)明已經(jīng)成功連接上elastic
基本完成
至此,在Kibana
的儀表板
中已經(jīng)可以看到一些基礎(chǔ)數(shù)據(jù)了
重新讀取文件
如果需要重新讀取filebeat文件,需要?jiǎng)h除掉/var/lib/filebeat/registry/filebeat
下的xxx.json文件,它記錄了讀取位置文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-432717.html
在Kibana中查看
- 打開Kibana,找到Analytics下的Dashboard
- 找到
[Filebeat Nginx] Overview ECS
這個(gè)Dashboard,順利的話你已經(jīng)看到所有的數(shù)據(jù)了。 - 但我們還有一些需要優(yōu)化的
- 首先是它讀取的是
filebeat-7.16.3-
這個(gè)默認(rèn)的模板,所以如果你有多個(gè)nginx傳輸數(shù)據(jù)的話,那么就需要優(yōu)化下(知道為啥要logstash多此一舉了吧?) - 點(diǎn)這里的篩選,字段用
agent.id
或者host.id
識(shí)別一下就可以了 - 然后這里缺少了一個(gè)最重要的,按站點(diǎn)統(tǒng)計(jì)點(diǎn)擊率,這時(shí)候我們之前添加的日志字段就有效果了
- 我們編輯Dashboard,創(chuàng)建可視化, 創(chuàng)建一個(gè)隨便什么圖,比如
垂直堆積條形圖
- 水平選擇計(jì)數(shù),起個(gè)名字叫做點(diǎn)擊率。也就是每條日志算一次。
- 垂直起個(gè)名字叫做排行,字段選擇
traefik.access.user_agent.original
。啥,你問(wèn)我他哪來(lái)的?你找一個(gè)日志看看不就知道了…??,看,就是這個(gè)
其他
只查看數(shù)據(jù)
- 打開Kibana的Discover,索引模式選擇
filebeat-*
ilm策略
默認(rèn)filebeat的nginx模塊寫入了filebeat-7.16.3-2023.01.06-000011
這樣的一個(gè)index。如果需要修改文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-432717.html
Ref
- https://blog.51cto.com/jiangxl/4654145
- https://blog.csdn.net/UbuntuTouch/article/details/101604717
- https://www.elastic.co/guide/en/beats/filebeat/master//exported-fields-traefik.html#exported-fields-traefik
到了這里,關(guān)于使用Filebeat收集并分析nginx的訪問(wèn)日志的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!