ʻO ka mōʻaukala o kā mākou kumu wehe: pehea mākou i hana ai i kahi lawelawe analytics ma Go a hoʻolaha i ka lehulehu

I kēia manawa, kokoke i kēlā me kēia hui o ka honua e hōʻiliʻili i nā ʻikepili e pili ana i nā hana a nā mea hoʻohana ma kahi punaewele. Akaka ka manaʻo - makemake nā hui e ʻike pehea e hoʻohana ʻia ai kā lākou huahana/pūnaewele a hoʻomaopopo maikaʻi i kā lākou mea hoʻohana. ʻOiaʻiʻo, aia ka nui o nā mea hana ma ka mākeke e hoʻoponopono i kēia pilikia - mai nā ʻōnaehana analytics e hāʻawi i ka ʻikepili i ke ʻano o nā dashboards a me nā kiʻi (no ka laʻana. Google Analytics) i ka Customer Data Platform, ka mea e ʻae iā ʻoe e hōʻiliʻili a hōʻuluʻulu i ka ʻikepili mai nā kumu like ʻole i loko o kekahi hale kūʻai (no ka laʻana. Māhele).

Akā ua loaʻa iā mākou kahi pilikia ʻaʻole i hoʻoholo ʻia. Pela i hanau ai EventNative — lawelawe ʻikepili wehe-kumu. E heluhelu e pili ana i ke kumu i hoʻoholo ai mākou e hoʻomohala i kā mākou lawelawe ponoʻī, ka mea i hāʻawi mai iā mākou, a me ka hopena hopena (me nā ʻāpana code).

ʻO ka mōʻaukala o kā mākou kumu wehe: pehea mākou i hana ai i kahi lawelawe analytics ma Go a hoʻolaha i ka lehulehu

No ke aha mākou e hoʻomohala ai i kā mākou lawelawe ponoʻī?

ʻO ia ka makahiki kanaiwa, ua ola mākou e like me ka mea hiki. 2019, ua kūkulu mākou i ka API First Customer Data Platform kSense, ka mea i hiki ai ke hōʻuluʻulu i ka ʻikepili mai nā kumu like ʻole (Facebook ads, Stripe, Salesforce, Google play, Google Analytics, etc.) no ka hoʻomaʻamaʻa ʻana i ka ʻikepili maʻalahi, ʻike i nā hilinaʻi, etc. Ua ʻike mākou he nui nā mea hoʻohana e hoʻohana i kā mākou kahua no ka ʻikepili ʻikepili kikoʻī iā Google Analytics (ma hope o GA). Ua kamaʻilio mākou me kekahi mau mea hoʻohana a ʻike mākou he pono lākou i ka ʻikepili analytics no kā lākou huahana i loaʻa iā lākou me ka hoʻohana ʻana iā GA, akā Google laʻanaʻikepili a no nā mea he nui, ʻaʻole ka maʻamau o ka mea hoʻohana GA. Ua lawa kā mākou kamaʻilio ʻana me kā mākou mea hoʻohana a ʻike mākou he nui ka poʻe e hoʻohana ana i ka platform Segment (ʻo ia, ma ke ala, ʻo ia wale nō ka lā aʻe. kūʻai ʻia no $3.2 biliona).

Ua hoʻokomo lākou i kahi ʻāpana javascript pixel ma kā lākou punaewele a ua hoʻouka ʻia ka ʻikepili e pili ana i ka ʻano o kā lākou mea hoʻohana i loko o ka waihona kikoʻī (no ka laʻana Postgres). Akā ʻo Segment ka mea i lalo - ke kumu kūʻai. No ka laʻana, inā he 90,000 MTU (nā mea hoʻohana i mālama ʻia i kēlā me kēia mahina), pono ʻoe e uku ~1,000 $ i kēlā me kēia mahina i ka cashier. Aia kekahi pilikia ʻekolu - ua kāohi kekahi mau polokalamu kele pūnaewele (e like me AdBlock) i ka hōʻiliʻili ʻana o nā analytics no ka mea... Ua hoʻouna ʻia nā noi http mai ka polokalamu kele pūnaewele i nā kāʻei kapu GA a me ka Māhele. Ma muli o ka makemake o kā mākou mea kūʻai, ua hana mākou i kahi lawelawe analytics e hōʻiliʻili i kahi pūʻulu ʻikepili piha (me ka ʻole o ka laʻana), manuahi a hiki ke hana ma kā mākou ʻoihana ponoʻī.

