中国の 11 月 11 日のショッピングキャンペーンと言えば、優れた Tmall リアルタイム大画面が想起されます。また、リアルタイムの大画面と言えば、最も典型的なストリームコンピューティングアーキテクチャが想起されます。

  • データ収集: 各ソースからリアルタイムにデータ収集
  • リアルタイムコンピューティング: コンピューティングルールを使用して、リアルタイムデータを取得し、期間内のデータを計算します。処理の要に当たります。
  • 結果の保存: SQL および NoSQL データベースの処理結果を保存
  • 可視化: API 呼び出しで結果を表示

Alibaba グループには、上記の処理を実行する高機能なプロダクトが多数用意されております。よく使用されているプロダクトは、下図のとおりです。

図 1. 関連プロダクト

上記のソリューション以外に、Log Service の照会/分析 API を使用して DataV を連携させて、データを大画面表示させることもできます。

図 2. Log Service + DataV

Log Service のリアルタイムログ分析機能 (照会/分析) は、2017 年 9月に強化されています。照会および SQL92 構文を使用してログをリアルタイムに分析できるようになっています。Log Service には埋め込みダッシュボードのほか、Grafana や Tableau (JDBC) と連携させて解析結果を可視化することもできます。

機能の特徴

一般的に、データ量、リアルタイム性、およびビジネス要件より、次の 2 つのコンピューティングモードに分けられます。

  • リアルタイムコンピューティング (ストリームコンピューティング): 固定コンピューティング + 可変データ
  • オフラインコンピューティング (データウェアハウス + オフラインコンピューティング): 可変コンピューティング + 固定データ

Log Service でのリアルタイムなデータ収集には、2 つの接続方法があります。また、ログ分析シナリオではリアルタイム性が問わますが、LogHub データはリアルタイムにインデックス作成されます。インデックスが作成されたら、さらに、「ログの照会/分析」よりデータを直接照会/分析することができます。この方法には次のような利点があります。

  • 高速: API でクエリが引き渡されるとすぐに結果が得られます。待ち時間がなく、、または事前に計算することなく、結果を事前に計算する必要はありません。
  • リアルタイム: 生成されたログを 1 秒以内に大画面表示 (99.9 %)
  • 動的: 統計方法の変更やデータが補足された場合でも、亢進による再計算結果はリアルタイムに表示されます。

しかし、万能なコンピュータシステムはこの世にはありません。 この機能には、次の制限があります。

  • データ量: 一度に処理可能なデータは最大 100 億 GB。データ量を超える場合は制限時間を設定する必要があります。
  • コンピューティングの柔軟性: 現在、SQL92 構文のみ処理可能。カスタム化 UDF には非対応。
図 3. Log Service の利点

構成プロセス

操作のデモンストレーション

Log Service データを DataV と連携させる手順は、次のとおりです。

  1. データを収集します。 Log Service のデータソースを設定する方法は、 5分でクイックスタートをご参照ください。
  2. インデックスを設定するにはインデックスの設定及び可視化、またはベストプラクティスのWeb サイトログ分析をご参照ください。
  3. DataV プラグインと相互接続し、SQL ステートメントを使用して検索されたリアルタイム結果をビューに変換します。

ステップ 1 と 2 を完了すると、検索ページで生ログを表示できます。 本ドキュメントでは、主にステップ 3 の実行方法について説明します。

手順

ステップ 1 DataV データソースの作成

左側のナビゲーションメニューで データソースをクリックします。 ソースを追加をクリックします。 新しいデータソースダイアログボックスが表示されます。データソースの基本情報を入力します。 設定項目は下表のとおりです。

図 4. データの作成
構成項目 説明
タイプ Log Service (SLS) を選択します。
名前 データソースの名前を設定します。
AK ID メインアカウントの AccessKey ID、または Log Service を読み込む権限を持つサブアカウントの AccessKey ID。
AK Secret メインアカウントの AccessKey Secret、または Log Service を読み込む権限を持つサブアカウントの AccessKey Secret。
エンドポイント Log Service プロジェクトが存在するリージョンのアドレス。 上図では、杭州リージョンのアドレスが入力されています。

