á¡á¬ážáá¯á¶ážáá² áááºá¹ááá¬áá« áá°áááºáá»ááºážááá¯á·á
* á€áá±á¬ááºážáá«ážááẠREBRAIN & Yandex.Cloud á¡ááœáá·áºá¡áá¯ááºáá¯á¶ááœá±ážááœá±ážááœá²ááᯠá¡ááŒá±áá¶áá¬ážááŒááºážááŒá
áºááŒá®áž áá®áá®ááá¯ááá¯ááŒáá·áºááŸá¯ááá¯áá«á á€ááá·áºááºááœáẠááŒáá·áºááŸá¯ááá¯ááºááẠ-
áá»áœááºá¯ááºááá¯á·ááẠáááŒá¬áá±ážáá®á Yandex.Cloud ááᯠááá¯ááºááá¯ááºá
ááºážáá¯á¶ážááẠá¡ááœáá·áºá¡áá±ážááá²á·áááºá áá»áœááºá¯ááºááá¯á·ááẠááŸááºáá»á¬ážááŒá®áž áááºáááºáá²áá² á
á¯á¶á
ááºážá
á
áºáá±ážááá¯áá±á¬ááŒá±á¬áá·áºá ááá¯ážááŸááºážáá±á¬ Wordpress ááá±á¬á·ááºááᯠcloud á¡ááŒá±áá¶ááŒáá·áº á
áááºááẠá
áááºáá°ážááᯠáá»ááºáá»ááºáž á
áœáá·áºááœáŸááºááá¯ááºááẠ- áá»ááºážá
áá¬áá±á¬ááºážááœááºážáá«áááºá á¡áá»áá¯á·áá±á¬á
ááºážá
á¬ážááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá»áááºááŸáá·áºáááŒá±ážáá®áá¯ááºááœáẠááŒá
áºáááºáá»á¬ážááá¯áááºáá¶ááŒááºážááŸáá·áº ááœá²ááŒááºážá
áááºááŒá¬ááŒááºážá¡ááœáẠáá¯ááºáá¯ááºáá±ážáááºáá±á¬ááºááŸá¯áááá¯áá¬ááŸáá·áºáááºáá°ááá·áºá¡áá¬áá
áºáá¯ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá
á¡áœááºááá¯ááºáž (áá¬áá) á
á®ážááœá¬ážáá±ážáá¯ááºáááºáž á¡áá»á¬ážá
á¯ááẠáááºážááá¯á·á áá¯á¶ážá
áœá²áá°áá»á¬ážááŸáá·áº áááºážááá¯á·á áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº áááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬áž áá±á¬ááºáááºážáá
áºáá¯ááᯠáá
áºáááºážáááºážááŒáá·áº á
á¯áá±á¬ááºážááŒáááºááᯠáá»áœááºá¯áẠáá¯á¶ážááá±áá»á¬áá«áááºá á¡áááºážáá¯á¶ážá¡á¬ážááŒáá·áºá á¡áá»áá¯á·áá±á¬ áá¯á¶ážááŒááºáá»ááºáá»á¬ážáá»áááºá¡ááœáẠá€á¡áá¬ááẠááá¯á¡ááºááẠ- á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠá¡áœááºááá¯ááºážááááºážáá
áºáá¯ááᯠá
á®áá¶ááá·áºááœá²áá«áá á¡áá¯á¶ážááŒá¯áá°áá»á¬áž áááŒá¬áá ááááºáááá±ááŒá®áž ááá·áºá¡áá¯ááºááᯠáá»ááºáá
áºááá·áº á¡ááá·áºááŸá á
á¬áááºážá¡ááºážáá»á¬ážááᯠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá ááá¯á·ááá¯áẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááááºáá°áá² ááá·áºááá¯ááºá០ááœááºááœá¬ááœá¬ážááŒááºáž (áááºá¹ááá¬áá« Yandex.Metrica)á
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááá¬ááºáááºáž- golang ááœáẠá¡ááºááá®áá±ážááŸááºážáá áºáᯠáááºááá¯á·áá±ážáá²á·áá¯á¶á kafka vs rabbitmq vs yqs ááᯠá ááºážáááºááŒá®áž Clickhouse á¡á á¯á¡áá±ážáá áºáá¯ááœáẠáá±áá¬á á®ážááŒá±á¬ááºážááᯠáá±ážáá¬ážááŒá®áž yandex datalens áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá±áá¬ááᯠááŒááºáá±á¬ááºááŒáá·áºáá«á áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠdockerá terraformá gitlab ci ááŸáá·áº prometheus áá¯á¶á á¶ááŒáá·áº á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯ááºáᬠááŸá áºáááºááœááºáá»á¬ážááŒáá·áº áá±á«ááºážá ááºáá¬ážáááºá ááœá¬ážááŒáá¡á±á¬ááº!
áá»áœááºá¯ááºááẠáá áºááá¯ááºáááºážááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠá á®á ááºáá±ážááá¯ááºááẠááá¯ááºááá·áºá¡ááœáẠáá»ááºáá»ááºáž ááŒáá¯áááºááŸá¬ááŒá¬ážááá¯áá«ááẠ- á€á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá á®ážáá®ážááœáẠáá±á¬ááºážáá«ážáá»á¬ážá áœá¬ ááá¯á¡ááºáá«áááºá ááœá²á·á ááºážáá¯á¶á¡ááŒá±á¬ááºáž á¡áááºážáááº
á¡ááá¯ááºáž 1 (áááºáááºáá±áá«áááº)á ááŒá±ááŸááºážáá»ááºá áááºááŸááºáá»ááºáá»á¬ážááŸáá·áº áááá¯áá¬áááºáá¬áá»á¬ážá¡áá±á«áº áá»áœááºá¯ááºááá¯á· áá¯á¶ážááŒááºáááºááŒá
áºááŒá®áž golang ááŒáá·áº á¡ááºááá®áá±ážááŸááºážáá
áºáá¯ááá¯áááºáž áá±ážáá¬ážáá«áááºá
á¡ááá¯ááºáž 2á áá»áœááºá¯ááºááá¯á·áá¡ááºááá®áá±ážááŸááºážááᯠáá¯ááºáá¯ááºáááºá áááºážááᯠá¡ááá¯ááºážá¡áá¬á¡áá áá¯ááºááá¯ááºá
á±áááºááŸáá·áº áááºááᯠá
ááºážáááºáá«áááºá
á¡ááá¯ááºáž áá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá»á¬ážááœááºááá¯ááºáá² ááŒá¬ážáá¶áá
áºáá¯ááœáẠáááºáá±á·áá»áºáá»á¬ážááᯠá¡áááºááŒá±á¬áá·áºááááºážáááºážáááááºážá kafkaá rabbitmq ááŸáá·áº yandex áááºážá
á®ááŒááºážáááºáá±á¬ááºááŸá¯ááá¯á·ááá¯áááºáž ááŸáá¯ááºážááŸááºááŒáá·áºááŒáá«á
áá¯á·á
á¡ááá¯ááºáž á áá»áœááºá¯ááºááá¯á·ááẠClickhouse á¡á
á¯á¡áá±ážáá
áºáá¯á¡á¬áž ááŒáá·áºáá»ááºá¡áá¯á¶ážááŒá¯áááºááŒá
áºááŒá®áž ááá¯áá±áá¬ááœáẠááŒá¬ážáá¶ááŸáá±áá¬áá»á¬ážááá¯ááœáŸá²ááŒá±á¬ááºážááẠstreaming áááºáá±á¬ááºááŸá¯ááá¯áá±ážáá¬ážáᬠdatalens ááœáẠáá¯á¶ááááºáá±á¬ááºáá¯á¶áá±á¬áºááŒááºážááᯠá
áá
áºááá·áºááœááºážáá«áááºá
á¡ááá¯ááºáž á
á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá
áºáá¯áá¯á¶ážááᯠááá·áºáá»á±á¬áºáá±á¬áá¯á¶ááá¹áá¬ááºá¡ááŒá
Ạáá°áá±á¬ááºááŒáá«á
áá¯á· - gitlab ci ááᯠá¡áá¯á¶ážááŒá¯á ci/cd ááá¯áááºáá±á¬ááºáá«á prometheus ááŸáá·áºáá±á¬ááºá
á
áºáááºááá¯á¡áá¯á¶ážááŒá¯á á
á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº áááºáá±á¬ááºááŸá¯ááŸá¬ááœá±ááœá±á·ááŸáááŸá¯ááᯠáá»áááºáááºáá«á
ТÐ
ááááŠážá áœá¬á ááááºá¡ááŒá Ạáá»áœááºá¯ááºááá¯á·áááŸáááá¯áá±á¬ á¡ááá¡áá» áááºááœáŸááºážáááºááŸááºáá»ááºáá»á¬ážááᯠáá¯á¶áá±á¬áºááŒáá«á áá¯á·á
- áá»áœááºá¯ááºááá¯á·ááẠevents.kis.im (kis.im ááẠáá±á¬ááºážáá«ážá¡á¬ážáá¯á¶ážááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº á ááºážáááºááá¯ááááºážááŒá áºáááº)á HTTPS ááᯠá¡áá¯á¶ážááŒá¯á ááŒá áºáááºáá»á¬ážááᯠáááºáá¶ááá·áºááá·áº á¡áá¯á¶ážááŸááºáá áºáᯠááŸáááá¯áá«áááºá
- á¡á á®á¡á ááºáá»á¬ážááẠááá¯ážááŸááºážáá±á¬ json áá áºáá¯ááŒá áºáááº- {âeventâ: âviewâ, âosâ: âlinuxâ, âbrowserâ: âchromeâ}á áá±á¬ááºáá¯á¶ážá¡ááá·áºááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºáááºá¡áááºážáááºááᯠáááºááá·áºáááºááŒá áºáá±á¬áºáááºáž áááºážááẠááŒá®ážáá¬ážáá±á¬á¡áááºážááá¹áá០áá«áááºáááºááá¯ááºáá«á ááá¹áááŸááá«á protobuf ááá¯á· ááŒá±á¬ááºážááá¯ááºáááºá
- áááºáá±á¬ááºááŸá¯ááẠáá áºá áá¹ááá·áºáá»áŸáẠááŒá áºáááºáá±á«ááºáž 10 ááᯠáá¯ááºáá±á¬ááºááá¯ááºááá«áááºá
- áá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºááœáẠáá¬ááá¡áá áºáá»á¬ážááᯠáá±á«ááºážááá·áºáá¯á¶ááŒáá·áº á¡áá»á¬ážááá¯ááºá¡ááá¯ááºážá¡áá¬ááᯠááá¯ááºážáá¬áááºááŒá áºááá·áºáááºá client áá±á¬ááºážááá¯ááŸá¯áá»á¬ážá¡ááœáẠlatency áá»áŸá±á¬á·áá»ááẠááŸá±á·á¡ááá¯ááºážááᯠááá°áá®áá±á¬ geolocation áá»á¬ážááá¯á· ááœáŸá±á·ááá¯ááºáá»áŸáẠáá±á¬ááºážáá«áááºá
- á¡ááŸá¬ážáá¶ááá¯ááºáááºááŸááááºá ááŒá±ááŸááºážáá»ááºááẠáá¯á¶áá±á¬ááºáá±á¬áááºááŒáááºááŸá¯ááŸáááááºááŒá áºááŒá®áž áááºááá·áºá¡á áááºá¡ááá¯ááºážáááŒáá¯áá²ááŸá¯ááᯠááŸááºáááºááá¯ááºáááẠ(á¡áá»áá¯á·áá±á¬á¡áá±á¡ááœááºá¡ááá áá¯ááºáá«áááº)á
áááá¯áá¬á¡áááºááá¬
áá±áá°áá»á¡á¬ážááŒáá·áºá á€áá¯ááºáááºážá¡áá»áá¯ážá¡á á¬ážá¡ááœááºá áááá±á¬ááºáá±á¬ á¡ááá¯ááºážá¡áá¬ááᯠááœáá·áºááŒá¯ááẠááŸá±ážááá¯ážáááá¯áá¬áááºáá¬áá»á¬ážááᯠáá®ááœááºáá²á·áááºááŸá¬ ááŒá¬áá«ááŒá®á áá¯á¶ááẠáá»áœááºá¯ááºááá¯á·á ááŒá±ááŸááºážáá»ááºá á¥ááá¬ááᯠááŒáááºá
áá«ááᯠáá«ááá¯á·ááŸá¬ áá¬ááœá±ááŸááá²á
1. áááºáááºááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ ááœá²áá»á¬ážááᯠáááºáá®ážáá±ážááá·áº áá»áœááºá¯ááºááá¯á·áá ááºáá á¹á ááºážáá»á¬ážááẠá áááºáá¯ááºážáá±á«áºááœáẠáá á¬ážá áá¬á¡ááá·áºáá áºáá¯ááᯠááŒá®ážááŒá±á¬ááºááá·áº áá á¬ážááá¬ážáá»á¬ážááŒá áºá á± ááá¯á·ááá¯áẠáá¯á¶ááŸááºááá±á¬ááºáá¬ááŸáá áºááá·áº á¡áœááºááá¯ááºážá ááá¯ážááœáẠááŸá¬áá°ááŸá¯áááºáá®ážááá·áº áá á¬ážááá¬ážáá»á¬ážááŒá áºáááºá áááºááŸááºáá»ááºááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž ááŒá áºáááºáá áºáá¯ááẠáá»áœááºá¯ááºááá¯á·áá¡áá¯á¶ážááŸáẠ- events.kis.im ááá¯á· áá±ážááá¯á·ááá·áº ááá¯ážááŸááºážáá±á¬ json áá áºáá¯ááŒá áºáááºá
2. ááááá¬áá¬ááŸá áºáá¯ááẠááá¯ážááŸááºážáá±á¬áááºáá»ááºáá®áá°áá»á¬ážááŒá áºááŒá®áž áááºážááá¯á·áá¡ááááá¬áááºáá»á¬ážááŸá¬-
- á¡áááºáááŒááºáááŸáááá¯ááºáá«á á±á áááºážááá¯áá¯ááºáá±á¬ááºáááºá ááŒá¿áá¬áá»á¬ážááŸááá±á¬á¡áá«ááœáẠnode áá»á¬ážá¡ááŒá¬áž virtual IP ááá¯ááŒá±á¬ááºážáá±ážááá·áºá¥ááá¬- Keepalived ááá¯áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
- TLS ááᯠá¡áá¯á¶ážáááºáá«á áá¯ááºáá²á·á áááºážááá¯á·á¡áá±á«áº TLS ááᯠáá»áœááºá¯ááºááá¯á· áááºá á²áá«áááºá ááááŠážá áœá¬á áá»áœááºá¯ááºááá¯á·áááŒá±ááŸááºážáá»ááºááẠáááºážááá¬ááá¯ááºáᬠáááºááŸááºáá»ááºáá»á¬ážááŸáá·áº ááá¯ááºáá®á á±áááºá áá¯áááá¡áá»ááºááŸá¬ áá»áœááºá¯ááºááá¯á·á áá±á¬ááºáá¶áá¬áá¬áá»á¬ážá០áá¯ááºááŸááºáá¬ážáá±á¬ áá»áááºáááºááŸá¯áá áºáá¯ááᯠáá°áá±á¬ááºááŒááºážá áááºáá¯ááºáááºááá¯ážááᯠáááºáá¬á á±áááºá
- áááŸáááá¯ááºáá±á¬ áá±á¬ááºáá¶áá¬áá¬áá»á¬ážá¡ááœáẠá¡áááºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá»áááºááœááºáá»áŸá¬ááŸááá«á á€áá±áá¬ááœáẠá¡áááá áá¬ážáá¯á¶ážááᯠáá¯á¶ážááá¯ááºáááºá áááºážááá¯á¡ááŒá±áá¶á load balancers ááẠáá»áœááºá¯ááºááá¯á·ááá¬áá¬áá»á¬ážááᯠá¡ááá®áá±ážááŸááºážáá»á¬ážááŒáá·áº á á±á¬áá·áºááŒáá·áºááá¯ááºááŒá®áž áá¡á±á¬ááºááŒááºáá±á¬ node áá»á¬ážááá¯á· áááºážááŒá±á¬ááºážááᯠáááºáá»ááºáá®á¡á±á¬áẠáááºááá·áºááá¯ááºááááºááᯠáá¬ážáááºáá¬áá«áááºá
3. Balancers áá»á¬ážááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááœáẠá¡áá±á¬áºáá±ážááá¯ážááŸááºážáá±á¬ á¡ááá®áá±ážááŸááºážáá áºáá¯ááᯠáá¯ááºáá±á¬ááºáá±ááá·áº á¡ááá®áá±ážááŸááºážáá¬áá¬áá»á¬ážááŸááááºá HTTP ááŸáá áºááá·áº áááºáá¬áá±á¬ áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáááºáá¶ááá¯ááºáááºá áá±ážááá¯á·áá¬ážáá±á¬ json ááᯠááá¬ážáááºá¡á±á¬ááºááŒá¯áá¯ááºááŒá®áž áá±áá¬ááᯠááŒá¬ážáá¶á¡ááŒá Ạááá·áºááœááºážááá¯ááºáááºááŒá áºáááºá
4. áá¯á¶ááŒááºážááẠkafka á¡á¬áž ááŒá¬ážáá¶áá áºáá¯á¡ááŒá ẠááŒááá±á¬áºáááºážá á€á¡ááá·áºááœáẠá¡ááŒá¬ážáá±á¬ á¡áá¬ážáá°áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áááááá±á¬ááºážáá«ážááœáẠKafkaá rabbitmq ááŸáá·áº yqs ááá¯á·ááᯠááŸáá¯ááºážááŸááºáá«áááºá
5. áá»áœááºá¯ááºááá¯á·ááááá¯áá¬áááºáá¬áá¡áá¯á¶ážá áœááºáá±á¬á¡áá»ááºááŸá¬ Clickhouse - áá±áá¬ááá¬ááá»á¬ážá áœá¬ááᯠááááºážáááºážááŒá®áž á á®áá¶áá±á¬ááºááœááºááá¯ááºááá·áº áá±á¬áºáá¶áá¬ážáá±áá¬áá±á·á áºááŒá áºáááºá á€á¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠááŒá¬ážáá¶á áá áºá០áá±áá¬ááᯠááá¯ááŸá±á¬ááºááŸá¯á áá áºááá¯á· ááœáŸá²ááŒá±á¬ááºážááẠááá¯á¡ááºááẠ(á¡ááá¯áẠ4 ááœáẠááá¯ááá¯ááááŸáááá¯ááºáááº)á
á€áá®ááá¯ááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á¡ááœáŸá¬áá áºáá¯á á®ááᯠá¡áá»á¬ážááá¯áẠá¡ááŸá®á¡ááá¯áááºážá áœá¬ á¡ááá¯ááºážá¡áá¬ááŒáá·áº ááá¯ááºážáá¬ááá¯ááºá á±áá«áááºá Backend áá¬áá¬áá»á¬ážááẠááááºážáá»á±á¬ááºážááááá« - áá±á¬ááºáááºáá áºáᯠáááºááá·áºááŒáá·áºáá¡á±á¬áẠ- áááºážááá¯á·ááẠááá¯ááºáá¶áá²á·á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááᯠá¡ááá¯á¡áá»á±á¬ááºááẠáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá Kafka á ááá¯ááºááŒá¬ážáá¶ááẠá¡áá¯ááºááá¯ááºáá«âáá¬áá¬áá»á¬ážáááºááá·áºáᬠáá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¬ááºážá¡áá¬á á¡ááá¯ááºážá¡áá»áá¯á·ááᯠáááºážááá¯á·áᶠááœáŸá²ááŒá±á¬ááºážááŒáá«á áá¯á·á Clickhouse á á¡á²áá«ááᯠáááá¯ááºááœááºááá¯ááºáá°áž - áááŒá áºááá¯ááºáá°áž :) ááááºáá±á¬á·á áá«ááá¯á·á áá¬áá¬ááœá±ááᯠáá»áááºáááºááŒá®áž áá±áá¬ááœá±ááᯠááœá²áá¯ááºáááºá
á áá¬ážáá ááºá áááºááẠááá°áá®áá±á¬ áááá®áááºáááºáá±áá¬áá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·á áááºážááá¬ááá¯ááºáᬠáááºááŸááºáá»ááºáá»á¬ážááŸáá·áº á¡ááá¯ááºážá¡áá¬á ááœá±ážáá»ááºááá¯ááºáá±á¬á¡á áááºá¡ááá¯ááºážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯áá«áá ááá¯á·áááºááá¯á ááá¯ážááŸááºážáá±á¬á¡áá¬áááŸááá«á
geolocation áá
áºáá¯á
á®ááœáẠapplication ááŸáá·áº kafka ááŒáá·áº load balancer ááá¯áá»áœááºá¯ááºááá¯á·áá»áá¬ážáá«áááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá á¡ááá®áá±ážááŸááºážáá¬áᬠ2 áá¯á kafka node 3 áá¯ááŸáá·áº cloud balancer á¥ááá¬á cloudflare ááẠáá¯á¶áá±á¬ááºáááºá áááºážááẠclient áá¡áááºážá¡ááŒá
ẠIP address ááá¯á¡ááŒá±áá¶á áááá®áááºáááºáá±áá¬á¡ááá¯áẠapplication nodes áá»á¬ážáááŸáááá¯ááºááŸá¯ááŸáá·áº balance áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯á
á
áºáá±ážáá±ážáááºááŒá
áºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá á¡áá±áááááºáá±á¬ááºáááºáá
áºáŠážááŸáá±ážááá¯á·áá±á¬áá±áá¬ááẠá¡áá±áááááºáá¬áá¬áá»á¬ážáá±á«áºááœáẠáá±á¬ááºááŸááááºááŒá
áºáááºá á¡á¬ááááááŸáá±áá¬ááẠá¡á¬ááááááºááŒá
áºáááºá
ááá¯á·áá±á¬ááºá¡áá¬á¡á¬ážáá¯á¶ážáááºá¡áá±á¬áºáá±ážááá¯ážááŸááºážáá«ááẠ- áá»áœááºá¯ááºááá¯á·ááẠKafka set á០mirror tool ááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážáá±áá¬á¡á¬ážáá¯á¶ážááŸáá±áá¬á¡á¬ážáá¯á¶ážááá¯áá¯ááŸá¬ážááŸááá»áœááºá¯ááºááá¯á·ááááá¯áá±áá¬á ááºáá¬ááá¯á·áá°ážáá°áá«á á¡ááœááºážááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬ááᯠááœá²ááŒááºážá áááºááŒá¬ááŒá®áž áá±á¬ááºáááºááœá²ááŒááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠClickhouse ááœáẠááŸááºáááºážáááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááá¯áá¬ááá¬ááᯠááœá²áá¯ááºááá¯ááºáááº- Yandex.Cloud ááᯠá áááºááŸá¯ááºáááºážááá¯ááºááŒáá«á áá¯á·á
áá»áœááºá¯ááºááá¯á·ááẠá¡ááºááá®áá±ážááŸááºážáá áºáá¯áá±ážáá±áá«áááºá
Cloud ááá±á«áºáá®á áááºááẠá¡áááºážááẠá áááºááŸááºááẠááá¯á¡ááºááŒá®áž áááºáá¬ááá·áº á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááá¯ážááŸááºážáá±á¬ áááºáá±á¬ááºááŸá¯áá áºáá¯ááᯠáá±ážáá«á ááœááºáááºá¡ááºááá®áá±ážááŸááºážáá»á¬ážáá±ážáá¬ážááŒááºážá¡ááœáẠáá¬áá¬á áá¬ážáá áºáá¯á¡ááŒá Ạáá±á¬ááºážá áœá¬áááºáá±ááŒáá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯áááºááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá«áááºá
áá
áºáá¬áá®ááŒá¬á¡á±á¬áẠ(áá¬áá®á¡áááºážáááºááŒá¬áááºááŒá
áºá
á±) áá»áœááºá¯ááºááá¯á· á€áá²á·ááá¯á·áá±á¬ á¡áá¬áá
áºáá¯ááᯠáááŸááááº-
á€áá±áá¬ááœáẠáá»áœááºá¯ááºááŸááºáá¬ážááá¯ááá·áº á¡áááá¡áá»ááºáá»á¬ážááŸá¬ á¡áááºáááºážá
1. á¡ááá®áá±ážááŸááºážááᯠá áááºáá±á¬á¡áá«á áááºááẠá¡áá¶ááŸá áºáá¯ááᯠáááºááŸááºááá¯ááºáááºá á¡ááẠhttp áá±á¬ááºážááá¯áá»ááºáá»á¬áž (-addr) ááᯠáá¬ážáá±á¬ááºááá·áº port áá áºáá¯ááœáẠáá¬áááºááŸááá«áááºá áá¯áááááŸá¬ áá»áœááºá¯ááºááá¯á·áá¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠááŸááºáááºážáááºááá·áº kafka áá¬áá¬ááááºá á¬á¡ááœááºááŒá áºááẠ(-kafka)á
addr = flag.String("addr", ":8080", "TCP address to listen to")
kafka = flag.String("kafka", "127.0.0.1:9092", "Kafka endpointsâ)
2. á¡ááá®áá±ážááŸááºážááẠsarama á
á¬ááŒáá·áºááá¯ááºááá¯á¡áá¯á¶ážááŒá¯ááẠ(
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true
3. áá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ áááºááá áºáá»á¬ážááᯠá á¯áá±á¬ááºážáá±ážááá·áº built-in prometheus client áááºážáá«ááŸááá«áááºá
- áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬ááºááœáŸá¬ááœáẠáá±á¬ááºážááá¯áá»ááºá¡áá±á¡ááœááºá
- áá±á¬ááºážááá¯áá»ááºááá¯áá¯ááºáá±á¬ááºáá±á¬á¡áá« á¡ááŸá¬ážá¡ááœááºážá¡áá±á¡ááœáẠ(ááá¯á·á áºáá±á¬ááºážááá¯áá»ááºááᯠáááºáááºáááŒá áºááá¯ááºá áá»áá¯ážáá²á·áá±áá±á¬ jsoná Kafka ááá¯á· á á¬áá±ážáááºáááŒá áºááá¯ááº);
- Kafka ááá¯á· áááºáá±á·áá»áºáá±ážááá·áºá¡áá»áááºá¡áá«á¡ááẠáá¯á¶ážá áœá²áá°áá¶á០áá±á¬ááºážááá¯áá»ááºáá áºáá¯á¡ááœáẠáá¯ááºáá±á¬ááºáá»áááºá
4. áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬ááºááœáŸá¬áááºááŒááºážáá¯ááºáááºážá ááºááœáẠá¡áá¯á¶ážá¡áá»ááºáá¯á¶ážáá»ááº-
- /status - áá»áœááºá¯ááºááá¯á· á¡áááºááŸááºáá±ááŒá±á¬ááºážááŒáááẠááá¯ážááŸááºážá áœá¬ ok ááŒááºááœá¬ážáá«á Kafka á¡á á¯á¡áá±ážááááŸáááá¯ááºááŸá¯áá²á·ááá¯á·áá±á¬á á áºáá±ážááŸá¯á¡áá»áá¯á·ááá¯áááºááá·áºááœááºážááá¯ááºáááºá
- /metrics - ဠurl á¡áá prometheus client ááẠá á¯áá±á¬ááºážáá¬ážáá±á¬ áááºááá áºáá»á¬ážááᯠááŒááºáá±ážáá«áááºá
- /post ááẠá¡ááœááºážá០json ááŒáá·áº POST áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá±ážááá¯á·ááá·áº á¡áááá¡áá¯á¶ážááŸááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááºááºáá®áá±ážááŸááºážááẠjson ááá¯ááá¬ážáááºááŸá¯ááŸááááŸáá á áºáá±ážááŒá®ážá¡áá¬á¡á¬ážáá¯á¶ážá¡áááºááŒá±áá«ááááºážáááºáá±áá¬ááᯠKafka á¡á á¯á¡áá±ážááá¯á·áá±ážáá±ážáááºá
áá¯ááºáááŒáá·áºá á¯á¶áá«á ááŒáá¯áááºá á¬áááºážááœááºážáá« - áááºážááẠ(ááŒá®ážááá·áºáááº!) ááŒá®ážááŒá±á¬ááºááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠbuilt-in net/http ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááá¯áááºááŒá®áž ááá¯ááá¯ááŒááºáááºáá±á¬ http ááá¯á·ááŒá±á¬ááºážááá¯ááºáááºá ááá¯á·ááá¯áẠáá±áá¬áá»á¬ážááᯠááŒá¬ážáá¶á០clickhouse á¡á á¯á¡áá±ážááá¯á· ááœáŸá²ááŒá±á¬ááºážááá·áºá¡áá« json ááá¬ážáááºááŸá¯á á áºáá±ážáá»ááºááᯠáá±á¬ááºá¡ááá·áºááá¯á· ááœáŸá±á·ááŒááºážááŒáá·áº áá¯ááºáá±á¬ááºáá»áááºááŸáá·áº cpu áááºážááŒá áºáá»á¬ážááᯠáááŸáááá¯ááºáááºá
ááŒá¿áá¬áááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áááºááŒááºážá¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡áá¬áááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáá»ááºáá»ááºážá
ááºážá
á¬ážááŒá®áž docker ááŸáá
áºááá·áº áá»áœááºá¯ááºááá¯á·ááá»áŸá±á¬ááºááœáŸá¬ááᯠá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá á¡ááá®áá±ážááŸááºážááá¯áááºáá±á¬ááºáááºá¡ááœáẠáá±á¬ááºáá¯á¶áž Dockerfile ááŒá
áºáááºá
Cloud ááœáẠááááá¯á¶ážááŒá±ááŸááºážáá»á¬áž
ááááá¯á¶ážá¡áá±áá²á· á
á¬áááºážááœááºážááá¯ááºáá«á
ááŸááºáá¯á¶áááºááŒá®ážáá±á¬ááºá cloud á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºá áááºáááºáá®ážááá¯ááºá á±ááá·áº áá®ážááŒá¬áž cloud ááŸáá·áº áá°áááºážáááºážááœáŸááºáá áºáá¯ááᯠááá·áºá¡ááœáẠáááºáá®ážáá±ážáááºááŒá áºáááºá áá±áá°áá»á¡á¬ážááŒáá·áºá Yandex.Cloud ááœáẠá¡áááºážá¡ááŒá áºáá»á¬ážá áááºááœááºááŸá¯ááẠá€áá²á·ááá¯á· ááŒá áºáá¯á¶ááááºá
á¡áá±á¬áá·áºáá
áºáá¯á¡ááœáẠcloud áá»á¬ážá
áœá¬ááᯠáááºáááºáá®ážááá¯ááºáááºá Cloud á¡ááœááºážááœáẠááá°áá®áá±á¬ áá¯áá¹ááá®ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠááá°áá®áá±á¬ áááºážááœáŸááºáá»á¬áž ááŒá¯áá¯ááºáá«á á€á¡ááŒá±á¬ááºážááᯠá
á¬áááºážááŒá¯á
á¯ááŒááºážááœáẠááá¯ááá¯áááºááŸá¯ááá¯ááºáá«áááº-
cloud ááᯠá á®áá¶ááá·áºááœá²áááºá áááºááẠáááºá¡ááºáá¬áá±á·á áºááŸáá·áº ááœááºááá¯ážáẠá¡áá¯á¶ážáááºááŸá¯ - yc ááŸá áºáá¯áá¯á¶ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááá·áºááœááºážááŒááºážááᯠcommand áá áºáá¯áááºážááŒáá·áº áá¯ááºáá±á¬ááºááẠ(Linux ááŸáá·áº Mac Os á¡ááœááº)
curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
ááá·áºá¡ááœááºážááá¯ááºážáá¯á¶ááŒá¯á¶áá±ážáá»áœááºážáá»ááºáá°ááẠá¡ááºáá¬áááºá០scripts áá»á¬ážááᯠrun ááŒááºážááŸáá·áºáááºáááºá á¡ááŒááºážá¡áááºáá¯ááºáá±áá«áá ááááŠážá áœá¬ áááºááẠscript ááá¯ááœáá·áºááŒá®áž áááºážááá¯áááºááá¯ááºááŒá®áž áá¯áááá¡áá±ááŒáá·áºá root áá¯ááºááá¯ááºááœáá·áºáááŸááá² áá»áœááºá¯ááºááá¯á·áá¡áá¯á¶ážááŒá¯áá°á¡á±á¬ááºááœáẠáááºážááᯠrun ááá¯ááºáá«áááºá
Windows á¡ááœáẠclient áá
áºáá¯ááᯠinstall áá¯ááºááá¯áá«áá ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá yc init
áááºážááᯠá¡ááŒáá·áºá¡á á
áááºááŒáá¯ááºááŒááºáááºáááº-
vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.
Please enter OAuth token:
Please select cloud to use:
[1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
[2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
[1] default (id = b1g5r6h11knotfr8vjp7)
[2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
[1] ru-central1-a
[2] ru-central1-b
[3] ru-central1-c
[4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $
áááá¬áá¡á¬ážááŒáá·áºá áá¯ááºáááºážá ááºááẠááá¯ážááŸááºážááẠ- áŠážá áœá¬ áááºááẠcloud ááá¯á á®áá¶ááá·áºááœá²ááẠoauth ááá¯áááºáá áºáá¯ááááºá cloud ááá¯ááœá±ážáá»ááºááŒá®áž áááºá¡áá¯á¶ážááŒá¯ááá·áº folder ááá¯ááœá±ážáá»ááºáá«á
ááá·áºááœáẠáá áºáá¯áááºážáá±á¬ cloud ááœáẠá¡áá±á¬áá·áºáá»á¬ážá áœá¬ ááá¯á·ááá¯áẠááá¯ááºááœá²áá»á¬ážááŸááá«áá áááºááẠyc config áááá¯ááá¯ááºáááºáá®ážááŒá®áž áááºážááá¯á·ááŒá¬ážááœáẠááŒá±á¬ááºážááŒááºážááŸáá áºááá·áº áá®ážááŒá¬ážáááºáááºáá»á¬ážááŒáá·áº áá±á¬ááºáááºáááá¯ááá¯ááºáá»á¬ážááᯠáááºáá®ážááá¯ááºáááºá
á¡áááºáá«áááºážáááºážáá»á¬ážá¡ááŒáẠYandex.Cloud á¡ááœá²á·ááẠá¡ááœááºáá±á¬ááºážááœááºááŒá±á¬ááºáž áá±ážáá¬ážáá²á·áááºá
vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/
terraform ááœááºá¡áá¯á¶ážááŒá¯ááá·áº á¡ááá variable á¡á¬ážáá¯á¶ážááᯠmain.tf ááá¯ááºááœáẠáá±ážáá¬ážáá¬ážáááºá á áááºáááºá á¡á±á¬ááºáá«á¡ááŒá±á¬ááºážá¡áá¬ááŒáá·áº terraform ááá¯ááºááœá²ááœáẠprivate.auto.tfvars ááá¯ááºááᯠáááºáá®ážáá«á
# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""
áá»áœááºá¯ááºááá¯á·ááẠconsole utility ááᯠconfigure áá¯ááºáá¬ážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº variable á¡á¬ážáá¯á¶ážááᯠyc config list ááŸáá°ááá¯ááºáááºá ááá¯ááºáá±ážááá¯ááºáá¬áá±áá¬ááᯠááá±á¬áºáá ááá¯ááºáá±ááá á±áááºá¡ááœáẠprivate.auto.tfvars ááᯠ.gitignore ááœáẠáá»ááºáá»ááºážááá·áºááẠááá·áºá¡á¬áž áá»áœááºá¯ááºá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
private.auto.tfvars ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¬áá¬áá»á¬ážááá¯á· DNS ááŸááºáááºážáá»á¬ážáááºáá®ážáááºááŸáá·áº áááºáááá¯ááááºáž events.kis.im ááᯠproxy ááŒá¯áá¯ááºááẠCloudflare ááŸáá±áá¬ááá¯áááºáž áááºááŸááºáá±ážáá«áááºá cloudflare ááᯠá¡áá¯á¶ážáááŒá¯ááá¯áá«á main.tf ááŸáá·áº dns.tf ááá¯ááºááœáẠááá¯á¡ááºáá±á¬ dns ááŸááºáááºážáá»á¬ážááᯠáááºáá®ážááẠáá¬áááºááŸááá±á¬ cloudflare áááºáá±á¬ááºááŸá¯áá±ážáá°á áááŠážá¡á ááᯠáááºááŸá¬ážááá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·ááá¯ááºáááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºá¡ááºáá¬áá±á·á áºá ááœááºááá¯ážááºá¡áá¯á¶ážááŒá¯ááŸá¯ ááŸáá·áº terraform áááºážáááºážáá¯á¶ážáá¯áá¯á¶ážááᯠáá±á«ááºážá ááºáááºááŒá áºáááºá
Virtual ááœááºáááºáá»á¬áž
ááá¯ážááá¯ážáá¬ážáá¬ážááŒá±á¬ááá»áŸáẠáááºááẠcloud á¡áá
áºáá
áºáá¯áááºáá®ážáá±á¬á¡áá«ááœáẠáááºááẠáá®ážááŒá¬ážááœááºáááºáá
áºáá¯ááŸáá·áº áááŸáááá¯ááºááŸá¯áá¯ááºáá
áºáá¯á
á®á¡ááœáẠáá
áºáá¯á
á®á¡ááœáẠááœááºáááºááœá² 3 áᯠá¡ááá¯á¡áá»á±á¬ááºáááºáá®ážáá±ážáááºááŒá
áºáá±á¬ááŒá±á¬áá·áº á€á¡ááá·áºááᯠáá»á±á¬áºááœá¬ážááá¯ááºáááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáááºážáááá¯ááºááá¯ááºááááºá
á¬ááŒáá·áº áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºá¡ááœáẠáá®ážááŒá¬ážááœááºáááºáá
áºáᯠááŒá¯áá¯ááºááá¯áá±ážáááºá Yandex.Cloud ááœáẠááœááºáááºá¡áá¯ááºáá¯ááºáá¯á¶á áá±áá°áá» áá¯á¶ááŒááºážááᯠá¡á±á¬ááºáá±á¬áºááŒáá«áá¯á¶ááœáẠááŒáá¬ážáá«ááẠ(ááá¯ážáá¬ážá
áœá¬ áá°ážáá°áá±á¬áºááŒáá«áááºá
ááá¯á·ááŒá±á¬áá·áº áááºááẠá¡áááºážá¡ááŒá
áºáá»á¬ážá¡áá»ááºážáá»ááºáž áááºááœááºááá¯ááºááá·áº áá¯á¶ááœááºáááºáá
áºáá¯ááᯠáááºáá®ážáá«á áááŸáááá¯ááºááŸá¯áá¯ááºáá
áºáá¯á
á®á¡ááœááºá subnet áá
áºáá¯ááᯠáááºážáááá¯ááºááá¯ááºááááºá
á¬ááŒáá·áº áááºáá®ážáá¬ážááŒá®áž áá±áá¯áá»ááœááºáááºááá¯á· áá»áááºáááºáá¬ážáááºá ááááºá¡áá±ááŒáá·áºá áááºážááŸá cloud á¡áááºážá¡ááŒá
áºáá»á¬ážá¡á¬ážáá¯á¶ážááẠááá°áá®áá±á¬áááŸáááá¯ááºááŸá¯áá¯ááºáá»á¬ážááœááºááŸááá±áá±á¬áºáááºáž áááºááœááºááá¯ááºáááºá ááá°áá®áá±á¬ cloud ááœááºáááºáá»á¬ážááá¯á· áá»áááºáááºáá¬ážáá±á¬ á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŒááºáááááºá
á¬áá»á¬ážááŸáá
áºááá·áºáᬠááŒááºááá¯ááºáá«áááºá á
áá¬ážáá
áẠáá®ááŸá±á¬áºá¡áá²ááŸá¬ áááºááá¯á¡áá¯ááºáá¯ááºáá²á
ááœááºáááºáááºáá®ážááŸá¯ááᯠááá¯ááŸá±á¬ááºááŸá¯á០network.tf ááá¯ááºááœáẠáá±á¬áºááŒáá¬ážáá«áááºá á¡á²áá®ááŸá¬ áá¯á¶áá¯áá¹ááááááœááºáááºá¡ááœááºážááá¯ááºážáá áºáá¯ááᯠáááºáá®ážááŒá®áž ááá°áá®áá²á·áááŸáááá¯ááºááŸá¯áá¯ááºááœá±ááŸá¬ áááºážááá¯áá»áááºáááºáá« - internal-a (172.16.1.0/24), internal-b (172.16.2.0/24), internal-c (172.16.3.0/24)á )
Terraform ááᯠá áááºááŒá®áž ááœááºáááºáá»á¬áž áááºáá®ážáá«-
vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..
vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c
... skipped ...
Plan: 4 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
ááá¯ááºáááº! áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááœááºáááºááᯠáááºáá®ážáá²á·ááŒá®áž ááá¯á¡áá« áá»áœááºá¯ááºááá¯á·áá¡ááœááºážááá¯ááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºáá®ážááẠá¡ááá·áºááŒá áºáá±áá«ááŒá®á
virtual á ááºáá»á¬ážáááºáá®ážááŒááºážá
á¡ááá®áá±ážááŸááºážááᯠá ááºážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠvirtual machine ááŸá áºáá¯ááᯠáááºáá®ážáááºáᬠááá¯á¡ááºáááºááŒá áºááẠ- áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááᯠáááºáá±á¬ááºááŒá®áž áá¯ááºáá±á¬ááºááẠáááá á¡áááºáááºáá±á·áá»áºáá»á¬ážááᯠááááºážáááºážááẠáá¯áááááŸá¬ Kafka ááᯠá¡áá¯á¶ážááŒá¯ááẠááá¯á¡ááºáááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááᯠá á±á¬áá·áºááŒáá·áºááẠprometheus ááᯠconfigure áá¯ááºááá·áº á¡ááŒá¬ážá ááºááᯠáááºáá®ážáá«áááºá
virtual machines áá»á¬ážááᯠansible ááᯠá¡áá¯á¶ážááŒá¯á configure áá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº terraform ááá¯áá áááºáá®á ááá·áºááœáẠansible ááá±á¬ááºáá¯á¶ážááœááºáá¬ážááŸááºážáá áºáá¯ááŸááááºááᯠáá±áá»á¬áá«á á±á ansible galaxy ááŒáá·áº ááá¯á¡ááºáá±á¬ á¡áááºážááá¹ááá»á¬ážááᯠááá·áºááœááºážáá«-
vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $
ansible ááá¯áá«á¡ááœááºážááœáẠáá»áœááºá¯ááºá¡áá¯á¶ážááŒá¯áá±á¬ á¥ááᬠ.ansible.cfg ááœá²á·á ááºážááŸá¯ááá¯ááºáá áºáá¯ááŸááááºá á¡áááºááŒá±áá¬ááá¯ááºáá«áááºá
virtual machines ááááºáá®ážáá®á ááá·áºááœáẠssh-agent áááºáááºáá±ááŒá®áž ssh áá±á¬á·áá
áºáá¯ááá·áºááœááºážáá¬ážááŒá±á¬ááºáž áá±áá»á¬á
á±áá«á ááá¯á·ááá¯ááºáá«á terraform ááẠáááºáá®ážáá¬ážáá±á¬á
ááºáá»á¬ážááá¯á· áá»áááºáááºááá¯ááºáááºááá¯ááºáá«á áá« os x ááŸá¬ bug áá
áºáá¯ááœá±á·áá²á·áááºá
vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
terraform áá«áá±á¬ folder ááœáẠáá»áœááºá¯ááºááá¯á·ááẠááá¯á¡ááºáá±á¬á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºáá®ážáááº-
vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
... skipped ...
Plan: 3 to add, 0 to change, 0 to destroy.
... skipped ...
á¡á¬ážáá¯á¶ážá¡á±á¬ááºááŒááºá áœá¬ááŒá®ážáá¯á¶ážááœá¬ážáá«á (áá«ááŒá áºááá·áºáááº)á áá»áœááºá¯ááºááá¯á·ááœáẠvirtual machine áá¯á¶ážáá¯ááŸááááº-
- build - á ááºážáááºááŒááºážááŸáá·áº á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááᯠáááºáá±á¬ááºáááºá¡ááœáẠá ááºáá áºáá¯á Docker ááᯠAnsible á០á¡ááá¯á¡áá»á±á¬áẠááá·áºááœááºážáá²á·áááºá
- á á±á¬áá·áºááŒáá·áºá á áºáá±ážááŒááºáž - á á±á¬áá·áºááŒáá·áºáá±ážá áẠ- prometheus & grafana áááºážááœááºáááºáááºáá¬ážáááºá á¡áá±á¬áá·áºááẠ/ á áá¬ážááŸááºá á¶: admin / admin
- kafka ááẠport 9092 ááœáẠkafka ááá·áºááœááºážáá¬ážáá±á¬ á¡áá±ážá á¬ážá ááºáá áºáá¯ááŒá áºáááºá
áááºážááá¯á·á¡á¬ážáá¯á¶áž áá±áá¬ááœáẠááŸááá±ááŒá±á¬ááºáž áá±áá»á¬á á±ááŒáá«á áá¯á·á
vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
| ID | NAME | ZONE ID | STATUS | EXTERNAL IP | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build | ru-central1-a | RUNNING | 84.201.132.3 | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+
á¡áááºážá¡ááŒá
áºáá»á¬áž ááŸááá±ááŒá®ážá á€áá±áá¬á០áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·á IP ááááºá
á¬áá»á¬ážááᯠááá°ááá¯ááºáá«áááºá á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬á¡ááŒá±á¬ááºážá¡áá¬áá
áºáá»áŸá±á¬ááºáá¯á¶áž ssh ááŸáááá·áºáá»áááºáááºáááºááŸáá·áºáá»áŸá±á¬ááºááœáŸá¬ááá¯á
ááºážáááºááẠIP ááááºá
á¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯áá«áááºá ááá·áºááœáẠterraform ááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ cloudflare á¡áá±á¬áá·áºáá
áºáá¯ááŸááá«áá á¡áá
áºáááºáá®ážáá¬ážáá±á¬ DNS á¡áááºáá»á¬ážááᯠááœááºáááºá
áœá¬ á¡áá¯á¶ážááŒá¯áá«á
á
áá¬ážáá
ááºá virtual machine áá
áºáá¯áááºáá®ážáá±á¬á¡áá«á internal IP ááŸáá·áº internal DNS name ááá¯áá±ážáááºá ááá¯á·ááŒá±á¬áá·áº network á¡ááœááºážááŸááá¬áá¬áá»á¬ážááá¯á¡áááºááŒáá·áºáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáááº-
ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms
kafk ááŒáá·áº á¡áá¯á¶ážááŸááºááᯠá¡ááá®áá±ážááŸááºážááá¯á·ááœáŸááºááŒááẠáááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áá¯á¶ážáááºáá«áááá·áºáááºá
áá»áŸá±á¬ááºááœáŸá¬ááá¯á á¯á ááºážááŒááºážá
áá±á¬ááºážáááºá áá¬áá¬ááœá±ááŸááááºá á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááŸáááẠ- áá»ááºáá¬á¡á¬ážáá¯á¶ážááááºážááá¯á á¯áá±ážááŒá®ážáá¯ááºáá±áááºááŒá áºáááºá áááºáá±á¬ááºááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááŸáẠdocker áááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáá±á¬áºáááºáž áá¯ááºáá¯á¶ááá¯ááŸá±á¬ááºááŸá¯á¡ááŒá ẠYandex - container registry á០áááºáá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá áá«áá±ááá·áº á¡áááºá¡áá¬ááœá±ááᯠá¡áááºáá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááᯠáááºáá±á¬ááºá ááºááá¯á· áá°ážáá°áᬠssh ááŸáá áºááá·áº áááºáá±á¬ááºááŒá®áž áá¯á¶ááᯠá á¯á ááºážáá«á
vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/
... skipped ...
sent 3849 bytes received 70 bytes 7838.00 bytes/sec
total size is 3644 speedup is 0.93
vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon 6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...
Successfully built 9760afd8ef65
Successfully tagged app:latest
ááá¯ááºááœá²áá áºáááºááŒá®ážááœá¬ážáá«ááŒá® - ááá¯áá»áœááºá¯ááºááá¯á·áá¡ááºááá®áá±ážááŸááºážááá¯ááºáá±á¬ááºááá¯ááºá áœááºážááá¯á áááºáᬠkafka ááá¯á·áá±ážááá¯á·ááŒááºážááŒáá·áºáá»áœááºá¯ááºááá¯á·á á áºáá±ážááá¯ááºáááº-
ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>
С лПкалÑМПй ЌаÑОМкО ЌПжМП ПÑпÑавОÑÑ ÑеÑÑПвÑй event О пПÑЌПÑÑеÑÑ ÐœÐ° ПÑвеÑ:
<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41
{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $
á¡ááá®áá±ážááŸááºážááẠá¡áá¶ááœááºážááŒááºážá¡á±á¬ááºááŒááºá áœá¬ áá¯á¶á·ááŒááºáá²á·ááŒá®áž áááºáá±á·áá»áºááœáẠáá«áááºááá·áº partition ááŸáá·áº offset á ID ááᯠááœáŸááºááŒáááºá áá¯ááºáááºáá»ááºáááºááŸá¬ Yandex.Cloud ááœáẠregistry áá áºáá¯áááºáá®ážááŒá®áž áá»áœááºá¯ááºááá¯á·ááá¯á¶ááᯠááá¯áá±áá¬ááœáẠá¡ááºáá¯ááºáá¯ááºáááºááŒá áºááẠ(á á¬ááŒá±á¬ááºážáá¯á¶ážááŒá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á áááºážááᯠregistry.tf ááá¯ááºááœááºáá±á¬áºááŒáá¬ážáááº)á ááá¯ááŸá±á¬ááºáááºážáá áºáᯠáááºáá®ážáá«-
vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events
... skipped ...
Plan: 1 to add, 0 to change, 0 to destroy.
... skipped ...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
oauth ááá¯áááºá iam ááá¯ááẠááá¯á·ááá¯áẠáááºáá±á¬ááºááŸá¯á¡áá±á¬áá·áºáá±á¬á·ááᯠá¡áá¯á¶ážááŒá¯á ááœááºááááºáá¬ááŸááºáá¯á¶áááºááŒááºážááœáẠá
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááẠáááºážáááºážáá»á¬ážá
áœá¬ááŸááá«áááºá á€áááºážáááºážáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠá
á¬ááœááºá
á¬áááºážáá»á¬ážááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher
... skipped ...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
á¡áᯠáá»ááºáá¬á¡á¬ážáá¯á¶ážá á¡á²áá«á¡ááœáẠáá±á¬á·áá áºáá¯áá¯ááºáááŸá¬á
vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á ááá¯ááŸá±á¬ááºááŸá¯ ID ááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºáá¶áááŸááááºá áá±á¬á·ááᯠááœáŸá²ááŒá±á¬ááºážááŒá®áž á¡áá±á¬áá·áºáááºáá«-
vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json 100% 2392 215.1KB/s 00:00
vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
ubuntu@build:~$
áá«ááºáá¯á¶ááᯠregistry ááá¯á· á¡ááºáá¯ááºáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠááœááºááááºáᬠááŸááºáá¯á¶ááẠID ááá¯á¡ááºáááºá áááºážááᯠyc utility á០áá°áá«áááº-
vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááá¯á¶ááᯠáá¬áááºá¡áá áºááŒáá·áº tag áá¯ááºááŒá®áž á¡ááºáá¯ááºáá¯ááºáá«á
ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946
áá¯á¶ááᯠá¡á±á¬ááºááŒááºá áœá¬ áááºáá±ážááá¯ááºáááºááᯠáá»áœááºá¯ááºááá¯á· á¡áááºááŒá¯ááá¯ááºáááº-
vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
| ID | NAME |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+
á áá¬ážáá ááºá áááºááẠLinux á ááºáá áºáá¯ááœáẠyc utility ááá¯ááá·áºááœááºážáá«áá áááºááẠcommand ááá¯áá¯á¶ážááá¯ááºáááºá
yc container registry configure-docker
docker ááᯠconfigure áá¯ááºáááºá
áá±á¬ááºáá»ááº
áá»áœááºá¯ááºááá¯á·ááẠá¡áá¯ááºáá»á¬ážá áœá¬ááᯠááŒáá¯ážá á¬ážáá¯ááºáá±á¬ááºáá²á·ááŒá®áž ááááºá¡áá±ááŒáá·áº
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡áá¬áááºáááºáá±á¬ááºááŸá¯á áááá¯áá¬áááºáá¬ááᯠáááºáá®ážáá±ážáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á á á®ážááœá¬ážáá±ážáá¯áá¹ááááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº golang ááœáẠá¡ááá®áá±ážááŸááºážáá áºáᯠáá±ážáá²á·áááºá
- á¡á²áá«ááᯠá á¯áá±á¬ááºážááŒá®áž áá®ážááá·áº ááœááºááááºáᬠááŸááºáá¯á¶áááºááŸá¯ááŸá¬ áá±á¬ááºážááá·áºáááºá
áá±á¬ááºá¡ááá¯ááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºáááºá á¬ážá áá¬áá±á¬ááºážááá·áºá¡áá¬áá»á¬ážáá®ááá¯á· áááºááœá¬ážáá«ááẠ- áá»áœááºá¯ááºááá¯á·áá¡ááºááá®áá±ážááŸááºážááᯠáá¯ááºáá¯ááºáá±á¬ááºážáá»ááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠáááºáá¯ááºáááºááá¯ážááᯠá áááºáá«áááºá áááŒá±á¬ááºážáá«ááŸáá·áº!
á€áá
á¹á
ááºážááẠREBRAIN & Yandex.Cloud ááœáá·áºááœá²á¡áá¯ááºáá¯á¶ááœá±ážááœá±ážááœá²á áá®áá®ááá¯ááá¯ááºáá°ážááŸá¯ááœáẠááŒá
áºáááº- áá»áœááºá¯ááºááá¯á·ááẠYandex Cloud ááœáẠáá
áºá
áá¹ááá·áºáá»áŸáẠáá±á¬ááºážááá¯áá»áẠ10 ááᯠáááºáá¶ááẠ-
á¡áááºá áááºááẠááá¯áá²á·ááá¯á·áá±á¬ ááœá²áá»á¬ážááᯠá¡áœááºááá¯ááºážááœáẠáááºáá±á¬ááºááŒá®áž á¡áá»áááºááŸáá·áºáááŒá±ážáá® áá±ážááœááºážáá»á¬ážáá±ážááẠá
áááºáááºá
á¬ážáá«á áááºááœááºááá¯ááºáá«á
áá®ááá¯ááœá²áá»áá¯ážáá»ááºážáááœáá·áºááá²á·á¡ááœáẠYandex.Cloud ááᯠá¡áá°ážáá»á±ážáá°ážáááºááŸááá«áááºá áááºážááá¯á·áá¶ááá¯á· ááá·áºááº-
Cloud ááá¯á· ááœáŸá±á·ááẠááá¯á¡ááºáá«á ááá¯á·ááá¯áẠáááºá á¡ááŒá±áᶠá¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº áááºáááºááá·áº áá±ážááœááºážáá»á¬áž ááŸááá«áá
PS áá»áœááºá¯ááºááá¯á·ááœáẠáá
áºááá»áŸáẠá¡ááá²á·á
á¬áááºážá
á
Ạá áá¯ááŸááááºá áááºáááá±á¬áá»ááºááẠáááºážááá¯á·áá²ááŸáá
áºáá¯ááŒá
áºáá±á¬ááºážááŒá
áºááá¯ááºáááºá
source: www.habr.com