ウェブサイトトラフィックインジケーターの統計

ウェブサイトのトラフィックインジケータの統計については、一般的に次の次元に分けることができます

  • 1日あたりのページビューをカウントする
  • 1日あたりのユニークビジター数をカウントします(人数で)
  • 1日あたりの独立したセッションの数を数える
  • 訪問者地域別の統計
  • 統計訪問者のIPアドレス
  • 発信元によるページ分析
    上記の指標を収集した後、期間ごとにWebサイトの全体的な状況を分析できます。
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入
    ここに写真の説明を挿入

このプロジェクトの統計指標は次のように要約されます

  1. PV、ページビュー。ユーザーがページを1回クリックすると、PVであっても、更新操作もカウントされます。1日の総PVをカウントします。
  2. UV、ユニークな訪問者の数。人員に応じて、1日にウェブサイトにアクセスするさまざまなユーザーの数をカウントします。アイデアの処理:ユーザーがWebサイトにアクセスすると、バックグラウンドでユーザーのユーザーID(uvid)が生成され、ユーザーのブラウザーのCookieにuvidが保存され、ユーザーが次にアクセスしたときにuvid情報が運ばれます。したがって、このインジケーターは実際には1日にいくつの異なるuvidがあるかをカウントします。
  3. VV、独立したセッションの数(セッション)。1日のさまざまなセッションの数と、新しいセッションを生成するための条件を数えます。1。ブラウザーを閉じて再度開くと、新しいセッションが生成されます。2セッション操作のタイムアウト期間(通常は30分)の後、新しいセッションが生成されます。実装のアイデア:新しいセッションが生成されると、バックグラウンドはこのセッションのセッションID(ssid)を生成し、それをCookieに保存します。したがって、VVをカウントすることは、実際には1日にいくつの異なるssidがあるかをカウントすることです。
  4. BR、ページバウンス率(バウンスセッション/ VV合計セッション)。アウトオブセッションとは、1つのアクセス動作のみを生成するセッションを指します。したがって、BRインジケーターはWebサイトの卓越性を測定できます。インデックスが高いほど、ユーザーにとっての魅力は低くなり、改善する必要があります。
  5. NewCust、新規ユーザーの数。今日のユーザーが履歴データに表示されたことがない場合、このユーザーは新しいユーザーとしてカウントされます。履歴データに表示されていない今日のuvidの数を数えます。
  6. NewIp、IP番号を追加します。今日の履歴データに表示されていないIPの数を数えます。
  7. AvgDepp、平均セッション深度。AvgDeep =合計セッションアクセス深度/合計セッション数(VV)。その中で、合計セッションアクセス深度=各セッションのアクセス深度の合計、および各セッションのアクセス深度=アクセスされる異なるURLアドレスの数。
  8. AvgTime、平均セッションアクセス時間。AvgTime =合計セッションアクセス期間/合計セッション数(VV)。その中で、合計セッション期間=各セッションの期間の合計。
    ページが開かれたときのタイムスタンプをカウントし、各セッションの合計アクセス時間を計算できます。しかし、実稼働環境では、最後のページの滞在時間が取得できないため、計算された理論値は実際の値よりも小さくなります。
    各セッションの合計期間をカウントします。つまり、Max TimeStamp-MinTimeStampです。

データの埋め込みポイントとコレクション

ここに写真の説明を挿入

プロジェクト構造

ここに写真の説明を挿入
ここに写真の説明を挿入
オフラインバッチ処理では、次のものを使用できます。MapReduce、HiveデータETL(Extract Transform Load)
ここに写真の説明を挿入
結果ファイルがデータベースにエクスポートされます。データの視覚化を行います。フロントエンドはデータベースからデータを抽出します。
ここに写真の説明を挿入
ここに写真の説明を挿入

水路構成


a1.sources = s1
a1.channels = c1
a1.sinks = k1

a1.sources.s1.type = avro
a1.sources.s1.bind = 0.0.0.0
a1.sources.s1.port = 44444
a1.sources.s1.interceptors=i1
a1.sources.s1.interceptors.i1.type=timestamp