Pehea e hana ai ka lawelawe

He ʻekolu ʻāpana ka lawelawe: kahi pixel javascript (a mākou i kākau hou ai ma typescript), ua hoʻokō ʻia ka ʻāpana kikowaena ma ka ʻōlelo GO, a ua hoʻolālā ʻia e hoʻohana iā Redshift a me BigQuery ma ke ʻano he waihona waihona hale (ma hope ua hoʻohui lākou i ke kākoʻo no Postgres, ClickHouse a me Snowflake).

Ua hoʻoholo ʻia e haʻalele i ke ʻano o nā hanana GA a me Segment me ka loli ʻole. ʻO nā mea a pau i makemake ʻia ʻo ke kope ʻana i nā hanana āpau mai ka punaewele pūnaewele kahi i hoʻokomo ʻia ai ka pixel i kā mākou hope. E like me ka mea i ʻike ʻia, ʻaʻole paʻakikī kēia e hana. Ua hoʻopau ka Javascript pixel i ke ʻano waihona waihona GA mua me kahi mea hou, nāna i hoʻololi i ka hanana i loko o kā mākou ʻōnaehana.

//'ga' - стандартное название переменной Google Analytics
if (window.ga) {
    ga(tracker => {
        var originalSendHitTask = tracker.get('sendHitTask');
        tracker.set('sendHitTask', (model) => {
            var payLoad = model.get('hitPayload');
            //отправка оригинального события в GA
            originalSendHitTask(model);
            let jsonPayload = this.parseQuery(payLoad);
            //отправка события в наш сервис
            this.send3p('ga', jsonPayload);
        });
    });
}

Me ka Segment pixel ʻoi aku ka maʻalahi o nā mea a pau; loaʻa iā ia nā ala middleware, ʻo ia kekahi o mākou i hoʻohana ai.


//'analytics' - стандартное название переменной Segment
if (window.analytics) {
    if (window.analytics.addSourceMiddleware) {
        window.analytics.addSourceMiddleware(chain => {
            try {
		//дублирование события в наш сервис
                this.send3p('ajs', chain.payload);
            } catch (e) {
                LOG.warn('Failed to send an event', e)
            }
	    //отправка оригинального события в Segment
            chain.next(chain.payload);
        });
    } else {
        LOG.warn("Invalid interceptor state. Analytics js initialized, but not completely");
    }
} else {
    LOG.warn('Analytics.js listener is not set.');
}

Ma kahi o ke kope kope ʻana i nā hanana, ua hoʻohui mākou i ka hiki ke hoʻouna i ka json arbitrary:


//Отправка событий с произвольным json объектом
eventN.track('product_page_view', {
    product_id: '1e48fb70-ef12-4ea9-ab10-fd0b910c49ce',
    product_price: 399.99,
    price_currency: 'USD'
    product_release_start: '2020-09-25T12:38:27.763000Z'
});

A laila, e kamaʻilio e pili ana i ka ʻāpana kikowaena. Pono ka backend e ʻae i nā noi http, e hoʻopiha iā lākou me ka ʻike hou aku, no ka laʻana, geo data (mahalo maxmind no kēia) a hoʻopaʻa i loko o ka waihona. Ua makemake mākou e hana maʻalahi ka lawelawe i hiki ke hoʻohana ʻia me ka hoʻonohonoho liʻiliʻi. Ua hoʻokō mākou i ka hana o ka hoʻoholo ʻana i ka schema data ma muli o ke ʻano o ka hanana json e hiki mai ana. Ua wehewehe ʻia nā ʻano ʻikepili e nā waiwai. Hoʻopau ʻia nā mea pūnana a hoʻemi ʻia i hale palahalaha:

