AWS PINPOINT
Last updated
AWS์ Amazon Pinpoint์๋ Event๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ์๋ค.
Event Stream์ด๋ผ ํ์ฌ, Amazon Pinpoint์์ ๋ฐ์ํ๋ ๋ชจ๋ ๋ก๊ทธ๋ฅผ AWS Kinesis๋ก ๋ณด๋ด๋ ๊ธฐ๋ฅ์ธ๋ฐ, ๋๋ ๋ณดํต Elasticsearch๋ก ๋ณด๋ด์ด ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌ ํ๋ค. ์ดํ Kibana๋ฅผ ํตํด BI๋ฅผ ๊ตฌ์ฑํ์ฌ ์ด๋ค.
Pinpoint EventStream ๊ธฐ๋ฅ์ ํ์ฑํ ํ์ฌ Kinesis Firehose๋ฅผ ํตํด Elasticsearch๋ก ๋ณด๋ด๋๋ก ๊ตฌ์ฑํด๋ณด์.
์ ๋๋ฉ์ธ ์์ฑ ๋ฒํผ ๋๋ฅธ ํ ์ํ๋ ๊ฒ์ ์ ํํ๋ค. ๋๋ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ๋ฅผ ์ ํํ๋ค.
์ดํ ๋๋ฉ์ธ ์ด๋ฆ์ ์ ๋นํ ์ง์ ํ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ๋๋ ๋๋ฉ์ธ ์ด๋ฆ์ pinpoint๋ก ์ง์ ํ์๋ค.
๋๋ ๋คํธ์ํฌ ๊ตฌ์ฑ์ ํผ๋ธ๋ฆญ ์ก์ธ์ค๋ก ๊ตฌ์ฑํ์๊ณ ์ธ๋ถํ๋ ์ก์ธ์ค ์ ์ด ํ์ฑํ ๊ธฐ๋ฅ์ ๋นํ์ฑํ๋ค.
(์ต์ํ์ ๋ณด์์ ์ํด ์ธ๋ถํ๋ ์ก์ธ์ค ์ ์ด๋ ํ์ฑํ ํ๊ณ ์ฐ๋๊ฒ ์ข๋ค.)
์ต์ํ์ ๋ณด์์ ์ํด whatismyip.com ์์ ๋ด IP๋ฅผ ์ฐพ์ ํ ํด๋น IP๋ฅผ ์ถ๊ฐํ๋ ์ก์ธ์ค ์ ์ฑ ์ ๊ตฌ์ฑํ๋ค. ์ด๋ ๊ฒ ํด๋์ผ๋ฉด ๋ด IP๋ก๋ง Elasticsearch์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ดํ ์ต์ข ์์ฑ๊น์ง ํ๊ณ ๋์ Elasticsearch ํด๋ฌ์คํฐ๊ฐ ๋ชจ๋ ํ๋ก๋น์ ๋ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์.
์ด๋ ์ฝ 10~20๋ถ ์ ๋ ์์๋๋ค.
Elasticsearch๋ฅผ ์์ฑํ์ผ๋ ์ด์ Kinesis Firehose๋ฅผ ์์ฑํ์
Kinesis ์๋น์ค ๋ฉ๋ด๋ก ๋ค์ด๊ฐ์ Kinesis Firehose๋ฅผ ์์ฑํ๋ค.
์์ค๋ ๊ทธ๋ฅ ๊ธฐ๋ณธ ์ ํ๋ผ์๋ ๊ฒ(Direct PUT or other sources) ๊ทธ๋๋ก ๋๋ค.
Transform source records์ Convert record format๋ ๊ทธ๋๋ก ๋๋ค.
์ฐธ๊ณ ๋ก S3์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ํ AWS Glue ๋ฑ์ ํตํ์ฌ ETL ์์ ๋ฑ์ ์ํ ํ๋ ค๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ ํฌ๋งท์ Apache Parquet ๋ฑ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ํ ํ๋ ๊ฒ์ด ์ต์ ํ์ ๋์์ด ๋๋ค. ํ์ง๋ง ์ง๊ธ์ Elasticsearch๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ฌด๊ฒ๋ ๊ฑด๋ค์ง ๋ง๋๋ก ํ์.
Destination์์ Elasticsearch๋ฅผ ์ ํํ๋ค.
Domain์์๋ ์์ ์์ฑํ Elasticsearch์ ๋๋ฉ์ธ์ ์ ํํด ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง๋ ๊ทธ๋๋ก ๋๋ค.
๋๋ ์ฌ๋ฏธ ์ผ์์ Index Rotation์ Daily๋ก ์ ํํ๋๋ฐ, ์ด ๊ฒฝ์ฐ ์ง์ ํ Index ๋ค์ ๋ ์ง๋ก ๋ postfix๊ฐ ๋ถ๋๋ค. (์: pinpoint-2020-05-18)
๋์ค์ ์ฉ๋์ด ๊ฝ ์ฐจ๋ฉด ์์ ์ธ๋ฑ์ค๋ฅผ ์ง์ด๋ค๋์ง ํ๋ ํํ๋ก ์ฌ์ฉํ๊ธฐ ์ํด Index Rotation ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ๋ ๊ฒ์ด ์ข๋ค.
S3 backup์ Failed records only๋ก ๋๊ณ ์ ๋นํ ๋ฒ์ผ์ ํ๋ ์ ํํ๋ค.
๋์ ๊ฒฝ์ฐ๋ Backup S3 bucket prefix๋ failed_ ๋ก ํ๋ค.
Elasticsearch buffer conditions์ 1MiB์ 60seconds๋ก ์ค์ ํ๋ค.
์์ ๊ฐ์ด ์ค์ ํ ๊ฒฝ์ฐ Kinesis Firehose๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ 1MiB๊ฐ ๋๊ฑฐ๋, 60์ด๊ฐ ์ง๋ ๋ ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ Elasticsearch๋ก ์ ๋ฌํ๋ค.
๋๋จธ์ง๋ ๋ค ๊ทธ๋๋ก ๋๊ณ Permissions ํญ๋ชฉ์์ Create new or choose ๋ฒํผ์ ๋๋ฌ์ Firehose โ Elasticsearch ์ ์ก์ ์ํ ์๋ก์ด Role์ ์์ฑํ๋ค.
์ด์ Create delivery stream ๋ฒํผ์ ๋๋ฌ์ Kinesis Firehose๋ฅผ ์์ฑํ๋ค. ์์ฑ๊น์ง๋ ์ฝ 1๋ถ์ ๋ ์์ ๋๋ค.
Amazon Pinpoint โ ์ํ๋ ํ๋ก์ ํธ ํด๋ฆญ โ Settings โ Event stream โ Edit โ Stream to Amazon Kinesis์ ์ฒดํฌ
์ ํ๋ฉด ์ฒ๋ผ ๊ตฌ์ฑํ์๋ค.
์ด์ Save ๋ฒํผ์ ๋๋ฅด๋ฉด,,, ๋๋์ด Pinpoint์ ๋ชจ๋ ์ด๋ฒคํธ๊ฐ Elasticsearch์ ์ ์ฅ์ด ๋๋ค.
์์ง๊น์ง๋ ์๋ฌด ์บ ํ์ธ๋ ๋ณด๋ด์ง ๋ง์. ์บ ํ์ธ์ ๋ณด๋ด๊ณ ๋ ๋ค์๋ type ์ค์ ์ด ์ํด๊ณ ๋ง๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Pinpoint๊ฐ ์์ฑํ๋ Event Stream์๋ arrival_timestamp์ event_timestamp๊ฐ์ด ์๋ค. ์ด ์ค ๊ฐ์ข ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐ ํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ arrival_timestamp๋ก ์ถ์ ๋๋ค. ์ฆ ๋ฐ์ดํฐ๋ฅผ arrival_timestamp ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ ๋ณผ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ด๋ค.
์์ฝ๊ฒ๋ ์ด ์ํ์์ Kibana๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด.. ์ ๋ ฌ ๊ธฐ๋ฅ์ด ์ ๊ณต ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์์๊ฐ ๋ง๊ตฌ์ก์ด๋ก ์์ผ์ง์ฑ๋ก ์ ๊ณต๋๋ค.
์ด๋ฅผ ์ํด arrival_timestamp ๊ฐ์ด 'date' type ์ด๋ผ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ์.
์ฐ์ AWS Elasticsearch ์๋น์ค๋ก ๋ค์ด๊ฐ์ Kibana ์์ ์๋ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ Kibana๋ก ์ ์ํ๋ค.
์ดํ ์ผ์ชฝ์ ์๋ ๋ฉ๋ด ์ค Dev Tools๋ฅผ ์ ํํ๋ค.
Dev Tools๋ REST API๋ฅผ ํตํด Elasticsearch์ ๋ช ๋ น์ ์ํ ํ ์ ์๋๋ก ๋๋๋ค.
์ด์ ์๋์ ๋ช ๋ น์ ํตํด index template์ ์์ฑํ์.
"order": 1 ์์ ๋ณผ ์ ์๋ฏ์ด ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋๊ฒ ์ ์ฉ ๋๋ index template์ด๋ค.
"template": pinpoint* ์์ ๋ณผ ์ ์๋ฏ ๋ชจ๋ pinpoint* index pattern์ด ํด๋น index template์ ๋์์ด ๋๋ค.
๋ช ๋ น์ด๋ฅผ ์ผ์ชฝ์นธ์ ์ ๋ ฅํ๊ณ ํ์ดํ ๋ชจ์์ '์คํ' ๋ฒํผ์ ๋๋ฌ์ REST API๋ฅผ ์ํํ์.
์ด์ Index Pattern์ ์ค์ ํ ์ฐจ๋ก๋ค.
ํ์ฌ๋ Elasticsearch์ ๋ฐ์ดํฐ๊ฐ ์๋ฌด๊ฒ๋ ์๊ธฐ ๋๋ฌธ์ Index Pattern์ ์ค์ ํ๊ณ ์ถ์ด๋ ์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ์๋ค๋ ์๋ฆผ๋ง ๋์จ๋ค.
์ด์ ์๋ฌด ๋ฐ์ดํฐ๋ ์์ฑํ๊ธฐ ์ํด Pinpoint์์ ์๋ฌด ์บ ํ์ธ์ด๋ ์ํํ์. ๋์ ๊ฒฝ์ฐ๋ ๊ฐ์ฅ ์ฝ๊ฒ Email ์บ ํ์ธ์ ์ํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฝ 1~2๋ถ์ด ์ง๋๋ฉด Pinpoint์ Event stream ๊ธฐ๋ฅ์ด Kinesis Firehose๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ํ, Elasticsearch๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ ๊ฒ์ด๋ค.
์ ์ผ ์ผ์ชฝ ์ Home ๋ฒํผ์ ๋๋ฌ์ Home์ผ๋ก ๊ฐ ํ, ํ๋ฉด์ ๋ณด์ด๋ ๋ฒํผ ์ค Use Elasticsearch data๋ฅผ ํด๋ฆญํ๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฌด์ฌํ ๋ค์ด์๋ค๋ฉด ์๋์ ๊ฐ์ด No Elasticsearch indices match your pattern์ ์ธ๋ฑ์ค ๋ชฉ๋ก์ด ๋ณด์ฌ์ง๋ค.
์ธ๋ฑ์ค ํจํด์ pinpoint* ๋ผ๊ณ ์ ๋ ฅ ํ Next step ๋ฒํผ์ ํด๋ฆญํ์
๊ทธ๋ฌ๋ฉด Time Filter field name ๋์ ์ฝค๋ณด ๋ฐ์ค๊ฐ ๋ณด์ผ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ arrival_timestamp๋ฅผ ์ ํ ํ Create index pattern ๋ฒํผ์ ํด๋ฆญํ์
์ดํ ํ์๋๋ฉด ํ๋ฉด์์ arrival_timestamp ํญ๋ชฉ์ด date ํ์ ์ผ๋ก ์ค์ ๋ผ์๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
์ด์ ๋ถํฐ ์ฐ๊ณ ์ถ์๋๋ก Elasticsearch๋ฅผ ์ฌ์ฉํ์.
Discover์์ ๋ฐ์ดํฐ๊ฐ ํ์ ์๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ฐ์ธก ์์ Range Filter๊ฐ Last 15 minutes๋ก ๋ผ์๋ ๊ฒฝ์ฐ์ ํ์๊ฐ ์๋๋ค๊ณ ์ฐฉ๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ํ๋ ํ์๋ผ์ธ์ผ๋ก ์กฐ์ ํ์ฌ ์ฌ์ฉํ์.