Skip to content

cdsl-research/C0A22166-P99

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 

Repository files navigation

container-logs-to-metrics

構成

/home/c0a22166/teian
├── /syukeifairu
|   ├──<終了時刻の年月日-時刻>.csv
├── log_totalling_1week.py
├── P99.py

実行する環境

  • Python verion:3.12.3

プログラムの概要

  • このシステムは、ログ集計プログラムであるlog_totalling_1week.pyと、集計結果をもとにパーセンタイル99(P99)の値を求めるP99.pyの2つのプログラムで構成されています。
  • まず、log_totalling_1week.pyを実行して1週間分のログを集計し、次に集計結果を入力としてP99.pyを実行することで、P99の値を求め、異常有のコンテナを特定する流れになっています。

環境の構築

  • elasticserchモジュールとpandas、numpy、pytz、tabulateライブラリをインストールする必要があります。
    • インストールされていない場合は下記のコマンドを入力して、コマンドを実行して下さい。
  1. 仮想環境の作成
python3 -m venv venv

実行結果

スクリーンショット 2025-10-31 110855
  1. 仮想環境の有効化
source venv/bin/activate

実行結果

スクリーンショット 2025-10-31 110917
  1. elasticsearchモジュールのインストール
pip install elasticsearch

実行結果

スクリーンショット 2025-10-31 111021
  1. pandas、numpy、pytz、tabulteライブラリのインストール
pip install pandas numpy pytz tabulate

実行結果

スクリーンショット 2025-10-31 111134

log_totalling_1week.py

説明:このプログラムは1週間のログを1分単位でコンテナ名別に集計し、結果をCSVファイルに出力します。

まず、ユーザは終了時刻を入力します。終了時刻を入力すると、その1週間前から終了時刻までのログを集計します。

次に、Elasticsearchのbeats-* indexに保存されたログを対象にコンテナ名別、1分単位で1週間分のログ件数を集計します。

そして、集計されたログ件数は1日ごとにCSVファイルとして/home/c0a22166/teian/syukeifairuに出力されます。

  • 入力は、Elasticsearchのbeats-* indexに保存されたログを入力します。
  • 出力は、1分単位のログの時間帯、コンテナ名、ログ件数、1分前のログ件数からの変化、日にち別の集計結果のCSVファイル

使い方:

image

実行結果

image
  • 例:20250510-1445.csvの出力結果の一部
image

注意

  • 集計したいログのindexを変更するには、log_totalling_1week.pyの以下の部分を変更してください。(log_totalling_1week.pyの19行目)
    • 'beats-*'の部分を変更することで集計するindexを変更することができます。
ES_INDEX_PATTERN = 'beats-*'
  • 集計の頻度を変更するには、log_totalling_1week.pyの以下の部分を変更してください。(log_totalling_1week.pyの107行目)
    • minute = timestamp.minuteの状態だと1分ごと集計されます。
    • minute = (timestamp.minute // 15) * 15にすることで15分ごとに集計されます。
    • hour = (timestamp.hour // 2) * 2にすることで2時間ごとに集計されます。
minute = (timestamp_jst.minute // 1) * 1
  • 集計の期間を変更するには、log_totalling_1week.pyの以下の部分を変更してください。(log_totalling_1week.pyの157行目)
    • ()の中をdays=1にすることで1日間、minutes=30にすることで30分間というように変更できます。
start_time_total = end_time_jst - timedelta(days=7)

P99.py

説明:このプログラムはlog_totalling_1week.pyによってhome/c0a22166/teia/syukeifairuに出力された複数のCSVファイルを読み込み、統合し、P99で求めた閾値からどのコンテナで異常が発生しているかを判定します。

まず、ユーザがカンマ区切りでCSVファイルのファイル名を入力します。

次に、home/c0a22166/teia/syukeifairuディレクトリにある該当ファイルをフルパスで参照し、各ファイルの時間帯列をdetetime型に変換して1つのデータフレームに統合します。

そして、統合したデータからログ件数が0のレコードを除外してP99の値を各コンテナごとに計算します。

統合したデータ内の最新の時間帯のログ件数を抽出し、各コンテナごとに最新の時間帯のログ件数がP99より値が大きいかを比較し、値が大きい場合、異常有と判定し出力します。

出力の結果はコンソールに出力されます。

  • 入力は、home/c0a22166/teia/syukeifairuに保存されたCSVファイルです。
  • 出力は、各コンテナごとの最新のログ件数、P99閾値、判定結果を含むコンソールです。

使い方:

image

実行結果

image

注意

  • CSVファイルは/home/<ユーザ名>/teian/syukeifairuに保存されている必要があります。
    • 今回の場合、c0a22166が<ユーザ名>に該当し、/teian/syukeifairuはディレクトリを作成してください。
  • log_totalling_1week.pyによって事前にログ集計ファイルを生成しておく必要があります。

About

パーセンタイル99

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages