ロード・トゥ・ザ・ホワイトハッカー

ホワイトハッカーはじめました

ログ表示(WEBサーバー編)

データの可視化

以前、Pythonの可視化ツールの中でPlotlyについて書いた。

chikuwamarux.hatenablog.com

 

それを使って、集計したデータを可視化する。

データはWEBサーバーのログを使用。

chikuwamarux.hatenablog.com

 

事例集

1時間ごと(level_0)のサーバー(c-ip)ごとのアクセス数(count)が、以下のようにDataFrame(log2)に格納されている場合。

f:id:chikuwamaruX:20211225093035p:plain

 

  • 棒グラフ

import plotly.express as px
px.line(
    log2,
    x='level_0',
    y="count"
).show()

と書くと、以下が表示される。マウスカーソルをグラフに合わせると、詳細な値を表示してくれます。

f:id:chikuwamaruX:20211225093429p:plain

  • 面グラフ

px.area(
    log2,
    x='level_0',
    y='count',
    color='c-ip'   
).show()

f:id:chikuwamaruX:20211225093654p:plain

右側に表示されている凡例をクリックすることで表示・非表示されます。

192.168.150.221を非表示にした場合。

f:id:chikuwamaruX:20211225093800p:plain

  • ファセット

並べて表示したい場合は、ファセットを使用する。

px.area(
    log2,
    x='level_0',
    y='count',
    color='c-ip',
    facet_row='c-ip'
).show()

f:id:chikuwamaruX:20211225093946p:plain

 

  • アニメーション

アニメーションの表示もできる。再生ボタンを押すと、グラフが変化します。この場合は例が適切ではないですが。。。

px.area(
    log2,
    x='level_0',
    y="count",
    animation_frame='c-ip'
).show()

f:id:chikuwamaruX:20211225094140p:plain

  • サンバーストグラフ

サンバーストグラフにすると、ドリルダウン的にデータを見れる。

px.sunburst(
    log2,
    path=['c-ip','level_0'],
    values="count"        
).show()

 

f:id:chikuwamaruX:20211225094716p:plain

この表示から、IPアドレスをクリックすると、明細が表示される。

192.168.150.163をクリックした場合。アニメーションで徐々に変わっていくところが、手が込んでいる。

f:id:chikuwamaruX:20211225094812p:plain

  • ツリーマップ

ほぼ同じ構文でツリーマップも表示され、当然ドリルダウン可。

px.treemap(
    log2,
    path=['c-ip','level_0'],
    values="count"        
).show()

f:id:chikuwamaruX:20211225095200p:plain

  • 散布図

データとしては相応しくないですが、散布図は以下の通り。

px.scatter(
    log2,
    x='level_0',
    y="c-ip",
    size='count'    
).show()

f:id:chikuwamaruX:20211225095403p:plain

まとめ

Plotlyはデータの表現力とインタラクティブ性で、データ探索している気分にさせてくれます。

DashというWebアプリケーションのフレームワークと組み合わせることで、Webアプリとして使うこともできるようです。

セキュリティ維持のために、ログの収集・集計・異常値の検出あたりをPythonで自動化して、それがPlotlyなどで可視化されて人間が目視で確認することが理想なのか、と思います。