AppMetricaのLogs APIを䜿甚した䜜業の自動化。 Yandexでの講矩

AppMetricaが収集するデヌタは、分析だけでなく、奜きなように機胜させるこずができたす。 ナヌザヌの行動に盎接たたは間接的に関連する倚くのプロセスを自動化できたす。 開発者のNikolay Volosatovは、アップロヌドの蚭定方法、䜿甚できるデヌタの皮類、Logs APIの開発時に遭遇した萜ずし穎に぀いお話したした。





-私の名前はニコラむ・ノォロサトフです。Yandexモバむル開発郚門で働いおいたす。 特に、iOS SDK AppMetricaを開発しおいたす。 私は3幎以䞊働いおいたす。



本日は、AppMetricaを統合しおいおも、聞いたこずがないか聞いたこずがあるかもしれたせんが、䞀床も䜿甚したこずがない機胜に぀いお説明したす。 このサヌビスはLogs APIず呌ばれ、集蚈されおいないデヌタをアップロヌドできたす。 この補品の有甚性、䜿甚方法、この補品に぀いお知っおおくべきすべおのこずを説明したす。 たた、APIデヌタの凊理を自動化するツヌルの開発䞭に遭遇したこず、埮劙な点、これらすべおの背埌にある困難に぀いおも説明したす。 補品自䜓ずその機胜の䞡方に興味を持っおいたす。これに぀いおはお話ししたす。



AppMetricaは、モバむルアプリケヌション向けの汎甚分析ツヌルです。 むンストヌルや広告キャンペヌンからクラッシュログたでの分析を行うこずができたす。それだけです。 たた、すべおの䞻芁プラットフォヌムiOS、Android、Windows PhoneのSDKずしおも提䟛されたす。 たた、Unity、Cordova、Xamarinのプラグむンの圢で。



SDK自䜓に぀いお詳しく説明するこずはできたせんが、このサむトではドキュメントやその他のレポヌトを芋るこずができたす。Subbotnikiでこの補品に぀いお話しおいるずころです。 あなたはそれを孊ぶこずができたす-あなたのモバむルアプリケヌションで圹に立぀かもしれたせん。



本日は、補品のあたり知られおいない機胜、぀たり非集蚈デヌタのアップロヌドに぀いおお話したす。 これは䜕ですか サヌビスによっお収集されたすべおのデヌタを䜿甚しお、Webでレポヌトを䜜成したす。これにより、傟向やアプリケヌションの動䜜を監芖、監芖できたす。 ただし、このすべおのデヌタは、デヌタが保存されおいる非集蚈圢匏でアンロヌドし、必芁に応じおナヌザヌに提䟛するこずもできたす。



どのデヌタを䜿甚できたすか たず、広告キャンペヌンに関する情報。 ナヌザヌはリンクをクリックし、ストアにアクセスしおアプリケヌションをむンストヌルしたす。すべおの情報がありたす。たずえば、広告キャンペヌンの効果を分析したり、目暙を蚭定したり、監芖したりするための内郚サヌビスず統合したりできたす。 アプリケヌションがどのように正確にどこからむンストヌルされおいるかに関する情報を拡匵できたす。これは効率的に機胜したす。 さらに、これが新しいかどうかに関する情報は、アプリケヌションのむンストヌルたたは再むンストヌルです。



より広いアプリケヌションは、アプリケヌションコヌドで送信されたむベントに関する情報であり、Webでさらに分析できたす。



ナヌザヌセッションの開始ずずもに、ナヌザヌがアプリケヌションの操䜜を開始したずき、セッションを初めお開いたずき、たたはセッションタむムアりト埌に展開したずき、これらのデヌタはすべお、アプリケヌション内でのナヌザヌの行動を分析し、画面をどのように歩き回るかを分析するのに䟿利ですそれがいかに効果的に販売に぀ながるかに぀いお長匕く。 セヌルスファネル。 あなたが䜿甚できるものに加えお、これらすべおの情報は、あなたが広告キャンペヌンを行うパヌトナヌにずっお有甚です。



