このプログラムの趣旨
このプログラムは、膨大なログの中から任意のIPアドレスを探し出すプログラムです。プログラム作成の背景
・お客さんから特定の通信先(複数個)とのログがないか確認して欲しいと依頼を受ける。 ・対象のログフォルダを確認してみると、1ファイルあたり数千行のログファイルが数千個存在。 ・手作業でのログ調査をあきらめ、空を見上げる。 ・Python触ったことあるし、なんとかしてプログラムで出来ないものか考えてみる。 ・作ってみた。プログラム処理のざっくり概要
・特定のフォルダ内のファイルを時系列順にソート ・ファイルを1つずつ読み込み、リスト化する ・確認したいIPアドレスと、リストの中身を比較する ・リスト内にあれば、見つかった旨をCSVに書き込むプログラムの中身
```log-finder.py import glob import csv import os import re'''
「XXXX」フォルダに入っているログに
任意のIPアドレスとの通信がないか確認するプログラムです。
検索したいIPアドレスリストは、「ipaddress_list.csv」に記載してください。
フォルダ構造は以下の通りです。
--XXXX
|--検索に使用するログファイルたち
--本プログラム
--ipaddress_list.csv
'''
#ファイルの最終更新時刻順にソートする
files = sorted(glob.glob("XXXX"), key=lambda f: os.stat(f).st_mtime, reverse=False)
フォルダ内のコンフィグを1個ずつ見ていく
for file in files:
# result.csvに書き込むための定義
with open('result.csv','a', newline='') as result_csv:
# 検索しているファイル名の表示
print(file + 'で検索しています・・・')
# 検索しているファイル名をCSVに書き込み
writer = csv.writer(result_csv)
# コンフィグを読み込んで、スペース区切りでリスト化
with open(file, mode='r', newline='', encoding='shift-jis', errors="ignore") as config_file:
lines = [line for line in config_file]
print('ログファイルを読み込みました')
# リストを全部結合する
total_line_list = ''
for line_list in lines:
total_line_list += line_list
# リスト内の要素を区切り文字で区切る
split_line_list = re.split(' |=|\r\n',total_line_list)
# print(split_line_list)
# 検索したいIPリストを記載したCSVファイルを読み込む
with open('ipaddress_list.csv') as f:
#csvファイルを2行目から読み込み(ヘッダースキップ)
reader = csv.reader(f)
next(reader)
serch_ipaddress = ''
for row in reader:
# 確認したいIPアドレスをリスト化
serch_ipaddress = row
# リストを文字列に変換
mapped_ipaddress = map(str, serch_ipaddress)
string_converted_ipaddress = ','.join(mapped_ipaddress)
# IPアドレスがコンフィグ内に存在するか確認
if string_converted_ipaddress in split_line_list:
writer.writerow([file + 'で' + string_converted_ipaddress + 'が見つかりました'])
else:
pass
writer.writerow([file + 'での検索が完了しました'])
※もっときれいなコードの書き方あるかもしれないけど、部署内にコーディングできる人がいないので完全に自己流です。
```ipaddress_list.csv
探したいIPアドレス(この行の読み込みはスキップされます)
192.168.0.1
192.168.0.2
プロンプト画面.
ログファイルを読み込みました
{ログファイル#1}で検索しています・・・
ログファイルを読み込みました
{ログファイル#2}で検索しています・・・
ログファイルを読み込みました
{ログファイル#3}で検索しています・・・
result.csv
{ログファイル#1}での検索が完了しました
{ログファイル#2}での検索が完了しました
{ログファイル#3}での検索が完了しました
{ログファイル#3}で192.168.0.1が見つかりました
あとはこれをpyinstallerでexeファイルにして、1クリックで実行できるようにしたら完了。
同じ依頼が数か月後も来たため、プログラム作成しておいてよかったと心の底から思ったのでした。