10 分鐘內快速構建能夠承載海量數據的 NGINX 日誌分析與報警平台

nginx 是現代 Web 服務棧中最重要的組件之一,絕大部分互聯網公司都會通過分析監控 nginx 日誌來定位業務性能瓶頸和故障診斷等。

通常,如果想構建一套具有實時數據監控、日誌搜索和分析功能的大數據平台:首先需要選擇數據收集工具,如目前比較流行的 logstash(filebeat)、fluntd、flume 等;然後依託 Prometheus 或 InfluxDB 實現數據的實時監控,並結合可視化工具(如 Grafana )實現數據的可視化展示;與此同時,為了達到高效日誌搜索的目的,還需要運用 Elasticsearch 技術搭建搜索和分析引擎,並結合 Kibana 進行頁面展示。而實現以上功能不僅需要有資深大數據背景的技術團隊和漫長的開發周期,上線後還要投入精力持續維護迭代。當數據量持續上升時,還需要考慮橫向擴展能力,否則就不得不面對眾多開源組件崩盤的風險。

七牛大數據平台 Pandora 是一套面向海量數據,能夠讓基礎技術人員輕鬆管理大數據傳輸、計算、存儲和分析的大數據 PaaS 平台,核心服務及功能包括大數據工作流引擎、時序資料庫、日誌檢索服務、Spark 服務、報表工作室。

基於七牛大數據平台 Pandora,不到 10 分鐘就可以完全實現一套可承載海量數據的 nginx 日誌分析與報警平台,無需考慮部署運維難題,更有海量離線數據分析等眾多大數據分析工具支持。

以下是操作詳情

1. 系統功能要求

  • 海量數據支撐
  • 快速接入,無侵入式配置,快速部署使用
  • 多種類型分析、分詞、加工、變換
  • 實時監控,數據可視化( Grafana 用戶無障礙遷移)
  • 離線分析,發現數據更大價值
  • 計算結果導出到用戶自身,快速迴流

2.監控內容

nginx 的訪問日誌( access.log )

3.快速開始

數據接入

根據您機器的操作系統版本下載 logkit( logkit 是七牛雲推出的一款開源數據收集工具)

下載地址:github.com/qiniu/logkit

解壓後您可以看到:

logkitlogkit.confconfs/default.conf

其中 logkit.conf 為主配置文件,用於配置監聽的子配置文件夾,修改主配置文件需要重啟 logkit。

您需要將其中的 confs_path 地址設置要監聽的子配置文件夾路徑。confs 文 件夾就是一個示例的子配置文件夾,子配置文件的更新無需重啟 logkit,會被 logkit 實時監聽,我們在子配置文件中設置實際要收集的各種配置文件。

下面我們將為您介紹如何配置子配置文件以收集 nginx 的日誌。

明確本機的 nginx 配置文件 log_format 位置如圖 1

圖 1

假設該配置文件路徑為: /opt/nginx_logs/logs/access.log

明確服務使用的 nginx 日誌樣式,如圖 2

圖 2

假設我們使用的 nginx 日誌樣式為 main

根據我們明確的 nginx 配置文件,填寫 nginx 日誌收集的 logkit 配置文件,如圖 3,填寫內容覆蓋到 confs/default.conf 即可

圖 3

{ "name":"nginx_runner", "reader":{ "mode":"file", "meta_path":"meta", "log_path":"/opt/nginx_logs/logs/access.log" }, "parser":{ "name":"nginx_parser", "type":"nginx", "nginx_log_format_path":"/opt/nginx/conf/nginx.conf", "nginx_log_format_name":"main", "nginx_schema":"time_local date,bytes_sent long,request_timefloat,body_bytes_sent long", "labels":"machine {machineNumber},team {opTeam}"}, "senders":[{ "name":"pandora_sender", "sender_type":"pandora", "pandora_ak":"your_ak", "pandora_sk":"your_sk", "pandora_host":"https://pipeline.qiniu.com", "pandora_repo_name":"my_nginx_log", "pandora_region":"nb", "pandora_schema_free":"true", "pandora_gzip": "true", "pandora_enable_logdb":"true", "fault_tolerant":"true", "ft_save_log_path":"./ft_log", "ft_strategy":"always_save", "ft_procs":"2"}]}

除了 nginx 日誌,logkit 還支持收集其他日誌,更多 logkit 的高級用法,參見 [logkit wiki文檔]

(github.com/qiniu/logkit)

運行 logkit

nohup ./logkit -f logkit.conf > logkit.log 2>&1

數據加工

登錄七牛官方網站,在大數據工作流引擎中即可看到已經創建的數據傳輸通道,如圖 4

圖 4

在日誌檢索界面查詢數據,如圖 5-1 所示

圖 5-1