//входящий json
{
  "field_1":  {
    "sub_field_1": "text1",
    "sub_field_2": 100
  },
  "field_2": "text2",
  "field_3": {
    "sub_field_1": {
      "sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
    }
  }
}

//результат
{
  "field_1_sub_field_1":  "text1",
  "field_1_sub_field_2":  100,
  "field_2": "text2",
  "field_3_sub_field_1_sub_sub_field_1": "2020-09-25T12:38:27.763000Z"
}

Eia naʻe, hoʻololi wale ʻia nā arrays i nā kaula no ka mea ʻAʻole kākoʻo nā ʻikepili pili i nā kahua i hoʻopaʻa ʻia. Hiki ke hoʻololi i nā inoa kahua a i ʻole e holoi iā lākou me ka hoʻohana ʻana i nā lula palapala koho. Hāʻawi lākou iā ʻoe e hoʻololi i ka schema data inā pono a hoʻololi paha i kahi ʻano ʻikepili i kekahi. No ka laʻana, inā loaʻa i kahi kahua json kahi kaula me ka timestamp (field_3_sub_field_1_sub_sub_field_1 mai ka laʻana ma luna), a laila no ka hana ʻana i kahi kahua ma ka waihona me ke ʻano timestamp, pono ʻoe e kākau i kahi lula mapping i ka hoʻonohonoho. I nā huaʻōlelo ʻē aʻe, ua hoʻoholo mua ʻia ke ʻano ʻikepili o ke kahua e ka waiwai json, a laila hoʻohana ʻia ke ʻano hoʻolei ʻana (inā hoʻonohonoho ʻia). Ua ʻike mākou i 4 ʻano ʻikepili nui: STRING, FLOAT64, INT64 a me TIMESTAMP. Penei ke ano o ka palapala palapala a me ka hoolei ana.

rules:
  - "/field_1/subfield_1 -> " #правило удаления поля
  - "/field_2/subfield_1 -> /field_10/subfield_1" #правило переноса поля
  - "/field_3/subfield_1/subsubfield_1 -> (timestamp) /field_20" #правило переноса поля и приведения типа

Algorithm no ka hoʻoholo ʻana i ke ʻano ʻikepili:

  • e hoohuli i ka hale json i ka hale palahalaha
  • ka hoʻoholo ʻana i ke ʻano ʻikepili o nā kahua ma nā waiwai
  • e hoʻohana ana i ka palapala ʻāina a me ke ʻano hoʻolei ʻana i nā lula

A laila mai ka hanana json e hiki mai ana:

{
    "product_id":  "1e48fb70-ef12-4ea9-ab10-fd0b910c49ce",
    "product_price": 399.99,
    "price_currency": "USD",
    "product_type": "supplies",
    "product_release_start": "2020-09-25T12:38:27.763000Z",
    "images": {
      "main": "picture1",
      "sub":  "picture2"
    }
}

e loaʻa ka ʻikepili ʻikepili:

"product_id" character varying,
"product_price" numeric (38,18),
"price_currency" character varying,
"product_type" character varying,
"product_release_start" timestamp,
"images_main" character varying,
"images_sub" character varying

Ua manaʻo pū mākou e hiki i ka mea hoʻohana ke hoʻonohonoho i ka hoʻokaʻawale ʻana a i ʻole ka hoʻokaʻawale ʻana i ka ʻikepili i loko o ka waihona e like me nā pae ʻē aʻe a hoʻokō i ka hiki ke hoʻonohonoho i ka inoa papa me kahi mau a i ʻole. hōʻike i ka hoʻonohonoho. Ma ka laʻana ma lalo nei, e mālama ʻia ka hanana i kahi papaʻaina me kahi inoa i helu ʻia ma muli o nā waiwai o ka product_type a me _timestamp kahua (no ka laʻana. lako_2020_10):

tableName: '{{.product_type}}_{{._timestamp.Format "2006_01"}}'