a1.channels.c1.type = memory
#配置flume的通道容量,表示最多1000个Events事件。在生产环境 ,建议在5万-10万
a1.channels.c1.capacity = 1000
#批处理大小,生产环境建议在1000以上。(capacity和transactionCapacity )这两个参数决定了Flume的吞吐能力
a1.channels.c1.transactionCapacity = 100

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path=hdfs://hadoop01:9000/weblog/reporttime=%Y-%m-%d
//按时间周期滚动生成一人和。生产环境,建议在1小时及以上。避免生成大量小文件。
a1.sinks.k1.hdfs.rollInterval=30
#按文件大小滚动生成新文件。默认是1kb。如果是0,表示不按此条件滚动
a1.sinks.k1.hdfs.rollSize=0
#按文件中行数滚动。默认是10行
a1.sinks.k1.hdfs.rollCount=0
#Flume在HDFS生成文件时的格式,1默认格式是二进制格式。2DataStream
a1.sinks.k1.hdfs.fileType=DataStream


a1.sources.s1.channels = c1
a1.sinks.k1.channel =c1

启动水路
... / binに/水路-ngのエージェント-n A1 -c ... / confに/ -f weblog.conf -Dflume.root.logger = INFO、コンソール

オフラインデータ処理用のハイブ

  1. 合計テーブル(外部テーブル+パーティションテーブル)を作成します。url、urlname、colorなどのすべてのフィールドデータをロードして管理します。
  2. 合計テーブルにパーティション情報を追加します
  3. 有用な事業分野を一掃するためのクリーニングテーブル(内部テーブル)を設置します。
  4. クリーンアップされたフィールドデータを一般テーブルからクリーンアップされたテーブルに挿入します。
  5. このプロジェクトのさまざまな指標、pv、uv、vvの統計を保存するためのビジネステーブルを確立します...
  • 総テーブル構築ステートメント:

外部テーブルフラックスを作成します(url文字列、urlname文字列、タイトル文字列、chset文字列、scr文字列、col文字列、lg文字列、je文字列、ec文字列、fv文字列、cn文字列、ref文字列、uagent文字列、stat_uv文字列、stat_ss文字列、 cip string)PARTITIONED BY(reportTime string)行形式で区切られたフィールドは「|」で終了します 場所 '/ウェブログ';

  • データクリーニングテーブル

テーブルを作成するdataclear(reporttime string、url string、urlname string、uvid string、ssid string、sscount string、sstime string、cip string)行形式で区切られたフィールドは「|」で終了します。

クリーニングデータを挿入する

上書きテーブルdataclearを挿入し
ますselectreporttime、url、urlname、stat_uv、split(stat_ss、 " ")[0]、split(stat_ss、 " ")[1]、split(stat_ss、 "_")[2]、cip fromflux ;

  • ビジネステーブルを作成する

テーブルの作成tongji(reportTime string、pv int、uv int、vv int、br double、newip int、newcust int、avgtime double、a​​vgdeep double)行形式で区切られたフィールドは「|」で終了します。

  • 最終的な統計テーブル挿入データステートメント:

上書きテーブルtongjiselect '2019-09-19'、tab1.pv、tab2.uv、tab3.vv、tab4.br、tab5.newip、tab6.newcust、tab7.avgtime、tab8.avgdeep from(select count() as pv from dataclear where reportTime = '2019-09-19')as tab1、(select count(distinct uvid)as uv from dataclear where reportTime = '2019-09-19')as tab2、(select count(distinct ssid) as vv from dataclear where reportTime = '2019-09-19')as tab3、(select round(br_taba.a / br_tabb.b、4)as br from(select count()as from(select ssid from dataclear where reportTime = '2019-09-19' group by ssid has count(ssid)= 1)as br_tab)as br_taba、(select count(distinct ssid)as b from dataclear where reportTime = '2019-09-19')as br_tabb)as tab4、(select count(distinct dataclear.cip)as newip from dataclear where dataclear.reportTime = '2019-09-19' and cip not in(select dc2.cip from dataclear as dc2 where dc2.reportTime <'2019-09-19'))as tab5、(select count(distinct dataclear.uvid)as newcust from dataclear where dataclear.reportTime = '2019-09-19' and uvid not in(select dc2.uvid from dataclear as dc2 where dc2.reportTime <'2019-09-19'))as tab6、(select round(avg(atTab.usetime)、4)as avgtime from(select max(sstime)-min(sstime )as usetime from dataclear where reportTime = '2019-09-19' group by ssid)as atTab)as tab7、(select round(avg(deep)、4)as avgdeep from(select count(distinct urlname)as deep from dataclear where reportTime = '2019-09-19' group by ssid)as adTab)as tab8;

おすすめ

転載: blog.csdn.net/yasuofenglei/article/details/101012038