📖
PythonでHAproxyのログを抽出する方法
やりたいこと
Pythonを使ってアクセスログの分析をしたく、サーバーからHAproxyのログをPythonで取得できないかと思って作ってみたらできたので残しておく。
前提条件
- ログを取得したいサーバーへSSHコマンドでアクセスできるようにしておく
- 鍵の設定などを済ませておく
説明
- HAproxyのログは/var/log/に作られる
- ログのファイル名は以下のようになっている(おそらくデフォルト)
haproxy.log ←リアルタイムのログ
aproxy.log.1 ←リアルタイムのバックアップログ
haproxy.log.2.gz ←1つ前のバックアップログ(gzに圧縮されている)
haproxy.log.3.gz ←2つ前のバックアップログ(gzに圧縮されている)
・
・
haproxy.log.7.gz ←6つ前のバックアップログ(gzに圧縮されている)
ソースコード
configを使用して.envにローカルの保存場所などを設定できるようにしてある。
日時のディレクトリを作成し、server01とserver02からHAproxyのログを取得して、それぞれのサーバー名のディレクトリに保存する動作となる。
.env
PATH_LOG_SAVED==****
PATH_ANALIZELOG_SAVED==****
PATH_BATCH_LOG==****
PATH_PROJECT=****
config.py
from dotenv import load_dotenv
import os
load_dotenv()
PATH_LOG_SAVED = os.getenv('PATH_LOG_SAVED')
PATH_ANALIZELOG_SAVED = os.getenv('PATH_ANALIZELOG_SAVED')
PATH_BATCH_LOG = os.getenv('PATH_BATCH_LOG')
PATH_PROJECT = os.getenv('PATH_PROJECT')
import subprocess
import os
from datetime import datetime
import config
def execute_cmd(name_server, name_file, path_save):
str_cmd = 'ssh {0} "sudo cat /var/log/{1}" > {2}{1}'.format(name_server, name_file, path_save)
print("{}".format(str_cmd))
subprocess.run(str_cmd, shell=True)
def get_haproxy_log(name_server, path_save):
name_file = "haproxy.log"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.1"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.2.gz"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.3.gz"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.4.gz"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.5.gz"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.6.gz"
execute_cmd(name_server, name_file, path_save)
name_file = "haproxy.log.7.gz"
execute_cmd(name_server, name_file, path_save)
if __name__ == '__main__':
# 日時ディレクトリ作る
name_datetime = datetime.now().strftime("%Y%m%d%H%M")
print(name_datetime)
for i in range(0, 2):
name_server = "server{0:02}".format(i + 1)
path_save = "{}{}/{}/".format(config.PATH_LOG_SAVED, name_server, name_datetime)
print(path_save)
os.mkdir(path_save)
get_haproxy_log(name_server, path_save)
Discussion