Webサービス:tomcatアクセスログ分析ストレージ
8609 ワード
最近、データ分析チームはtomcatのアクセスログを取得してデータ分析を行う必要があり、ブロガーも醤油隊員の一人だ.プロジェクトが完了した後、小博主はプロセス全体を以下のステップに最適化した(データ需要分析なし、データフィルタ分類整理、可視化インタフェース表示、UIプロセス).
注意:本文は主に全体の過程の構想を分析して、プロジェクトの白に1つのプロジェクトが大体どのようなステップを必要とするかを知らせます
1:単純なデータフィルタ
2:データ洗浄
3:データベースストレージ
4:全自動化プロセスの実現
一:データフィルタ
一般的なtomcatサービスはLinuxサーバの下に置かれているので、本稿ではLinuxサーバで簡単に説明します.
tomcatのログファイルでは、6月14日のアクセスを例に挙げます.
essuportとCCCCltdを含むデータのフィルタリング
フィルタされたファイルは
今回の分析チームで主に必要なのは【】のファイル(すなわち時間)、リクエスト方式(すなわちPOST/GET)
小ブロガーのヒント:実際にはそう簡単ではなく、プロセスを簡略化するために読者に理解しやすくするために簡略化されています.
フィルタされたファイルをtomcat_に保存log.txtファイル内
これで.ファイルフィルタが完了しました.
二:データ洗浄
上記のフィルタファイル(tomcat_log.txt)をローカルデスクトップにドロップダウンします(pythonを使用して簡単に洗浄する必要があるため、ブロガーはPyCharmプログラミングideaを使用します)
時間ファイルとリクエスト方法が必要です
では、
上記のコードを使用して、2つのリストを取得します.
①: logdate 1リスト要素
使用するsplit()関数のため、到着時間:[14/Jun/2019 9:09:18:10標準時間フォーマットファイルに合わないように見えます.
②:request1
requestフィールドも奇抜です:“POST......HTTP/1.0”の形式で、後文はまだデータベースに保存する必要があるため、二重引用符はSQL注入の問題を引き起こす可能性があって記憶に失敗して、私達はまた得たデータに対して更に洗浄する必要があります深さ洗浄 logdate 1データをタイムスタンプに変更してデータ分析チームの後続分析を容易にする
request 1のリストデータの二重引用符を削除し、格納によるエラーを防止
logdate1:
request1:
三:データベースストレージ
データベースの作成(プロシージャ省略)
pymysqlテンプレートのインポート
tomcatを閉じるlog.txtファイル
最後に、上記pythonコードを次のように整理します.
四:全自動化プロセスの実現
以上の3つのステップは、私たちの簡単なデータのフィルタリングとストレージを完了しましたが、毎回上記の作業を繰り返したり、人為的に上記のプロセスを実行したりするのは、かなり塩漬けの魚の行為なので、私たちは上記のプロセスをすべてコンピュータに渡さなければなりません.
1:ローカルPyCharmファイルをサーバーにアップロードする
2:データフィルタ処理をスクリプトとしてまとめる(shellスクリプト名tomcat_log.sh、場所:/home/hadoop/filter):
tomcatを手に入れたlog.txtファイルの後、pythonでデータを洗浄するコーナーに入りました
アップロードしたpythonファイルを適切な場所に配置します(openファイルのパスを変更することに注意してください.linuxの下にはC:/***/**パスはありません)
3:python_tomcat(PyCharmが作成したpythonプロジェクト)は/home/hadoop/filterの下に置かれています
これで、/home/hadoop/filterファイルにpython_が含まれます.tomcat.py/tomcat_log.txt/tomcat_log.shファイル
注意:1-pythonファイルの下のパスを変更する2-後続のファイル権限によるエラーを防止するために、filterファイル全体の権限を777権限に設定できます.
権限の変更
pythonでのファイルパスの変更
今:全体の過程は実は2つのステップです
一:/home/hadoop/filter下のtomcat_を実行するlog.sh
二:/home/hadoop/filter/python_の実行tomcatの下のtomcat_log.py
上記2つのファイルをcrontab計画タスクに追加すると、全自動化プロセスが完了します.
終わりだ!
注意:本文は主に全体の過程の構想を分析して、プロジェクトの白に1つのプロジェクトが大体どのようなステップを必要とするかを知らせます
1:単純なデータフィルタ
2:データ洗浄
3:データベースストレージ
4:全自動化プロセスの実現
一:データフィルタ
一般的なtomcatサービスはLinuxサーバの下に置かれているので、本稿ではLinuxサーバで簡単に説明します.
***@***:/home/suitang/tomcat/logs# pwd
/home/suitang/tomcat/logs
***@***:/home/suitang/tomcat/logs# ls
...
catalina.2019-06-08.log localhost.2019-06-17.log
catalina.2019-06-09.log localhost.2019-06-18.log
catalina.2019-06-10.log localhost.2019-06-19.log
...
localhost.2019-06-07.log localhost_access_log.2019-06-18.txt
localhost.2019-06-08.log localhost_access_log.2019-06-19.txt
localhost.2019-06-09.log manager.2019-06-06.log
localhost.2019-06-10.log wechatlog.txt
tomcatのログファイルでは、6月14日のアクセスを例に挙げます.
essuportとCCCCltdを含むデータのフィルタリング
cat localhost_access_log.2019-06-14.txt |grep essupport |grep CCCCltd
フィルタされたファイルは
... ...
192.168.1.253 - - [14/Jun/2019:16:58:11 +0800] "POST /essupport/CCCCltdAction?method=query_bool2 HTTP/1.0" 200 9315
192.168.1.253 - - [14/Jun/2019:16:59:53 +0800] "POST /essupport/CCCCltdAction?method=query_bool6 HTTP/1.0" 200 11191
192.168.1.253 - - [14/Jun/2019:16:59:55 +0800] "POST /essupport/CCCCltdAction?method=query_bool2 HTTP/1.0" 200 12002
192.168.1.253 - - [14/Jun/2019:16:59:55 +0800] "POST /essupport/CCCCltdAction?method=query_bool2 HTTP/1.0" 200 9316
192.168.1.253 - - [14/Jun/2019:17:15:45 +0800] "POST /essupport/CCCCltdAction?method=query_bool2 HTTP/1.0" 200 10458
... ...
今回の分析チームで主に必要なのは【】のファイル(すなわち時間)、リクエスト方式(すなわちPOST/GET)
小ブロガーのヒント:実際にはそう簡単ではなく、プロセスを簡略化するために読者に理解しやすくするために簡略化されています.
フィルタされたファイルをtomcat_に保存log.txtファイル内
cat localhost_access_log.2019-06-16.txt |grep essupport |grep CCCCltd > tomcat_log.txt
これで.ファイルフィルタが完了しました.
二:データ洗浄
上記のフィルタファイル(tomcat_log.txt)をローカルデスクトップにドロップダウンします(pythonを使用して簡単に洗浄する必要があるため、ブロガーはPyCharmプログラミングideaを使用します)
時間ファイルとリクエスト方法が必要です
では、
file_log = open('C:/Users/Administrator/Desktop/tomcat_log.txt')
logdate1 = [] #
request1 = [] #
for i in file_log:
# m
m=0
for n in i.split():
#
m=m+1
#4-5 : 、
if m == 4 :
str_date = n
# logdate
if m == 4:
logdate1.append(str_date)
#6-8 : (post,get)、 、
if m == 6 :
str_re = n
if m == 7 :
str_re = str_re +' '+ n
if m == 8 :
str_re = str_re +" "+ n
# request1 ( “” , SQL , , pymysql , , )
if m == 8:
request1.append(str_re)
上記のコードを使用して、2つのリストを取得します.
①: logdate 1リスト要素
['[14/Jun/2019:09:18:10', '[14/Jun/2019:09:18:12', '[14/Jun/2019:09:18:13', '[14/Jun/2019:11:15:26',... ...]
使用するsplit()関数のため、到着時間:[14/Jun/2019 9:09:18:10標準時間フォーマットファイルに合わないように見えます.
②:request1
['"POST /essupport/CCCCltdAction?method=query_bool6 HTTP/1.0"', '"POST /essupport/CCCCltdAction?method=query_bool2 HTTP/1.0"',... ...]
requestフィールドも奇抜です:“POST......HTTP/1.0”の形式で、後文はまだデータベースに保存する必要があるため、二重引用符はSQL注入の問題を引き起こす可能性があって記憶に失敗して、私達はまた得たデータに対して更に洗浄する必要があります
request 1のリストデータの二重引用符を削除し、格納によるエラーを防止
logdate1:
import time
#
logdate =[]
for i in logdate1:
b = time.mktime(time.strptime(i, "[%d/%b/%Y:%H:%M:%S"))
logdate.append(b)
request1:
# request request1 SQL
request = []
for i in request1:
# replace “”
request.append(i.replace('"',''))
三:データベースストレージ
データベースの作成(プロシージャ省略)
pymysqlテンプレートのインポート
import pymysql
for i in range(logdate.__len__()):
#
db = pymysql.connect("localhost", "root", "123asd123asd",
"filter") # ( 、 、 、 )
# cursor() cursor
cursor = db.cursor()
# sql
#logdate[i],request[i],uid[i],id[i]
sql = 'INSERT INTO tomcat_log (logdate,request) VALUES ("%s","%s")'%(int(logdate[i]), request[i])
try:
# execute() SQL
cursor.execute(sql)
#
db.commit()
except:
#
db.rollback()
#
db.close()
tomcatを閉じるlog.txtファイル
#
file_log.close()
最後に、上記pythonコードを次のように整理します.
import pymysql
import time
file_log = open('C:/Users/Administrator/Desktop/tomcat_log.txt')
logdate1 = [] #
request1 = [] #
for i in file_log:
# m
m=0
for n in i.split():
#
m=m+1
#4-5 : 、
if m == 4 :
str_date = n
# logdate
if m == 4:
logdate1.append(str_date)
#6-8 : (post,get)、 、
if m == 6 :
str_re = n
if m == 7 :
str_re = str_re +' '+ n
if m == 8 :
str_re = str_re +" "+ n
# request1 ( “” , SQL , , pymysql , , )
if m == 8:
request1.append(str_re)
# request request1 SQL
request = []
for i in request1:
# replace “”
request.append(i.replace('"',''))
#
logdate =[]
for i in logdate1:
b = time.mktime(time.strptime(i, "[%d/%b/%Y:%H:%M:%S"))
logdate.append(b)
for i in range(logdate.__len__()):
#
db = pymysql.connect("localhost", "root", "123asd123asd",
"num") # ( 、 、 、 )
# cursor() cursor
cursor = db.cursor()
# sql
#logdate[i],request[i],uid[i],id[i]
sql = 'INSERT INTO tomcat_log (logdate,request) VALUES ("%s","%s")'%(int(logdate[i]), request[i])
try:
# execute() SQL
cursor.execute(sql)
#
db.commit()
except:
#
db.rollback()
#
db.close()
#
file_log.close()
四:全自動化プロセスの実現
以上の3つのステップは、私たちの簡単なデータのフィルタリングとストレージを完了しましたが、毎回上記の作業を繰り返したり、人為的に上記のプロセスを実行したりするのは、かなり塩漬けの魚の行為なので、私たちは上記のプロセスをすべてコンピュータに渡さなければなりません.
1:ローカルPyCharmファイルをサーバーにアップロードする
2:データフィルタ処理をスクリプトとしてまとめる(shellスクリプト名tomcat_log.sh、場所:/home/hadoop/filter):
#!/bin/bash
#
rm -f /home/hadoop/filter/localhost_access_log*
# tomcat log filter
cp `find /home/suitang/tomcat/logs/ -mtime -1 | grep localhost_access_log ` /home/hadoop/filter/
#
cd /home/hadoop/filter/
# tomcat_log.txt
cat localhost_access_log* | grep essupport | grep CCCCltd > tomcat_log.txt
tomcatを手に入れたlog.txtファイルの後、pythonでデータを洗浄するコーナーに入りました
アップロードしたpythonファイルを適切な場所に配置します(openファイルのパスを変更することに注意してください.linuxの下にはC:/***/**パスはありません)
3:python_tomcat(PyCharmが作成したpythonプロジェクト)は/home/hadoop/filterの下に置かれています
***@***:/home/hadoop/filter# pwd
/home/hadoop/filter
***@***:/home/hadoop/filter# ls
localhost_access_log.2019-06-17.txt python_tomcat tomcat_log.txt
localhost_access_log.2019-06-18.txt tomcat_log.sh
これで、/home/hadoop/filterファイルにpython_が含まれます.tomcat.py/tomcat_log.txt/tomcat_log.shファイル
注意:1-pythonファイルの下のパスを変更する2-後続のファイル権限によるエラーを防止するために、filterファイル全体の権限を777権限に設定できます.
権限の変更
***@***:/home/hadoop/filter# cd ..
***@***:/home/hadoop# chmod -R 777 filter/
pythonでのファイルパスの変更
root@stubuntu:/home/hadoop# cd filter/python_tomcat/
root@stubuntu:/home/hadoop/filter/python_tomcat# vim tomcat_log.py
#!/usr/bin/python3
import pymysql
import time
file_log = open('/home/hadoop/filter/tomcat_log.txt')
logdate1 = [] #
request1 = [] #
... ...
今:全体の過程は実は2つのステップです
一:/home/hadoop/filter下のtomcat_を実行するlog.sh
二:/home/hadoop/filter/python_の実行tomcatの下のtomcat_log.py
上記2つのファイルをcrontab計画タスクに追加すると、全自動化プロセスが完了します.
終わりだ!