前不久使用Keepalived搭建了Nginx雙活代理服務器,以達到一個公網IP後支持多個雲主機的多個域名網站的目的。完成後又想在這雙活的Nginx上有全部訪問網站的日誌,以前有了解過Google Analytics, 及一些日誌分析系統。後來終於找到並部署了幾個開源的分析系統,包括AWStats,JAWStats及Piwik。使用它發現有一個問題比較煩,就是如何將2個Nginx的日誌發送到分析服務器後合併分析。nginx
1、需求服務器
合併多臺服務器同一域名網站的訪問日誌後,定時導入網站分析系統,生成網站分析數據。ide
2、技術方案網站
先後想了不少方法,包括自已寫腳本加入Cron定時發送到分析服務器,Fluentd日誌收集系統等許多方法,最終選定使用flume-ng完成該了該任務,相對其它來講我以爲他應是安裝配置最簡單的一種方法。spa
1.在分析服務器上安裝flume-ng,用以日誌收集。首先安裝JDK(完成後記住配置JAVA_HOME等環境變量).下載flume-ng最新版後解壓後便可使用。使用前添加收集服務器配置,示例以下:代理
collector1.sources = AvroIn collector1.sources.AvroIn.type = avro collector1.sources.AvroIn.bind = 0.0.0.0 collector1.sources.AvroIn.port = 4545 collector1.sources.AvroIn.channels = mc1 collector1.channels = mc1 collector1.channels.mc1.type = memory collector1.channels.mc1.capacity = 100 collector1.sinks = LocalOut collector1.sinks.LocalOut.type = file_roll collector1.sinks.LocalOut.sink.directory = /var/log/flume/collector1 collector1.sinks.LocalOut.sink.rollInterval = 0 collector1.sinks.LocalOut.channel = mc1
完成後運行:日誌
bin/flume-ng agent -c conf -f /etc/flume/conf/collector1.conf -n collector1
完成後即系統即會在端口4545收集日誌數據,寫入指定的目錄文件中。code
2.在Nginx服務器同1中安裝好JDK並解壓flume-ng後,一樣新建一Nginx日誌發送配置,示例以下:blog
agent1.sources = ngrinder agent1.sources.ngrinder.type = exec agent1.sources.ngrinder.command = tail -F /var/log/nginx/otrs/access.log agent1.sources.ngrinder.channels = mc1 agent1.channels = mc1 agent1.channels.mc1.type = memory agent1.channels.mc1.capacity = 100 agent1.sinks = avro-sink agent1.sinks.avro-sink.type = avro agent1.sinks.avro-sink.channel = mc1 agent1.sinks.avro-sink.hostname = 172.22.2.203 agent1.sinks.avro-sink.port = 4545
3.啓動收集日誌。crontab
bin/flume-ng agent -c conf -f /etc/flume/conf/agent1.conf -n agent1
完成後,訪問你要收集網站訪問日誌的網站,而後到收集服務器上,到配置好的日誌收集目錄,您將能夠看到相關日誌。
4.將收集到的日誌定時給AWStats分析,以完成網站訪問分析。運行:crontab -e添加:
0 1 * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.xxxxx.com
使天天凌晨1點分析日誌。