Simple Log Serviceでは、Function Computeを使用してストリーミングデータを変換できます。 データの更新を検出して関数を呼び出すために、extract-transform-load (ETL) ジョブを設定できます。 次に、Logstore内の増分データが消費され、変換されます。
シナリオ
Simple Log Serviceトリガーを使用して、次のシナリオでFunction ComputeとSimple Log Serviceを統合できます。
データのクレンジングと処理
Simple Log Serviceを使用すると、ログをすばやく収集、処理、クエリ、分析できます。
データ配信
Simple Log Serviceを使用すると、指定された宛先にデータを送信し、クラウド上のビッグデータサービス間にデータパイプラインを構築できます。
フィールドの前処理と出荷
列ストアの作成と配送
カスタム処理と結果ストレージ
ETL 関数
関数タイプ
テンプレート関数
詳細については、「aliyun-log-fc-functions」をご参照ください。
ユーザー定義関数
関数形式は、関数の実装に関連しています。 詳細については、「カスタム関数の作成」をご参照ください。
トリガーメカニズム
ETLジョブは、Simple Log Serviceトリガーに対応し、関数を呼び出すために使用されます。 Simple Log ServiceでLogstoreのETLジョブを作成すると、ジョブ設定に基づいてLogstoreのシャードからデータをポーリングするためのタイマーが開始されます。 データがLogstoreに書き込まれると、
<shard_id,begin_cursor,end_cursor >形式のトリプルデータレコードが関数イベントとして生成されます。 次に、関連するETL関数が呼び出される。説明新しいデータがLogstoreに書き込まれず、ストレージシステムが更新されると、カーソル情報が変更されます。 ETL関数はシャードごとに呼び出されますが、データは変換されません。 この場合、カーソル情報を使用してシャードからデータを取得できます。 データが得られない場合、ETL関数が呼び出されるが、データは変換されない。 関数の呼び出しは無視できます。 詳細については、「カスタム関数の作成」をご参照ください。
ETLジョブは、時間メカニズムに基づいて関数を呼び出す。 たとえば、LogstoreのETLジョブの呼び出し間隔を60秒に設定します。 データがShard 0に連続して書き込まれると、ETL関数が60秒ごとに呼び出され、過去60秒のカーソル範囲にあるデータが変換されます。
よくある質問
トリガーを作成しても関数が呼び出されない場合はどうすればよいですか?
次の方法を使用して問題をトラブルシューティングできます。
Function Computeトリガーが設定されているLogstoreに新しいデータが書き込まれているかどうかを確認します。 新しいデータがLogstoreに書き込まれると、関数が呼び出されます。
関数のトリガーログと操作ログに例外があるかどうかを確認します。
関数の呼び出し間隔が予想よりも大きいのはなぜですか?
関数はシャードごとに個別に呼び出されます。 Logstore内のシャードに対して関数が呼び出される回数が多い場合でも、各シャードに対して関数が呼び出される間隔は、指定された呼び出し間隔と一致する可能性があります。
関数がシャードに対して呼び出される呼び出し間隔は、データ変換に指定された時間間隔と同じです。 関数が呼び出されると、レイテンシが存在する可能性があります。 これにより、コール間隔が予想よりも大きくなる可能性があります。 次のリストでは、指定された呼び出し間隔が60秒の2つのシナリオについて説明します。
シナリオ1: 関数が呼び出され、レイテンシが存在しません。 この関数は60秒間隔で呼び出され、
[now -60s, now)の時間範囲で生成されたデータを変換します。説明関数はシャードごとに個別に呼び出されます。 Logstoreに10個のシャードが含まれ、関数の呼び出し時にレイテンシが存在しない場合、関数は60秒間隔で10回呼び出され、データをリアルタイムで変換します。
シナリオ2: 関数が呼び出され、レイテンシが存在します。 Simple Log Serviceシャード内のデータが変換された時点と、最新のデータがSimple Log Serviceに書き込まれた時点との時間差が10秒を超えています。 この場合、トリガーは通話間隔を短くします。 たとえば、関数を2秒間隔で呼び出して、60秒以内に生成されたデータを変換できます。