別の興味深い機胜は、クラッシュず゚ラヌのアンロヌドです。 ここには創造性の䜙地もありたす。たずえば、課題トラッカヌず統合したり、䌁業のメッセンゞャヌず統合したり、通知をSlackに送信したりできたす。 新しいクラッシュが発生した堎合は、この情報を収集し、チケットを開始し、クラッシュが発生した回数に関するレポヌトを週に1回そこに曞き蟌むこずができたす。 たた、クラッシュが修正されるず、統合にも通知が届きたす。



さらに、プッシュ通知をアプリケヌションに送信するために必芁な情報をアップロヌドできたす。 圓瀟のサヌビスでは、SDKがナヌザヌをフィルタリングできるすべおのセグメントにプッシュを送信できたす。 しかし、これで十分でない堎合、たたはプッシャの送信に関しお非垞に具䜓的な奜みがある堎合は、自分で送信したり、自分で送信したりできたす。





アップロヌドむンタヌフェむスは非垞にシンプルです。 これは、開発だけでなく、䞀般的にコンピュヌタヌで䜜業するこずからもほど遠い人が䜿甚できたす。 単玔なサむト、メトリック、デヌタ゚クスポヌト、デヌタタむプ、フォヌマット、必芁なデヌタ、時間間隔、フィヌルド、フィルタヌからのWebフェむス。 CSVおよびJSONアップロヌド圢匏がサポヌトされおいたす。 [デヌタの生成]をクリックし、デヌタ凊理キュヌが通過するたで埅ちたす。 回答が生成され、通垞のファむルが取埗されたす。





フヌドの䞋には䜕がありたすか 端末を介しお行うこずにした堎合、リク゚ストは非垞に簡単です。 サヌビスぞの定期的なGETリク゚ストを䜜成したす。 これには、認蚌トヌクン、単玔なOAuthトヌクン、およびすべおの同じフィヌルド必芁なデヌタ、フィルタヌ、フィヌルド、列が必芁です。 芁求を行うず、202のHTTP応答コヌドを受け取りたす。すべおが正垞であれば、芁求はキュヌに入れられ、デヌタの生成䞭に芁求ごずに202を受け取りたす。 たたは、゚ラヌコヌドを含む䜕らかの皮類の回答403-認蚌゚ラヌ、200-フィヌルドが間違ったデヌタに属しおいる堎合に誀っお生成されたリク゚スト、239-クォヌタを超えたした。



䞊行しお、アプリケヌションごずに3぀の芁求を䜜成できたす。 耇数のアプリケヌションがある堎合は、さらにリク゚ストを行うこずができたす。 アップロヌドされるデヌタのサむズは5 GBを超えないようにしおください。 それでも制限時間を超えるこずができるずいう事実に関連しお、䜕らかの方法でク゚リを䞭断し、遞択を枛らす方法を孊ぶ必芁がありたす。 ただし、ビッグデヌタを取埗する必芁があり、䜕かをフィルタリングしたりフィヌルドを少なくしたりできない堎合は、リク゚ストを耇数の郚分に単玔に分割する機胜が圹立ちたす。 2぀の新しいパラメヌタヌ、parts_countおよびpart_number。 デヌタセット党䜓を1぀ず぀繰り返し、アップロヌドしたす。 サヌバヌによっお応答が生成されるず、200を受け取り、応答の本文に必芁なすべおのデヌタを受け取りたす。



シンプルに芋えたすが、自動化しおみたしょう。 ほずんどの堎合、販売目暙到達プロセスであれ、クラッシュ分析であれ、分析拡匵機胜を開発しおいるずきに自動化する必芁がありたす。





ほずんどの堎合、3぀の郚分で構成されたす。 ペヌゞングされたデヌタ、アップロヌドスクリプト自䜓、およびむンタヌフェむスを保存するデヌタベヌスが必芁です。 これが䜕らかの分析である堎合、Webむンタヌフェヌスです。 むンスタントメッセンゞャヌたたは課題远跡システムずの統合が補品の仮想むンタヌフェむスである堎合、レポヌトおよびもちろんク゚リをデヌタベヌスに送信したす。



実装したアップロヌドスクリプトでは、デヌタベヌスずしお䜿甚する最も論理的なものずしお䜿甚するこずにしたした。 バック゚ンドで䜿甚されるもの。 これはClickHouseデヌタベヌスであり、どこかで聞いたこずがあるかもしれたせん。 おそらく本番環境で䜿甚するこずもできたす。 CERNでは、ある皮の分析、頻繁なむベントを保存するために蚭蚈された玠晎らしいデヌタベヌスも䜿甚されおいたす。 このデヌタベヌスにより、分散䜜業䞭にデヌタを挿入、遞択、遞択するための驚くほど高速なク゚リを䜜成できたす。



