goaccess了,它是一個日志分析工具,並不只是為nginx使用的,你也可以用它來分析apache,具有解析速度快,使用簡單,能生成json,html,csv等特點。
1.goaccess的基本安裝
wget http://tar.goaccess.io/goaccess-1.1.tar.gz yum install glib2 glib2-devel GeoIP-devel ncurses-devel tar xvf goaccess-1.1.tar.gz -C /usr/local cd /usr/local/ cd goaccess-1.1/ ./configure --enable-geoip --enable-utf8 --with-openssl make && make install goaccess -f /var/log/nginx/access.log -a
lanmp默認使用common log format日志格式
2.日志分析結果的輸出的城市顯示
wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz goaccess -f /var/log/nginx/access.log --log-format="%h %^[%d:%t %^] \"%r\" %s %b \"%R\" \"%u\"" --date-format="%d/%b/%Y" --time-format=%H:%M:%S -a --geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat > /tmp/nginx-log-`date +%F-%H-%M-%S`.html
其中log format依實際nginx的格式自己設定,如果nginx的log format為默認,可以使用goaccess中推薦的common log format日志格式設置,如果nginx的日志中有使用引號,在命令行中須使用\進行轉義
如果nginx格式自己有變動,可以依據https://goaccess.io/man對命令行中的格式進行自定義
goaccess命令中的相關參數命令可以閱讀https://github.com/allinurl/goaccess中的詳細解釋
--geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat此條參數為輸出時加載GeoLiteCity.dat的數據,goaccess中默認使用的geoip數據不全,只能顯示到country,不能顯示到city。
3.使用mutt和msmtp將生成的html文件自動發送至郵箱
配置msmtp,只需要在用戶根目錄下創建.msmtprc 文件添加如下配置文件即可,msmtp主要配置發件的服務器地址,以及認證信息
yum -y install mutt msmtp
[root@iZ25b31bdp0Z tmp]# cat /root/.msmtprc defaults tls on logfile /var/log/msmtp/msmtp.log account default host smtp.126.com port 25 //不同的郵箱的smtp端口可能不一樣,自行去郵箱官網查詢 from marility@126.com //發件人的郵箱 auth login //授權選擇login就可以 tls off user marility@126.com //郵箱用戶 password PASSWORD //這處PASSWORD密碼為郵箱smtp的授權碼,不是網頁郵件登陸密碼,此處密碼為明文,也可以使用gpg2進行加密,詳細設定可以查看文尾
[root@iZ25b31bdp0Z tmp]# cat /root/.muttrc set sendmail="/usr/bin/msmtp" set use_from=yes set realname="marility" //郵件發送時顯示的用戶名 set from=marility@126.com //發件人的郵箱 set envelope_from=yes set charset = "utf-8" set send_charset = "us-ascii:iso-8859-1:gb18030:utf-8"
chmod +x nginxlogsend.sh echo " " | mutt -s "nginx-log-`date +%F-%H-%M-%S`" 85362119@qq.com -a /tmp/nginx-log-2016-11-21-14-59-32.html echo "郵件內容" | mutt –s "郵件標題" 收件人郵箱 –a 附件的路徑
4.自動化發送生成的日志分析文件
寫一個腳本,在腳本中執行如上兩條命令,然后加入到crontab中
vim /root/nginxlogsend.sh #!/bin/bash # # goaccess -f /var/log/nginx/access.log --log-format="%h %^[%d:%t %^] \"%r\" %s %b \"%R\" \"%u\"" --date-format="%d/%b/%Y" --time-format=%H:%M:%S -a --geoip-database=/usr/local/goaccess-1.1/GeoLiteCity.dat > /data/nginx-log.html echo " " | mutt -s "nginx-log-`date +%F-%H-%M-%S`" 85362119@qq.com -a /data/nginx-log.html tar zcf /data/nginx-log-`date +%F-%H-%M-%S`.tar.gz /data/nginx-log.html
crontab –e 1 0 * * * /root/nginxlogsend.sh
5.msmtp密碼加密
因為/root/.msmtprc中用戶郵箱的smtp的授權碼在上述示例中使用的明文,在此不安全。
在msmtp中除了將密碼放置於配置文件中,還可以讀取gpg2加密文件
5.1生成密鑰對
在主機A.B兩邊各種生成自己的gpg2密鑰對
gen –gen-key
依次選擇1>0>4096>輸入用戶信息及解密密碼(解密密碼很重要,后期解密文件使用)>o
之后提示移動鼠標鍵盤,在tty中無法使用,在此可以使用dd命令隨機寫入
dd if=/dev/zero of=/dev/null bs=10 count=10000
5.2查看密鑰對並導出自己的公鑰
gen2 –K
其中下圖中黑色部分為密鑰ID
導出密鑰格式為gpg2 –a –o 公鑰文件名稱 –-export 密鑰ID
5.3將A機器(A必須為msmtp主機)公鑰傳給B機器
5.4在B機器上導入A機器公鑰
5.5在B機器上將存有密碼的文件進行加密
gpg2 –e –r marility msmpasswd
其中marility為A機器上生成密鑰時的用戶,msmpasswd為存有密碼的文件,
執行之后會生成一個msmpasswd.gpg的文件,使用cat查看得出亂碼,到達加密效果
5.6將B機器上的加密文件回傳到A主機
5.7對加密文件進行解密測試
使用格式為gpg2 –no-tty –-passphrase=A機器上解密密碼 –q –d 加密文件
5.8更改/root/.msmtprc中配置,如下
[root@iZ25b31bdp0Z tmp]# cat /root/.msmtprc defaults tls on logfile /var/log/msmtp/msmtp.log account default host smtp.126.com port 25 from marility@126.com auth login tls off user marility@126.com passwordeval gpg2 --no-tty --passphrase=chunlanyy -q -d msmpasswd.gpg ##此處為passwordeval,並非為password