Nginx 紀錄檔可用於分析使用者地址位置,行為畫像等,如何通過 Elastic Stack 進行一站式的資料採集,資料淨化,資料落地,資料視覺化,讓資料發揮真正的價值呢?
涉及到 Elastic Stack 中 Filebeat 是用於採集 Nginx 相關的紀錄檔, Elasticsearch 是用於對於資料落地儲存和搜尋的引擎, Kibana 是用於對資料視覺化的工具。
在 Nginx 中相關的紀錄檔是儲存在 /var/log/nginx 目錄下的,分別是存取紀錄檔 access.log,錯誤紀錄檔 error.log。
如果是裸機環境下,可以直接在同一主機下安裝 Filebeat 針對紀錄檔檔案進行採集。
如果是 Docker 環境下,建議 Nginx 使用 Volume 的方式進行共用紀錄檔檔案給 Filebeat 採集。
如果是 Kubernetes 環境下,建議在 Pod 中新增 Filebeat Container進行對 PV 採集。
針對不同場景有不同的採集方案,有些可以利用Daemonset採集宿主機上的紀錄檔,有些是以Sidecar方式進行採集,具體視業務場景而定。
以 Docker 環境下為例
建立儲存卷,便於 Nginx 和 Filebeat 容器共同掛載
docker volume create nginx-log-volume
啟動 Nginx 容器,並且將儲存卷對映到紀錄檔目錄
docker run -d --name nginx -p 80:80 -v nginx-log-volume:/var/log/nginx nginx:latest
進入容器修改設定
docker exec -it nginx /bin/bash
由於容器環境下,預設的紀錄檔會輸入到stdout,所以取消該設定並指定檔案
unlink /var/log/nginx/access.log
unlink /var/log/nginx/error.log
touch /var/log/nginx/access.log /var/log/nginx/error.log
nginx -s reload
啟動 Filebeat 容器,並且將儲存卷對映到資料目錄
docker run -d --name filebeat --user=root -v nginx-log-volume:/data elastic/filebeat:7.9.2
進入容器修改設定
docker exec -it filebeat /bin/bash
修改設定,新增 Elasticsearch 和 Kibana 的主機
vi filebeat.yml
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
output.elasticsearch:
hosts: 'elasticsearch:9200'
username: "elastic"
password: "xxx"
setup.kibana:
host: "kibana:5601"
啟用 Nginx 採集模組
filebeat modules enable nginx
編輯 Nginx 採集設定
vi modules.d/nginx.yml
- module: nginx
access:
enabled: true
var.paths: ["/data/access.log*"]
error:
enabled: true
var.paths: ["/data/error.log*"]
設定 Filebeat 建立 Kibana上的 Index Pattern 和 Dashboard
filebeat setup
重新啟動 Filebeat 生效設定
docker restart filebeat
通過 Kibana 中的 Dashboard 功能
展示 Nginx 對於紀錄檔的存取情況及使用者地址位置、瀏覽器資訊
展示 Nginx 對於存取紀錄檔和錯誤紀錄檔的具體請求資訊