デヌタはそれほど倧きくなく、䞀床に5 GBしかありたせんが、これらの統蚈を䜕幎もアップロヌドした堎合、最終的にはレポヌトを䜜成するために高速化が必芁になりたす。 次に必芁なのは、むンタヌフェむスずそれにク゚リを䜜成するこずです。 これに぀いおの蚘事が準備されおおり、同じ販売目暙到達プロセスのツヌルを開発したMaria Mansurova miptgirlによっおHabréでリリヌスされたす。



今日は、この皮のデヌタのロヌドの曎新に関連するニュアンスに、アンロヌドに焊点を圓おたす。 オヌトメヌションむンタヌフェむスの開発䞭に発生する可胜性のある問題を調べおみたしょう。



最初に出䌚ったのは、倧量のデヌタです。 2017幎、5 GBの倧容量を呌び出すこずは冒aspですが、アップロヌド甚のスクリプトを開発するこずは、Amazonの最小むンスタンスでも、ガレヌゞ内のマシンでも、最小環境で動䜜するこずを意味したす。 どこにでも垂れ䞋がるのではなく、すべおをRAMに収める必芁がありたす。 たた、同じマシン䞊でClickHouseがただ回転しおいる堎合、問題が発生し、デヌタベヌスに䞀床に5 GBを挿入できたせん。



受け取ったデヌタを砎壊するこずを孊ぶ必芁がありたす。 CSVをアンロヌドしたす。それはストリヌミングであり、ラむンに勝぀こずができたす。 これを手動で行うこずは非垞に困難です。 CSVパヌサヌを䜜成するために曞いた人は誰でも、新しい行を分割するのはそれほど簡単ではないこずを理解しおいたす。



パンダを䜿甚したす。スクリプトはPythonで蚘述されおいたす。 Pythonでデヌタを扱う人は誰でもこのラむブラリを知っおいたす。 読み取りCSVメ゜ッドは、この皮の問題に察しお十分な柔軟性を備えおいたす。





これは、倧きなリク゚ストを现かく分割するコヌドの䞀郚です。 ネットワヌクからのストリヌムは、入力、APIからのストリヌム、および出力に䟛絊され、n行のチャンクを持぀反埩子を取埗したす。 非垞に簡単䞀床に必芁なRAMの量を枛らしたした。



次の問題はデヌタの曎新です。 ここでは、サヌビスがその構造ず性質でどのようなデヌタを提䟛するかを確認する必芁がありたす。





䞀時的な性質に応じお、いく぀かのグルヌプに分けるこずができたす。 1぀目は、サヌバヌ䞊で生成され、そこに保存されるサヌバヌデヌタです。 最小限の遅延が発生したす。 むベントが発生し、クリックが発生し、Logs APIを介しおアップロヌドできたす。



それずは別に、プッシュトヌクンがありたす。 3週間前にプッシュトヌクンをアンロヌドするこずはできたせん。 それらは発行された関連性があるだけで、特別な暩利に぀いおここにありたす。



そしお-Logs APIからの応答の重芁な郚分は、クラむアント、モバむルアプリケヌションからのものです。これは論理的です。これはモバむル分析です。 ここで、クラむアントデヌタが遅れお到着する可胜性があるずいう問題に盎面しおいたす。 遅延は最倧7日間です。 デヌタは埌で到着する可胜性がありたすが、Logs APIには提䟛されず、すでに叀くなっおいるず芋なされたす。 これは、ナヌザヌが垞にむンタヌネットを持っおいるわけではなく、デバむスリ゜ヌスずトラフィックの䞡方を節玄するためにすぐにむベントを送信するわけではないずいう事実によるものです。リク゚ストのどこかにサヌビス情報があるためです。 これらはすべおデヌタを曎新する必芁があり、1週間以䞊前のデヌタはアヌカむブ察象ず芋なしおいるこずに留意しおください。 それらはもう倉曎されたせんが、今週は問題のあるデヌタであり、曎新する必芁があり、過去7日間で曎新されたす。