Eia naʻe, hiki ke loli ke ʻano o nā hanana e hiki mai ana i ka wā holo. Ua hoʻokō mākou i kahi algorithm e nānā i ka ʻokoʻa ma waena o ke ʻano o kahi papa e kū nei a me ke ʻano o kahi hanana e hiki mai ana. Inā loaʻa kahi ʻokoʻa, e hoʻonui ʻia ka pākaukau me nā kahua hou. No ka hana ʻana i kēia, e hoʻohana i ka nīnau SQL patch:

#Пример для Postgres
ALTER TABLE "schema"."table" ADD COLUMN new_column character varying

kuhikuhipuʻuone

ʻO ka mōʻaukala o kā mākou kumu wehe: pehea mākou i hana ai i kahi lawelawe analytics ma Go a hoʻolaha i ka lehulehu

No ke aha ʻoe e kākau ai i nā hanana i ka ʻōnaehana faila, ʻaʻole e kākau pololei iā lākou i ka waihona? ʻAʻole hana maikaʻi nā ʻikepili i ka wā e pili ana i ka nui o nā mea hoʻokomo (Nā ʻōlelo aʻoaʻo Postgres). No ka hana ʻana i kēia, kākau ʻo Logger i nā hanana e hiki mai ana i kahi faila a ma kahi goroutine ʻokoʻa (thread) heluhelu ʻia ka faila heluhelu i ka faila, a laila hoʻololi ʻia ka ʻikepili a hoʻoholo. Ma hope o ka hōʻoia ʻana o ka luna Papaʻaina i ka paʻa o ka papa ʻaina, e kākau ʻia ka ʻikepili i ka waihona i hoʻokahi pūʻulu. Ma hope mai, ua hoʻohui mākou i ka hiki ke kākau pololei i ka ʻikepili, akā hoʻohana mākou i kēia ʻano no nā hanana ʻaʻole nui - no ka laʻana, nā hoʻololi.

Open Source a me nā hoʻolālā no ka wā e hiki mai ana

I kekahi manawa, ua hoʻomaka ka lawelawe e like me kahi huahana piha a ua hoʻoholo mākou e hoʻokuʻu iā Open Source. I kēia manawa, ua hoʻokō ʻia nā hoʻohui me Postgres, ClickHouse, BigQuery, Redshift, S3, Snowflake. Kākoʻo nā hoʻohui āpau i nā ʻano ʻāpana a me ke kahe ʻana o ka hoʻouka ʻikepili. Hoʻohui i ke kākoʻo no nā noi ma o API.

ʻO ka papahana hoʻohui o kēia manawa e like me kēia:

ʻO ka mōʻaukala o kā mākou kumu wehe: pehea mākou i hana ai i kahi lawelawe analytics ma Go a hoʻolaha i ka lehulehu

ʻOiai hiki ke hoʻohana kūʻokoʻa ka lawelawe (e like me ka hoʻohana ʻana iā Docker), loaʻa iā mākou mana hoʻokipa, kahi e hiki ai iā ʻoe ke hoʻonohonoho i ka hoʻohui ʻana me kahi waihona ʻikepili, hoʻohui i kahi CNAME i kāu kikowaena a nānā i nā ʻikepili i ka helu o nā hanana. ʻO kā mākou hoʻolālā koke e hoʻohui i ka hiki ke hōʻuluʻulu ʻaʻole wale i nā helu helu mai kahi punaewele, akā i ka ʻikepili mai nā kumu ʻikepili waho a mālama iā lākou i kahi waiho ʻana o kāu koho!

→ GitHub
→ ʻO ka palapala
→ Slack

E hauʻoli mākou inā kōkua ʻo EventNative i kāu pilikia!

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

He aha ka ʻōnaehana hōʻiliʻili helu i hoʻohana ʻia i kāu hui?

  • 48,0%Google Analytics12

  • 4,0%Māhele1

  • 16,0%ʻO kekahi (kākau ma nā manaʻo)4

  • 32,0%Hoʻokō i kāu lawelawe8

25 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 6.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka