nginx 是現代 Web 服務棧中最重要的組件之一,絕大部分互聯網公司都會經過分析監控 nginx 日誌來定位業務性能瓶頸和故障診斷等。nginx
一般,若是想構建一套具備實時數據監控、日誌搜索和分析功能的大數據平臺:首先須要選擇數據收集工具,如目前比較流行的 logstash(filebeat)、fluntd、flume 等;而後依託 Prometheus 或 InfluxDB 實現數據的實時監控,並結合可視化工具(如 Grafana )實現數據的可視化展現;與此同時,爲了達到高效日誌搜索的目的,還須要運用 Elasticsearch 技術搭建搜索和分析引擎,並結合 Kibana 進行頁面展現。而實現以上功能不只須要有資深大數據背景的技術團隊和漫長的開發週期,上線後還要投入精力持續維護迭代。當數據量持續上升時,還須要考慮橫向擴展能力,不然就不得不面對衆多開源組件崩盤的風險。git
七牛大數據平臺 Pandora 是一套面向海量數據,可以讓基礎技術人員輕鬆管理大數據傳輸、計算、存儲和分析的大數據 PaaS 平臺,核心服務及功能包括大數據工做流引擎、時序數據庫、日誌檢索服務、Spark 服務、報表工做室。github
基於七牛大數據平臺 Pandora,不到 10 分鐘就能夠徹底實現一套可承載海量數據的 nginx 日誌分析與報警平臺,無需考慮部署運維難題,更有海量離線數據分析等衆多大數據分析工具支持。數據庫
如下是操做詳情json
nginx 的訪問日誌( access.log )七牛雲存儲
根據您機器的操做系統版本下載 logkit( logkit 是七牛雲推出的一款開源數據收集工具)bash
下載地址:github.com/qiniu/logki…服務器
解壓後您能夠看到:運維
logkit
logkit.conf
confs/default.conf複製代碼
其中 logkit.conf 爲主配置文件,用於配置監聽的子配置文件夾,修改主配置文件須要重啓 logkit。工具
您須要將其中的 confs_path 地址設置要監聽的子配置文件夾路徑。confs 文 件夾就是一個示例的子配置文件夾,子配置文件的更新無需重啓 logkit,會被 logkit 實時監聽,咱們在子配置文件中設置實際要收集的各類配置文件。
下面咱們將爲您介紹如何配置子配置文件以收集 nginx 的日誌。
明確本機的 nginx 配置文件 log_format 位置如圖 1
假設該配置文件路徑爲: /opt/nginx_logs/logs/access.log
明確服務使用的 nginx 日誌樣式,如圖 2
假設咱們使用的 nginx 日誌樣式爲 main
根據咱們明確的 nginx 配置文件,填寫 nginx 日誌收集的 logkit 配置文件,如圖 3,填寫內容覆蓋到 confs/default.conf 便可
{
"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
二、數據加工
登陸七牛官方網站,在大數據工做流引擎中便可看到已經建立的數據傳輸通道,如圖 4
在日誌檢索界面查詢數據,如圖 5-1 所示
至此,您已經能夠經過搜索玩轉您本地的數據啦。
除了默認導出一份到日誌檢索以外,您也能夠回到大數據工做流引擎,根據您的須要任意建立針對實時數據流的自定義計算並導出,如圖 5-2 所示。
通過多種實時計算變換的數據,除了導出到 Pandora 已有的日誌檢索、時序數據庫以及對象存儲之外,還能夠根據須要,導出到您本地假設的 http 服務器上,即在 Pandora 進行數據計算後將結果迴流到您的平臺落地,如圖 5-3 所示。
固然,導出到對象存儲的數據,還能夠在工做流引擎中建立離線計算工做流,再次進行數據加工聚合計算並導出,如圖 5-4 所示。
在離線計算的工做流引擎,你能夠根據須要週期性的運行您的計算任務,如定時分析一天的數據、一週的數據,出一份日報、週報等。
####三、實時數據展現與監控
咱們提供建立並配置 Grafana 進行監控。
建立 Grafana App,如圖 6 所示
配置 Grafana LogDB 數據源,如圖 7 所示,點擊 logdb 使用指南,能夠按照使用指南的指導在 Grafana 配置數據源。
注意事項
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 所示
僅僅以 nginx 日誌爲例,您能夠看到哪些十分有價值的數據呢?實時總用戶訪問量(請求數統計),如圖 8-2 所示
機器請求數隨時間變化趨勢,如圖 8-3 所示
實時請求狀態碼佔比,如圖 8-4 所示
實時請求 TOP 排名,如圖 8-5 所示
實時請求來源 IP TOP 排名,如圖 8-6 所示
響應時間隨時間變化趨勢圖,如圖 8-7 所示
實時用戶請求的客戶端 TOP 排名,如圖 8-8 所示
實時根據不一樣狀況進行具體數據的查詢,包括狀態碼、響應時間範圍進行篩選等,如圖 8-9 所示
其餘更多自定義配置...自定義的 Grafana DashBoard 配置示例,如圖 9 所示
在此,您能夠經過 Grafana,經過您的 nginx 日誌完整而詳盡地瞭解您業務的流量入口的各種狀況。
報警
除此以外,咱們還爲您建立的 Grafana 提供了完善多樣的報警功能。
首先設置下 Grafana 報警的 Channel,如圖 10 所示。
點擊 New Channel 按鈕,您能夠在 Type 那邊選擇包括 Slack, Email 郵箱,Webhook 等十來種報警方式。
設置好報警的 Channel 之後,回到 Dashboard 界面,您就能夠愉快的設置報警啦。好比說如圖 11,咱們設置了一個響應時間大於 1000ms 的報警
LogDB 採用的是基於 Elasticsearch 協議的報警,這個 Grafana 的功能是七牛獨家哦!
那麼您能夠看到報警形式是怎麼樣的呢?
看到圖 12 Slack 上的報警了嗎?除了基本的文字,還會帶上酷炫的報警圖片!圖片都會被存儲到您七牛雲存儲的 bucket( grafana-alert-images ) 裏面!
郵件報警內容也同樣酷炫!
離線分析
除了實時的分析外,您還能夠建立離線的XSpark,分析更多更久的海量數據,詳見 [XSpark使用入門]。