AWR情報抽出プログラム

  この記事ではAWR情報抽出プログラムについて解説します。

 概要

複数のAWRレポートから特定の情報を抽出し、csvファイルに書き出しを行うプログラムです。

CPU使用率やキャッシュヒット率の推移などを確認するのに有用なプログラムです。

Pythonを用いて作成したプログラムのため使用にはPythonのインストールが必要です。


 プログラム

プログラムは以下の通りとなります。

import os
import csv
from bs4 import BeautifulSoup

# 現在のディレクトリを取得
current_dir = os.getcwd()

# ディレクトリ内のすべてのHTMLファイルを探す
html_files = [f for f in os.listdir(current_dir) if f.endswith('.html')]

# 出力先CSVファイル
output_csv_file = 'awr_summary.csv'

# CSVファイルを開き、書き込む
with open(output_csv_file, mode='w', newline='', encoding='utf-8') as csvfile:
    # CSVライターを作成
    fieldnames = ['File Name', 'Begin Snap Time', 'Host CPU %User', 'Host CPU %System', 'Buffer Hit %', 'Library Hit %', 'PGA use(MB)']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    # ヘッダー行を書き込む
    writer.writeheader()

    # HTMLファイルが見つかった場合
    if html_files:
        # 各HTMLファイルを処理
        for html_file in html_files:
            html_file_path = os.path.join(current_dir, html_file)
            
            # HTMLファイルを開いて読み込む
            with open(html_file_path, 'r', encoding='utf-8') as file:
                html_code = file.read()

            # BeautifulSoupでHTMLを解析
            soup = BeautifulSoup(html_code, 'html.parser')

            # 「Begin Snap:」の「Snap Time」を抽出
            begin_snap_time = soup.find('table', summary="This table displays snapshot information").find_all('tr')[1].find_all('td')[2].text.strip()

            # 「Host CPU」の「%User」を抽出
            host_cpu_user = soup.find('table', summary="This table displays system load statistics").find_all('tr')[1].find_all('td')[5].text.strip()

            # 「Host CPU」の「%System」を抽出
            host_cpu_system = soup.find('table', summary="This table displays system load statistics").find_all('tr')[1].find_all('td')[6].text.strip()

            # 「Instance Efficiency Percentages」の「Buffer Hit %:」を抽出
            buffer_hit = soup.find('table', summary="This table displays instance efficiency percentages").find_all('tr')[1].find_all('td')[1].text.strip()

            # 「Instance Efficiency Percentages」の「Library Hit %:」を抽出
            library_hit = soup.find('table', summary="This table displays instance efficiency percentages").find_all('tr')[2].find_all('td')[1].text.strip()
            
            # 「Memory Statistics」の「pga use(MB):」を抽出
            pga_use = soup.find('table', summary="This table displays memory statistics").find_all('tr')[3].find_all('td')[2].text.strip()

            # CSVに書き込む
            writer.writerow({
                'File Name': html_file,
                'Begin Snap Time': begin_snap_time,
                'Host CPU %User': host_cpu_user,
                'Host CPU %System': host_cpu_system,
                'Buffer Hit %': buffer_hit,
                'Library Hit %': library_hit,
                'PGA use(MB)': pga_use
            })
    else:
        print("同じフォルダ内にHTMLファイルが見つかりませんでした。")

print(f"結果が'{output_csv_file}'に保存されました。")

抽出する情報は「File Name」、「Begin Snap Time」、「Host CPU %User」、「Host CPU %System」、「Buffer Hit %」、「Library Hit %」、「PGA use(MB)」となっています。

取得する情報はカスタマイズ可能です。


 使用方法

PythonをインストールしたWindows端末で実行を行います。

任意のフォルダに上記のプログラムファイル「extract_awr_data.py」を配置します。

同フォルダ内に情報抽出を行うhtml形式のAWRレポートファイルを配置します。

Windows PowerShellを起動し、プログラムを配置したフォルダへ移動します。

cd .\Desktop\python\

BeautifulSoup を使用しているため、インストールしていない場合はインストールします。

python -m pip install beautifulsoup4

インストールが完了したらプログラムを実行します。

python .\extract_awr_data.py

「結果が'awr_summary.csv'に保存されました。」と表示されたら完了になります。

同フォルダに「awr_summary.csv」が作成され、格納したAWRレポートの情報がcsv形式でまとめて出力されます。