至此,您已經可以通過搜索玩轉您本地的數據啦。

除了默認導出一份到日誌檢索之外,您也可以回到大數據工作流引擎,根據您的需要任意創建針對實時數據流的自定義計算並導出,如圖 5-2 所示。

圖 5-2

經過多種實時計算變換的數據,除了導出到 Pandora 已有的日誌檢索、時序資料庫以及對象存儲以外,還可以根據需要,導出到您本地假設的 http 伺服器上,即在 Pandora 進行數據計算後將結果迴流到您的平台落地,如圖 5-3 所示。

圖 5-3

當然,導出到對象存儲的數據,還可以在工作流引擎中創建離線計算工作流,再次進行數據加工聚合計算並導出,如圖 5-4 所示。

圖 5-4

在離線計算的工作流引擎,你可以根據需要周期性的運行您的計算任務,如定時分析一天的數據、一周的數據,出一份日報、周報等。

實時數據展示與監控

我們提供創建並配置 Grafana 進行監控。

創建 Grafana App,如圖 6 所示

圖 6

配置 Grafana LogDB 數據源,如圖 7 所示,點擊 logdb 使用指南,可以按照使用指南的指導在 Grafana 配置數據源。

圖 7

注意事項

  • Default Query Settings中, Group by interval 填寫時間 10s,注意單位為 s, m 等,不能漏掉,必須小寫。
  • Time Field Name 處填寫您的 logdb 時間欄位, 填您 nginx 配置的命名,在上述的截圖示例中,是 time_local , 沒有默認的 $ 符號
  • Index name中,模式固定為 Daily , 串固定為 [reponame-]YYYY.MM.DD , 將reponame 字元串改為您的數據源名稱即可。
  • Version 固定為 2.x

載入現成的 Grafana 配置

下載 json

op26gaeek.bkt.clouddn.com

在 Grafana 界面導入 json,並選擇數據源。

最終您將看到的效果,如圖 8-1 所示

圖 8-1

僅僅以 nginx 日誌為例,您可以看到哪些十分有價值的數據呢?

實時總用戶訪問量(請求數統計),如圖 8-2 所示

圖 8-2

機器請求數隨時間變化趨勢,如圖 8-3 所示

圖 8-3

實時請求狀態碼佔比,如圖 8-4 所示

圖 8-4

實時請求 TOP 排名,如圖 8-5 所示

圖 8-5

實時請求來源 IP TOP 排名,如圖 8-6 所示

圖 8-6

響應時間隨時間變化趨勢圖,如圖 8-7 所示

圖 8-7

實時用戶請求的客戶端 TOP 排名,如圖 8-8 所示

圖 8-8

實時根據不同情況進行具體數據的查詢,包括狀態碼、響應時間範圍進行篩選等,如圖 8-9 所示

圖 8-9

其他更多自定義配置...

自定義的 Grafana DashBoard 配置示例,如圖 9 所示

圖 9

在此,您可以通過 Grafana,通過您的 nginx 日誌完整而詳盡地了解您業務的流量入口的各類情況。

報警

除此之外,我們還為您創建的 Grafana 提供了完善多樣的報警功能。

首先設置下 Grafana 報警的 Channel,如圖 10 所示。

圖 10

點擊 New Channel 按鈕,您可以在 Type 那邊選擇包括 Slack, Email 郵箱,Webhook 等十來種報警方式。

設置好報警的 Channel 以後,回到 Dashboard 界面,您就可以愉快的設置報警啦。比如說如圖 11,我們設置了一個響應時間大於 1000ms 的報警

圖 11

LogDB 採用的是基於 Elasticsearch 協議的報警,這個 Grafana 的功能是七牛獨家哦!

那麼您可以看到報警形式是怎麼樣的呢?

圖 12

看到圖 12 Slack 上的報警了嗎?除了基本的文字,還會帶上酷炫的報警圖片!圖片都會被存儲到您七牛雲存儲的 bucket( grafana-alert-images ) 裡面!

圖 13

郵件報警內容也一樣酷炫!

離線分析

除了實時的分析外,您還可以創建離線的XSpark,分析更多更久的海量數據,詳見 XSpark使用入門qiniu.github.io/pandora

------------------------------

目前七牛大數據平台 Pandora 處於有限開放階段,點擊七牛雲.大數據產品諮詢,提交表單即可申請試用。


推薦閱讀:

為什麼mysql,nginx,libev,redis,linux都是用C寫的?
nginx 基本入門
Nginx的https配置記錄以及http強制跳轉到https的方法梳理
把nginx改為一個普通的tcp伺服器,應用層協議自己定義,有可行性嗎?
有哪些知名網站Web伺服器是Nginx?

TAG:大数据 | Nginx | 日志分析 |