グッドモーニング、パイソン - いくつかのロジックを持つログファイルをループ
私はもっぱら学習のpythonの目的のために、小規模なプロジェクトにとっています。 これまでのところ、スクリプトは別のサーバにsshして、ダウンしているノードのリストを取得します。私はこれを変更して、ダウンしているノードのリストをtmpファイルに格納し、翌日にはもう一方を比較し、昨日ダウンしていないノードでしか動作しないようにしたい。しかし、その部分は待つことができます...
私は現在、いくつかのログファイルでさまざまな文字列を検索していますが、特定のノードの行数が一定数を超えている場合は、端末に送信されるのではなく、メッセージが送信されます。「ログエントリが多すぎます」というエントリが/ tmp/..に保存されます。
ここまでは私が今まで持っていることはありますが、あなたは私のスクリプトのために、他のアドバイスを持っている場合。
また、私は無限に感謝するでしょう。私が学んでいますが、それはゆっくりと沈んだ!:)
#!/usr/bin/python
#
from subprocess import *
import sys
from glob import glob
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-f', metavar='logname', help='logfile to check')
args = parser.parse_args()
ssh = Popen(["ssh", "[email protected]", 'check_nodes'],
shell=False,
stdout=PIPE,
stderr=PIPE)
result = ssh.stdout.readlines()
down_nodes=[]
status_list=["down", "admindown"]
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
for line in result[1:]:
columns = line.split()
status = columns[3]
nodes = columns[2]
if status in status_list:
down_nodes.append(nodes)
if args.f:
logs = args.f
else:
try:
logs = glob("/var/log/*")
except IndexError:
print "Something is wrong. Logs not available."
sys.exit(1)
valid_errors = ["error", "MCE", "CATERR"]
for log in logs:
with open("log", "r") as tmp_log:
opn_log = tmp_log.readlines()
for line in open_log:
for down_nodes in open_log:
if valid_errors in open_log:
print valid_errors
一種の私がこれまで持っています、テストでは動作しますが、エラーはvalid_errors
で見つかるだけで、down_node
とvalid_errors
が同じになる行は見つかりません時間。また、日付とおそらく何かのような、down_node
、valid_errors
を含むログの行には、3日以上の日付文字列が含まれています。
金曜日から - 私は何にもPythonを使用していませんでした。私はシェルスクリプトだけで働いていて、必要なものに完璧なbashスクリプトを見つけました。だから私は初心者です... :)
おかげ は、それが明確になる場合、私は私の具体的な質問を分解してきたジョン・
ファイルの行の上に行くループは、ファイルの上に行く1内にネストされなければなりません。また、valid_errorsはリストであり、間違った構文を使用して行にエントリがあるかどうかを確認しています。そのためにsubstrを使用することができます。行は使用されず、open_logのスペルは間違っています。ファイル内のエントリを1つ見つけて小さなものから始め、そこから移動します。 – postoronnim
お世話になりました。スペルミスは、ここにコピー/ペーストしたり、いくつかのsrvの名前を変更したり、変数の名前などを変更したときに何かを変更したためです。substrを見て、それを理解できるかどうかを確認します。私は、 'valid_errors'と' down_node'の中の何らかのエラーと日付を含む行を見つける必要があります。だから私はずっとそれを演奏する必要があります。 – jonnybinthemix
はい、一度に多くの新しいことに取り組んできたようです。小さな部分でそれを分解し、それらの部分に取り組んでください。それが助けられたならば、自由にアップアップしてください。 – postoronnim