前節では、チュートリアルデータに対して簡単なサーチを実行してみました。
ここでは、第3章・第4章で学んだSPLを実際に打ち込みながら、
架空のオンラインストア「Buttercup Games」のWebアクセスログを分析していきます。
題材となるデータはインデックスmain、ソースタイプはaccess_combined_wcookieです。
「アクセス状況の把握 → 売上分析 → エラー分析」というストーリーで進めていきましょう。
以降のSPLはコピーして貼り付ければそのまま試せます。
時間範囲は「All time(全期間)」にしておくと、チュートリアルデータ全体が対象になります。
うまく結果が出ないときは、まずindex=mainだけで検索してデータの中身を眺めてみましょう。
1. まずは全体像をつかむ
分析の第一歩は、どんなアクセスがあるのかをざっくり眺めることです。
topコマンドを使えば、多い順の上位を手早く確認できます。
index=main sourcetype=access_combined_wcookie | top limit=10 clientip
これで、もっともアクセスの多いクライアントIPの上位10件が件数付きで表示されます。
同じ要領で、利用者がサイト上で行った操作(action)の内訳も見てみましょう。
index=main sourcetype=access_combined_wcookie | top action
actionにはpurchase(購入)、addtocart(カート追加)、view(閲覧)などが入っており、
サイト上でどの操作が多いのかが一目で分かります。
2. 商品カテゴリ別・ステータス別に集計する
次は集計の主役であるstatsです。商品カテゴリ(categoryId)ごとの
アクション数を数えて、どのジャンルがよく見られているかを調べます。
index=main sourcetype=access_combined_wcookie | stats count by categoryId
byのうしろにフィールドを2つ並べると、組み合わせごとの集計になります。
HTTPステータス(status)とアクションのクロス集計を見てみましょう。
index=main sourcetype=access_combined_wcookie
| stats count by status, action
3. 時系列でアクセス推移を見る
アクセスが時間とともにどう変化したかはtimechartで可視化できます。
1時間ごとの件数を、ステータス別に折れ線で表せます。
index=main sourcetype=access_combined_wcookie
| timechart span=1h count by status
サーチ後に「Visualization(可視化)」タブへ切り替えると、 この結果を折れ線グラフとして確認できます。急増している時間帯があれば、 そこで何かが起きたサインかもしれません。
4. evalで新しいフィールドを作る
evalを使うと、既存のフィールドから新しいフィールドを計算して作れます。
ここでは購入イベントだけに絞り、転送バイト数をKB単位に変換してみます。
index=main sourcetype=access_combined_wcookie action=purchase
| eval kb=round(bytes/1024, 2)
| table clientip, productId, kb
round()は指定した桁で四捨五入する関数です。tableコマンドで、
見たいフィールドだけを表形式に並べています。
5. lookupで商品情報を付加する
ログには商品ID(productId)しか入っていないため、
「どの商品がいくらで売れたのか」はlookupで商品マスタを突き合わせて補います。
チュートリアルに含まれるprices.csvには、商品IDに対応する
商品名(product_name)と価格(price)が定義されています。
index=main sourcetype=access_combined_wcookie action=purchase
| lookup prices.csv productId OUTPUT product_name, price
| stats sum(price) as sales by product_name
| sort -sales
このSPLは、(1)購入イベントに絞り、(2)lookupで商品名と価格を付加し、
(3)商品名ごとに価格を合計して売上を求め、(4)売上の多い順に並べています。
これで「もっとも売れている商品」がランキングとして得られ、立派な売上分析になります。
6. エラーの発生状況を調べる
最後にエラー分析です。500番台のサーバーエラーがいつ、どのくらい起きたかを追います。
index=main sourcetype=access_combined_wcookie status>=500
| timechart span=1h count
topやstatsのようなTransformingコマンドを通さないと、グラフや表にはなりません。
「集計してから可視化する」という流れを意識しましょう。
7. まとめ
topは多い順の上位を手早く確認するのに便利statsはbyで軸を指定してカテゴリ別・ステータス別に集計できるtimechartで時系列の推移をグラフ化できるevalで新しいフィールドを計算し、lookupで外部データ(商品情報)を付加できる- 絞り込み → 集計 → 並べ替えの組み合わせで、売上分析やエラー分析ができる