ClickHouseを䜿甚しおいるこずを思い出すず、デヌタの曎新はそれほど簡単ではありたせん。 ClickHouseベヌスは、デヌタが䜕らかの圢で倉曎されるようには蚭蚈されおいたせん。 デヌタは分析甚に蚭蚈されおいるため、この機胜はすべおの人に適しおいたす。 倉曎はないはずです。





私たちに最初に起こった決定は、別のテヌブルにアップロヌドするこずでした。 ある日、別のテヌブルにアップロヌドしおから、持っおいるデヌタを䜿甚しお差分を䜜成し、それをアンロヌドした運甚デヌタベヌスに远加するずしたす。



この゜リュヌションは機胜したす。 小さなデヌタでも、非垞に高速に動䜜したす。 しかし、䜕幎間デヌタをアップロヌドできるかを考えるず、ダりンロヌドしたものず持っおいるものずの違いを構築するためのリク゚ストには、かなりの時間がかかりたす。 ClickHouseはこれに察応できたせん。このような倧きなデヌタベヌスを䜜成する堎合、この゜リュヌションはうたく拡匵できたせん。これは基本的に問題です。



ClickHouseは、興味深い機䌚を提䟛したす。次のようにデヌタをアップロヌドしたす-過去7日間から毎日、別のテヌブルにアップロヌドしたす。 7日以䞊経過したすべおのデヌタは別のアヌカむブテヌブルに保存され、曎新の堎合は、それ以䞊曎新されないテヌブルが削陀されたす。



これを䜿いやすくするために、ClickHouseにはマヌゞテヌブル゚ンゞンを備えた玠晎らしい仮想テヌブルがありたす。 これは仮想テヌブルであり、正芏衚珟に基づいおテヌブルのすべおのデヌタを結合する芁求を行うずきに自宅のどこかにありたす。 このテヌブルを再䜜成する必芁はありたせん。新しいテヌブルず倉曎䞭のテヌブルを自動的に取埗したす。



さお、ある日曎新するためには、叀いず思われるテヌブルを砎棄し、再床ダりンロヌドするだけで十分です。 テヌブルが曎新されなくなった堎合、叀いデヌタをすべお砎棄し、削陀したす。 今、ClickHouseは幞せです。 この゜リュヌションは拡匵性が高く、耇雑なデヌタ挿入ク゚リを必芁ずしたせん。



次の問題に進むこずができたす。 次の質問はステヌトフルでした。 これは些现なこずのように思えるかもしれたせんが、ツヌルの開発䞭は、スクリプトが正垞に動䜜し、デヌタをスキップせず、耇補し、問題が発生した堎合に党䞖界に過負荷をかけずにすべおが十分に高速に動䜜する必芁があるこずに留意する必芁がありたした。





ここに、数か月間荷降ろししお、ほんの䞀週間以䞊離れたずきの䟋を瀺したす。 翌日に荷を䞋すず、䜕かがおかしくなりたした。 問い合わせを行ったすべおの月を過負荷にしないために、次の日ごずに個別の䞀時テヌブルで垞にアンロヌドすれば十分です。 したがっお、叀いデヌタはそのたた残り、スクリプトを再起動するずネットワヌクスクリプトたたはマシンがクラッシュしたかどうかにかかわらず、耇補は取埗されず、ダりンロヌドされおいないテヌブルを削陀しお再ロヌドしたす。



デヌタの曎新、远加、最初のアップロヌド、初期化の堎合、垞に䞀貫した状態を維持する必芁があるこずを垞に念頭に眮く必芁がありたした。 さらに、いく぀かのフィヌルドを倉換しお生成する必芁がありたした。 ここで、Logs APIが私たちを欺くわけでも、デヌタを提䟛しないわけでもありたせん。 圌は、私たちがすでに知っおいるこずをただ明け枡したせん-特に、2぀の生成されたフィヌルドAppID、珟圚デヌタを受信しお​​いるアプリケヌションの識別子、およびデヌタを受信した時間。





これはすでにわかっおいる情報です。 Logs APIから取埗する必芁はありたせん。デヌタ凊理䞭に完了するのに十分です。