ステップ 2 折れ線グラフの作成

  1. 折れ線グラフを作成します。

    折れ線グラフのデータ構成で、データソースタイプを Log Service (SLS) に設定し、前のステップで作成したデータソース log_service_api を選択し、クエリテキストボックスにパラメーターを入力します。

    図 5. データソース

    クエリパラメーターの例は次のとおりです。パラメーターを次の表に示します。

    {
     "projectName": "dashboard-demo",
     "logStoreName": "access-log",
     "topic": "",
     "from": ":from",
     "to": ":to",
     "query": "*| select approx_distinct(remote_addr) as uv ,count(1) as pv , date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d %H:%i:%s') as time group by time order by time limit 1000" ,
     "line": 100,
     "offset": 0
    }
    構成項目 説明
    projectName プロジェクト名
    logstoreName Logstore 名
    topic ログトピック。 トピックを設定しない場合は、パラメータ値を空のままにします。
    from、to ログの開始時刻と終了時刻をそれぞれ指定します。
    上記の例では、各パラメータは次のように設定されています。:from:to。 テスト中に、UNIX で時刻を入力できます 形式の例:1509897600。 リリース後に、時間を :from および :to に変換し、URL パラメータで特定の時間範囲を設定します。 たとえば、プレビューされた URL は http://datav.aliyun.com/screen/86312 です。 http://datav.aliyun.com/screen/86312?from=1510796077&to=1510798877 を開くと、指定した時間に基づいて値が計算されます。
    query クエリ条件。 上記の例での検索条件は、1分当たりの PV です。クエリ構文の詳細は、分析文法をご参照ください。
    クエリに記述する時間の書式は 2017/07/11 12:00:00 にします。時間の書式を変換する方法は、
    date_format(from_unixtime(date_trunc('hour',__time__) ) ,'%Y/%m/%d
                        %H:%i:%s')
    line デフォルト値の 100 のままにします。
    offset デフォルト値の 0 のままにします。

    構成後、データレスポンスを表示をクリックします。

    図 6. データレスポンスを表示
  2. フィルターを作成します。

    データレスポンスを表示をクリックすると、データレスポンス結果ダイアログボックスが表示されます。フィルターを使用を有効にし、フィルターの選択新規フィルターの順にクリックしてフィルターを作成します。

    次の形式でフィルタの内容を入力します。

    return Object.keys(data).map((key) => {
    let d= data[key];
    d["pv"] = parseInt(d["pv"]);
    return d;
    }
    )

    フィルターで、y 軸で使用される結果を int 型に変換します。 例では、y 軸は pv を示します。 したがって、pv 列を変換する必要があります。

    結果には、t 列と pv 列の両方が含まれています。 x 軸を t に、y 軸を pv に設定できます。

ステップ 3 円グラフの構成

  1. カルーセル円グラフを作成します。
    図 7. 検索テキストボックス

    検索テキストボックスに次の内容を入力します。

    {
     "projectName": "dashboard-demo",
     "logStoreName": "access-log",
     "topic": "",
     "from": 1509897600,
     "to": 1509984000,
     "query": "*| select count(1) as pv ,method group by method" ,
     "line": 100,
     "offset": 0
    }

    検索中に、さまざまなメソッドの比率を計算できます。

  2. フィルタを追加して、フィルタに次のような内容を入力します:
    return Object.keys(data).map((key) => {
    let d= data[key];
    d["pv"] = parseInt(d["pv"]);
    return d;
    }
    )

    円グラフの type テキストボックスに method と入力し、value テキストボックスに pv と入力します。

ステップ 4 プレビューとリリース

大画面を作成するには、プレビューして公開をクリックします。 開発者とビジネス担当者は、11/11 ショッピングキャンペーンで、ビジネスアクセス状況をリアルタイムに確認できます。

お試しデモ。 URL の from および to パラメータの値はいつでも設定できます。

図 8. リアルタイム画面

ユースケース: 統計基準の下でリアルタイムの大画面を継続的に調整する

たとえば、Computing Conference 中は、中国全体のオンライン (Web サイト) トラフィックをカウントするという一時的な要件が発生します。Log Service ですべてのログデータ収集が設定され、照会/分析が有効になります。 したがって、クエリ条件さえ入力すれば良いです。

  1. たとえば、UV をカウントするには、10 月 11 日から現在までのすべてのアクセスログから、Nginx の下のforward フィールドの一意のカウントを取得する必要があります。
    * | select approx_distinct(forward) as uv
  2. システムが1日間オンラインになった後、要件が変更されます。 現在、ドメイン yunqi の下のデータのみをカウントすることになりました。リアルタイム検索にフィルタ条件(ホスト)を追加できます。
    host:yunqi.aliyun.com | select approx_distinct(forward) as uv
  3. Nginx のアクセスログに複数の IP アドレスが含まれていることが検出されました。 デフォルトでは、最初の IP アドレスだけが必要となります。 したがって、検索で検索条件を処理します。
    host:yunqi.aliyun.com | select approx_distinct(split_part(forward,',',1)) as uv
  4. 3日目の要件によると、アクセスコンピューティングからuc の中の広告アクセスを削除する必要があります。 この場合、フィルタ条件 not ... を追加することで、最新の結果をすぐに取得できます。
    host:yunqi.aliyun.com not url:uc-iflow | select approx_distinct(split_part(forward,',',1)) as uv