私は、スマートなログシステムを構築しています。そこでは、サーバーへの接続確立時間の開始と停止のような顧客接続を監視できます。接続ログシステムを構築する
RAW LOG:
Dec 19 00:00:03 172.16.20.24 pppoe,ppp,info <pppoe-customer1>: terminating... - peer is not responding
Dec 19 00:00:03 172.16.20.24 pppoe,ppp,info,account customer1 logged out, 4486 1009521 23444247 12573 18159
Dec 19 00:00:03 172.16.20.24 pppoe,ppp,info <pppoe-customer1>: disconnected
Dec 19 00:00:07 172.16.20.24 pppoe,info PPPoE connection established from 60:E3:27:A2:60:09
Dec 19 00:00:08 172.16.20.24 pppoe,ppp,info,account customer2 logged in, 10.171.3.185
Dec 19 00:00:08 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: authenticated
Dec 19 00:00:08 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: connected
Dec 19 00:00:13 172.16.20.24 pppoe,info PPPoE connection established from C0:25:E9:7F:C0:41
Dec 19 00:00:14 172.16.20.24 pppoe,ppp,error <ccfa>: user customer3 authentication failed
Dec 19 00:00:32 172.16.20.24 pppoe,info PPPoE connection established from C0:25:E9:7F:C0:41
Dec 19 00:00:36 172.16.20.24 pppoe,ppp,error <ccfb>: user customer3 authentication failed
Dec 19 00:01:06 172.16.20.24 pppoe,info PPPoE connection established from C0:25:E9:7F:C0:41
私にとって重要なのです:とキャプチャラインがを接続し、は文字列を切断しました。それは最も優秀な正規表現ではありませんので、私はまだ学んでいる
import os
import re
import sys
f = open('log.log','r')
log = []
for line in f:
if re.search(r': connected|: disconnected',line):
ob = dict()
ob['USER'] = re.search(r'<pppoe(.*?)>',line).group(0).replace("<pppoe-","").replace(">","")
ob['DATA'] = re.search(r'^\w{3} \d{2} \d{2}:\d{2}:\d{2}',line).group(0)
ob['CONNECTION'] = re.search(r': .*',line).group(0).replace(": ", "")
log.append(ob)
が、それは大丈夫だ:
私はこれを得ました! は、このログリストを絞り込む今を必要とするこのサンプルに取得したい:
{"connection" : [{
"start" : "Dec 19 10:12:58",
"username" : "customer2"}
{"connection" : [{
"start" : "Dec 20 10:12:58",
"username" : "customer1"}
{"connection" : [{
"start" : "Dec 19 10:12:58",
"stop" : Dec 22 10:04:35",
"username" : "customer4"}
{"connection" : [{
"start" : "Dec 19 10:12:58",
"stop" : "Dec 24 10:04:35"
"username" : "customer3"}
私の障害、
- がRAWログインが絶えず生成されている、私はすでにあれば、いくつかの ユーザーを識別する必要があります存在する。 はい:接続を更新します(顧客2は接続を削除し、登録が必要です)。ただし、接続が切断された場合はどうなりますか?たとえば、
:
Dec 19 10:20:58 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: disconnected
Dec 19 01:00:36 172.16.20.24 pppoe,ppp,error <ccfb>: user customer3 authentication failed
Dec 19 01:01:06 172.16.20.24 pppoe,info PPPoE connection established from C0:25:E9:7F:C0:41
Dec 19 10:21:38 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: authenticated
Dec 19 10:21:48 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: connected
Dec 19 10:22:38 172.16.20.24 pppoe,ppp,info <pppoe-customer3>: authenticated
Dec 19 10:22:58 172.16.20.24 pppoe,ppp,info <pppoe-customer2>: disconnected
まず切断、それを追加するのは簡単。
{"connection" : [{
"start" : "Dec 19 10:12:58"
"stop" : "Dec 19 10:20:58",
"username" : "customer2"}
次の認証では、この特定のユーザーを検索し、新しい「開始」接続時間を挿入し、「停止」を消去する必要があります。等々。私に
{"connection" : [{
"start" : "Dec 19 10:21:48"
"username" : "customer2"}
- 次の挑戦者、その新しい絞り込みリストを作成します。
これをしようとしましたが機能しません。
conn = []
for l in log:
obcon = dict()
if not obcon:
obcon['USER'] = l['USER']
if l['DATA'] == 'connected':
obcon['START'] = l['DATA']
obcon['STOP'] = ""
else:
obcon['STOP'] = l['DATA']
conn.append(obcon)
新しいリストを作成する前に、一部のユーザーが存在するかどうかを確認する必要があります。 ['接続']私は開始/停止接続を識別するために使用します:
Disconnected -> STOP
Connected -> START
もっと具体的にする必要があるかどうかわかりません。 アイデアが必要です。お願いします!
これは素晴らしいです!しかし私は別の質問があります。私はそれに似た11のログを持っています、あなたはどう思いますか?私はそれを関数に入れ、それを各LOGに "インスタンス化"する必要がありますか?つまり、行がログに追加されるたびに、FORを再度実行しますか?あなたは分かったのですか、私は混乱していますか? – TMoraes
@TMoraesうーん、私はあなたの必要性を正確に理解することができません。もう一度説明してください。 – DjLegolas
質問を更新します。 – TMoraes