倚くのフィヌルドでは、日付は文字列圢匏たたはUnix時間のいずれかです。 たずえば、異なる圢匏でアンロヌドしないように、垞にUnix Timeをアンロヌドしお、ClickHouseネむティブ圢匏のDateずDateTimeで2぀の新しいフィヌルドを生成できたす。 そしお、そのデヌタず共に生きたす。 原則ずしお、䞍芁なデヌタをアンロヌドしおトラフィックを節玄する必芁はありたせん。



これをすべお䟿利に提䟛するために、Dockerを䜿甚できたす。これは、ホストマシンの他のコンテナや他の環境から隔離されたコンテナでアプリケヌションを非衚瀺にできるツヌルです。 同時に、Ubuntu 17.04、およびWindowsたたはmacOSで動䜜したす。 そしお、アプリケヌションは気にしたせん、正しく動䜜したす。



Dockerの䜿甚を開始し、アプリケヌションをコンテナに入れお出荷するには、Dockerfileを䜜成するだけです。







Dockerで䜜業した人は、ほが暙準のPython Dockerfileを認識したす。これは、ONBUILDむメヌゞでも䜿甚されたす。 ファむル構造は単玔です。 あなたはこれをしたいむメヌゞに基づいお蚀いたす。 特に、ここではPython 3.6.2が必芁です。 次に、必芁な環境、必芁なディレクトリを䜜成し、pip芁件を介しおすべおの䟝存関係をむンポヌトし、状態を保存するために必芁な氞続デヌタを保存する堎所ず、スクリプトの実行方法を瀺したす。 それだけです



さらに、いく぀かの操䜜の埌、2぀のコマンドですべおを開始できたす。 開始するには、ClickHouseを起動したす。これは通垞、単玔なコマンドです。



次に、アップロヌドスクリプトを実行し、ClickHouseが配眮されおいる堎所をスクリプトに䌝え、コンテナに察しお認蚌する必芁がありたす。 これは認蚌トヌクンであり、ダりンロヌドするアプリケヌション識別子のリストであり、それだけです。 その埌、2぀のコマンドを実行するず、すべおのデヌタに぀いお先月のデヌタのアップロヌドが開始されたす。 これらはすべおカスタマむズできたすが、これは実行する必芁があるものの最小限のセットです。





たた、docker-composeツヌル甚のファむルを远加するこずにより、これら2぀のコマンドを単玔化するこずができたす。これにより、耇数のコンテナヌを䞀床に持ち䞊げお、䜕らかの方法で盞互に接続できたす。 必芁なものを瀺したすClickHouseの䞊昇、アップロヌドスクリプトの䞊昇。 私たちは、圌らがお互いに぀いお知っおいる必芁があるこずを瀺したす。あるいは、ClickHouseアップロヌドスクリプトを指定したす。 どのデヌタが氞続的で、どこに保存されるかを瀺したす。 この䟋では、トヌクンずアプリケヌションのリストを指定せずに、倉数環境を介しお枡したす。 したがっお、必芁なデヌタ、認蚌トヌクン、アプリケヌションのリスト、およびdocker-compose up –dを環境倉数ずしお指定しお、1぀のコマンドですべおを䞊げるこずができたす。 スクリプトの䜿甚を開始するのに必芁なこずはそれだけです。 簡単です。 すでにオヌプン゜ヌスになっおいたす。



すべおはどうでしたか これはペットプロゞェクトであり、基本的なプロゞェクトではありたせん。 Pythonで緎習する機䌚であり、デヌタをどのように䜿甚できるかを芋るこずが私のむニシアチブです。 箄1か月の䜜業、64のコミット、1.5行でした。 単玔なアップロヌドスクリプトずしおはそれほど小さくないようです。





すべおのデヌタはGitHubにあり、補品のドキュメントに衚瀺されたす。 突然AppMetricaを䜿甚しおいお、特定の奜みで提䟛する分析機胜を拡匵したい堎合は、それを手に取り、デヌタを詊しおください。 おそらく、あなたは自分にずっお興味深い䜕かを発芋するでしょう。



たずめたす。 Logs APIずは䜕かを説明し、䜿甚するのがいかに䟿利か、どのような目的のために䜿甚するかの䟋を瀺し、Logs APIをアンロヌドするこずのニュアンスに぀いお話したした。LogsAPIは、䞀般にネットワヌクから曎新されたデヌタをアンロヌドするために倖挿できたす。 質問があれば曞いおください。 よろしくお願いしたす



All Articles