10 分鐘內快速構建能夠承載海量資料的 nginx 日誌分析與報警平臺

七牛雲發表於2017-08-15

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

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

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

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

以下是操作詳情

系統功能要求

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

監控內容

nginx 的訪問日誌( access.log )

快速開始

1、資料接入

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

下載地址:github.com/qiniu/logki…

解壓後您可以看到:

logkit
logkit.conf
confs/default.conf複製程式碼

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

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

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

明確本機的 nginx 配置檔案 log_format 位置如圖 1

圖 1
圖 1

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

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

圖 2
圖 2

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

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

圖 3
圖 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文件

執行 logkit

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

2、資料加工

登入七牛官方網站,在大資料工作流引擎中即可看到已經建立的資料傳輸通道,如圖 4

圖 4
圖 4

在日誌檢索介面查詢資料,如圖 5-1 所示

圖 5-1
圖 5-1

至此,您已經可以通過搜尋玩轉您本地的資料啦。

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

圖 5-2
圖 5-2

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

圖 5-3
圖 5-3

當然,匯出到物件儲存的資料,還可以在工作流引擎中建立離線計算工作流,再次進行資料加工聚合計算並匯出,如圖 5-4 所示。

圖 5-4
圖 5-4

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

####3、實時資料展示與監控

我們提供建立並配置 Grafana 進行監控。
建立 Grafana App,如圖 6 所示

圖 6
圖 6

配置 Grafana LogDB 資料來源,如圖 7 所示,點選 logdb 使用指南,可以按照使用指南的指導在 Grafana 配置資料來源。


圖 7
圖 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/logdbgrafan… Grafana 介面匯入 json,並選擇資料來源。最終您將看到的效果,如圖 8-1 所示

圖 8-1
圖 8-1

僅僅以 nginx 日誌為例,您可以看到哪些十分有價值的資料呢?實時總使用者訪問量(請求數統計),如圖 8-2 所示

圖 8-2
圖 8-2

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

圖 8-3
圖 8-3

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

圖 8-4
圖 8-4

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

圖 8-5
圖 8-5

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

圖 8-6
圖 8-6

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

圖 8-7
圖 8-7

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

圖 8-8
圖 8-8

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

圖 8-9
圖 8-9

其他更多自定義配置...自定義的 Grafana DashBoard 配置示例,如圖 9 所示

圖 9
圖 9

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

報警
除此之外,我們還為您建立的 Grafana 提供了完善多樣的報警功能。
首先設定下 Grafana 報警的 Channel,如圖 10 所示。

圖 10
圖 10

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

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

圖 11
圖 11

LogDB 採用的是基於 Elasticsearch 協議的報警,這個 Grafana 的功能是七牛獨家哦!
那麼您可以看到報警形式是怎麼樣的呢?

圖 12
圖 12

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

圖 13
圖 13

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

離線分析

除了實時的分析外,您還可以建立離線的XSpark,分析更多更久的海量資料,詳見 [XSpark使用入門]

相關文章