Filebeat 採集 Nginx 紀錄檔

2020-10-21 13:01:42

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

建立儲存卷,便於 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

啟動 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 對於存取紀錄檔和錯誤紀錄檔的具體請求資訊
在這裡插入圖片描述