GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แˆฐแˆ‹แˆ แˆแˆ‹แ‰ฝแˆแˆ! แŠฅแŠ•แ‹ฐ แ‹จแŠฎแˆญแˆต แˆตแˆซแ‹ฌแฃ แŠฅแŠ•แ‹ฐ แ‹จแˆ€แŒˆแˆญ แ‹แˆตแŒฅ แ‹จแ‹ฐแˆ˜แŠ“ แˆ˜แ‹ตแˆจแŠญ แŠ แ‰…แˆแŠ• แˆ˜แˆญแˆแˆฌแ‹ซแˆˆแˆ Yandex.Cloud. แˆ˜แ‹ตแˆจแŠฉ แ‰ฐแŒแ‰ฃแˆซแ‹Š แ‰ฝแŒแˆฎแ‰ฝแŠ• แˆˆแˆ˜แแ‰ณแ‰ต แ‹จแ‰ฐแˆˆแ‹ซแ‹ฉ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แ‹ญแˆฐแŒฃแˆแข แˆ†แŠ–แˆแฃ แŠ แŠ•แ‹ณแŠ•แ‹ต แŒŠแ‹œ แ‰ แŠฅแАแ‹šแˆ… แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แˆ‹แ‹ญ แ‰ฐแˆ˜แˆตแˆญแ‰ฐแ‹ แ‰ แ‰ฐแŒˆแ‰ขแ‹ แˆฐแŠ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แ‹จแˆซแˆตแ‹ŽแŠ• แ‹จแ‹ฐแˆ˜แŠ“ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆ›แ‹˜แŒ‹แŒ€แ‰ต แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆแข แ‰ แ‹šแˆ… แŒฝแˆ‘แ แ‹แˆตแŒฅ แŠฅแŠ•แ‹ฒแˆ… แ‹“แ‹ญแАแ‰ฑแŠ• แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‰ แˆ›แˆฐแˆ›แˆซแ‰ต แˆจแŒˆแ‹ต แ‹ซแˆˆแŠแŠ• แˆแˆแ‹ต แˆ›แŠซแˆแˆ แŠฅแˆแˆแŒ‹แˆˆแˆ.

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แˆแŠ• แˆ˜แ‰€แ‰ แˆ แ‹ญแˆแˆแŒ‹แˆ‰?

แŒแˆซแ‹แŠ“ - แ‹จแ‰ตแŠ•แ‰ณแŠ” แ‰ฝแŒแˆฎแ‰ฝแŠ• แˆˆแˆ˜แแ‰ณแ‰ต แ‹ˆแ‹ญแˆ แ‹จแˆ›แŠ•แŠ›แ‹แŠ•แˆ แˆตแˆญแ‹“แ‰ถแ‰ฝ แ‰ฝแŒแˆฎแ‰ฝแŠ• แˆˆแˆ˜แ‰†แŒฃแŒ แˆญ แŠƒแ‹ญแˆˆแŠ› แˆ˜แˆณแˆชแ‹ซแข แ‰ แˆ˜แˆ แˆจแ‰ณแ‹Š แŠ แ‹ˆแ‰ƒแ‰€แˆฉ แ‹แˆตแŒฅแฃ แ‹ญแˆ… แ‹จแŒแˆซแ‹แŠ“ แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แ‹ซแˆˆแ‹ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ•แฃ แŠฅแŠ•แ‹ฒแˆแˆ แ‹ณแ‰ณแ‰คแ‹ (แŠญแˆŠแŠญ แˆƒแ‹แˆตแฃ แŠขแŠ•แแˆ‰แŠญแˆตแ‹ฒแ‰ขแฃ แ‹ˆแ‹˜แ‰ฐ) แ‰ตแŠ•แ‰ณแŠ”แ‹Žแ‰ฝ แ‹จแˆšแˆ˜แˆฐแˆจแ‰ฑแ‰ แ‰ต แ‹ณแ‰ณ แˆตแ‰ฅแˆตแ‰ฅ แАแ‹แข

แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ•แŠ• แŠจแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แŒ‹แˆญ แŠจแŒ€แˆ˜แˆญแŠญ แ‰ แŠ‹แˆ‹ แ‹ˆแ‹ฐ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ แˆ„แ‹ฐแˆ… แ‹จแˆšแ‹ซแˆแˆญ UI แˆ›แŒแŠ˜แ‰ต แ‰ตแ‰ฝแˆ‹แˆˆแˆ…แฃ แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณแ‹Žแ‰ฝแŠ• แˆˆแ‰€แŒฃแ‹ญ แˆตแˆซ แŠฅแŠ•แ‹ฐ แˆแŠ•แŒญ แˆ˜แŒแˆˆแ…แฃ แ‹ณแˆฝแ‰ฆแˆญแ‹ถแ‰ฝแŠ• แŠฅแŠ“ แŒแˆซแŽแ‰ฝแŠ• แˆ˜แแŒ แˆญ แ‰ตแ‰ฝแˆ‹แˆˆแˆ…แข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‹จแˆ˜แˆ แˆจแ‰ณแ‹Šแ‹ แˆตแˆชแ‰ต แŠ แŠ•แ‹ต แŒ‰แˆแˆ… แŒ‰แ‹ตแˆˆแ‰ต แŠ แˆˆแ‹ - แ‰ แŒญแˆซแˆฝ แˆตแˆ…แ‰ฐแ‰ตแŠ• แ‹จแˆšแ‰‹แ‰‹แˆ แŠ แ‹ญแ‹ฐแˆˆแˆแข แ‹ซแˆ แˆ›แˆˆแ‰ต แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แŠ แŒ แ‰ƒแˆ‹แ‹ญ แ‰ฐแŒแ‰ฃแˆญ แ‰ แŠ แŠ•แ‹ต แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ• แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แАแ‹. แŠฅแˆแ‰ข แŠซแˆˆ แ‹ˆแ‹ญแˆ 10 แˆฐแ‹Žแ‰ฝ แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แŒŠแ‹œ UI แŠ• แŠจแŠจแˆแ‰ฑ แ‰ฝแŒแˆฎแ‰ฝ แ‹ญแŠจแˆฐแ‰ณแˆ‰แข

แ‰ แ‰€แˆ‹แˆ‰ แˆŠแˆแ‰ฑ แ‹ญแ‰ฝแˆ‹แˆ‰แก แŠฅแˆญแˆตแ‹Ž แ‰ฅแ‰ป... แ‰ฅแ‹™ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ–แ‰ฝแŠ• แŠจแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แŒ‹แˆญ แˆ›แˆฐแˆ›แˆซแ‰ต แŠฅแŠ“ แ‰  L3 แˆšแ‹›แŠ• แˆตแˆญ แˆ›แˆตแ‰€แˆ˜แŒฅ แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆแข แŒแŠ• แŠฅแ‹šแˆ… แˆแˆ‰แˆ แАแŒˆแˆญ แŒแˆแŒฝ แŠ แ‹ญแ‹ฐแˆˆแˆ. แŒแˆซแ‹แŠ“ แ‹จแ‰ฐแŒ แ‰ƒแˆš แ‰…แŠ•แ‰ฅแˆฎแ‰ฝแŠ• (แ‹ˆแ‹ฐ แ‹ณแ‰ณแ‰คแ‹ แ‹ฑแŠซแ‹Žแ‰ฝแฃ แ‹ณแˆฝแ‰ฆแˆญแ‹ถแ‰ฝแฃ แŒแˆซแŽแ‰ฝแฃ แ‹ˆแ‹˜แ‰ฐ) แ‰ แ‰€แŒฅแ‰ณ แ‰ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘ แ‹ฒแˆตแŠญ แˆ‹แ‹ญ แ‹ซแŠจแˆ›แ‰ปแˆแข แˆตแˆˆแ‹šแˆ… แ‰ แ‹ฉแŠ แ‹ญ แ‹แˆตแŒฅ แŠ แŠ•แ‹ณแŠ•แ‹ต แ‰…แŠ•แ‰ฅแˆฎแ‰ฝแŠ• แŠจแ‰€แ‹จแˆญแŠ• แŠฅแАแ‹šแˆ… แˆˆแ‹แŒฆแ‰ฝ แˆšแ‹›แŠ‘ แ‰ แˆ‹แŠจแˆแŠ•แ‰ แ‰ต แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ• แˆ‹แ‹ญ แ‰ฅแ‰ป แ‹ญแŠ•แŒธแ‰ฃแˆจแ‰ƒแˆ‰แข แ‹ญแˆ… แˆˆแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‰ฝแŠ• แ‹ˆแŒฅแАแ‰ต แ‹จแˆŒแˆ‹แ‰ธแ‹ แ‰…แŠ•แ‰ฅแˆฎแ‰ฝแŠ• แ‹ซแˆ˜แŒฃแˆแฃ แ‰ แˆ›แˆตแŒ€แˆ˜แˆญ แŠฅแŠ“ แŠ แŒ แ‰ƒแ‰€แˆ แˆ‹แ‹ญ แ‰ฝแŒแˆญ แ‹ญแˆแŒฅแˆซแˆแข

แŠฅแ‹šแˆ… แˆŒแˆ‹ แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณ แˆˆแˆ›แ‹ณแŠ• แ‹ญแˆ˜แŒฃแˆแฃ แˆˆแˆแˆณแˆŒแฃ MySQL แ‹ˆแ‹ญแˆ แ‰ฐแˆ˜แˆณแˆณแ‹ญแข แˆˆแŒแˆซแ‹แŠ“ แ‹จแ‰ฐแŒ แ‰ƒแˆš แ‰…แŠ•แŒ…แ‰ถแ‰ฝแŠ• แ‰ แ‹šแˆ… "แˆ˜แˆˆแ‹‹แ‹ˆแŒซ" แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณ แ‹แˆตแŒฅ แˆ›แŠจแˆ›แ‰ธแ‰ต แŠฅแŠ•แ‹ณแˆˆแ‰ฃแ‰ต แŠฅแŠ•แАแŒแˆซแˆˆแŠ•แข แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แ‰ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แˆ›แˆฝแŠ• แˆ‹แ‹ญ แ‹ˆแ‹ฐแ‹šแˆ… แ‹ณแ‰ณแ‰คแ‹ แ‹จแˆšแ‹ˆแˆตแ‹ฐแ‹แŠ• แˆ˜แŠ•แŒˆแ‹ต แŠ แŠ•แ‹ต แŒŠแ‹œ แˆ˜แŒฅแ‰€แˆต แ‰ แ‰‚ แ‹ญแˆ†แŠ“แˆแฃ แŠฅแŠ“ แˆแˆ‰แŠ•แˆ แ‹จแ‰ฐแŒ แ‰ƒแˆš แˆ˜แ‰ผแ‰ถแ‰ฝ แ‰ แˆ›แŠ•แŠ›แ‹แˆ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝ แˆ‹แ‹ญ แ‹ซแˆญแ‰ตแ‹‘แค แ‹ˆแ‹ฐแˆŒแˆŽแ‰นแˆ แ‹ญแ‹˜แˆแ‰ƒแˆ‰แข

แ‹จแˆ˜แŒจแˆจแˆปแ‹ แ‹จแ‰ตแŒแ‰ แˆซ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แŠ•แ‹ตแ แ‹ญแŠธแ‹แŠ“:

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‰ แŠฅแŒƒแ‰ฝแŠ• แˆ›แŠ•แˆณแ‰ตแŠ• แŠฅแŠ•แˆ›แˆญ

MySQL แŠฅแŠ“ ClickHouse

แŠฅแŠ•แ‹ฒแˆ… แ‹“แ‹ญแАแ‰ฑแŠ• แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ‰ แŠ แŠ•แ‹ต แ‰แˆแ แŒ แ‰… แŠจแˆ›แ‹ตแˆจแŒแ‹Ž แ‰ แŠแ‰ต แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑแŠ• แŠ แŠซแˆ‹แ‰ต แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹ญแ‹™ แŠฅแŠ“ แŠฅแˆญแˆต แ‰ แŠฅแˆญแˆต แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹‹แˆƒแ‹ฑ แˆ˜แˆ›แˆญ แŠ แˆตแˆแˆ‹แŒŠ แАแ‰ แˆญแข

แŠฅแ‹šแˆ… Yandex.Cloud แ‹ญแˆจแ‹ณแŠ“แˆ, แŠฅแˆฑแˆ L3 balancers, ClickHouse แŠฅแŠ“ MySQL แŠฅแŠ•แ‹ฐ แ‹จแˆšแ‰ฐแ‹ณแ‹ฐแˆฉ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝ แ‹ซแ‰€แˆญแ‰ฃแˆ. แ‰ฐแŒ แ‰ƒแˆšแ‹ แˆ˜แˆˆแŠชแ‹ซแ‹Žแ‰นแŠ• แ‰ฅแ‰ป แˆ˜แŒแˆˆแŒฝ แŠฅแŠ“ แ‹จแˆ˜แˆณแˆชแ‹ซ แˆตแˆญแ‹“แ‰ฑ แˆแˆ‰แŠ•แˆ แАแŒˆแˆญ แ‹ˆแ‹ฐ แˆฅแˆซแ‹ แŠฅแˆตแŠชแ‹ซแˆ˜แŒฃ แ‹ตแˆจแˆต แˆ˜แŒ แ‰ แ‰… แŠ แˆˆแ‰ แ‰ต.

แ‰ฐแˆ˜แ‹แŒแ‰คแ‹ซแˆˆแˆแฃ แ‹ฐแˆ˜แŠ“ แŠฅแŠ“ แ‹จแŠญแแ‹ซ แˆ˜แˆˆแ‹ซ แˆแŒ แˆญแŠฉแข แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แ‹ˆแ‹ฐ แ‹ฐแˆ˜แŠ“แ‹ แˆ„แŒ„ MySQL แŠฅแŠ“ ClickHouse แˆตแ‰ฅแˆตแ‰ฆแ‰ฝแŠ• แ‰ แ‰ตแŠ•แˆน แ‰…แŠ•แŒ…แ‰ถแ‰ฝ แŠ แ‹˜แŒ‹แŒ€แˆแข แŠ•แ‰ แŠฅแˆตแŠชแˆ†แŠ‘ แ‹ตแˆจแˆต แŒ แ‰ฅแ‰„แŠ แˆˆแˆแข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ตGrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แŠฅแŠ•แ‹ฒแˆแˆ แ‰ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แŠญแˆ‹แˆตแ‰ฐแˆญ แ‹แˆตแŒฅ แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณ แˆ˜แแŒ แˆญ แŠฅแŠ“ แ‹จแˆ˜แŒแ‰ขแ‹ซ แŠฅแŠ“ แ‹จแ‹ญแˆˆแ แ‰ƒแˆ แ‰ แˆ˜แŒ แ‰€แˆ แ‹จแŠฅแˆฑแŠ• แˆ˜แ‹ณแˆจแˆป แˆ›แ‹‹แ‰€แˆญ แŠฅแŠ•แ‹ณแˆˆแ‰ฆแ‰ต แˆ›แˆตแ‰ณแ‹ˆแˆต แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆแข แŠฅแ‹šแˆ… แ‹ˆแ‹ฐ แ‹แˆญแ‹แˆฎแ‰ฝ แŠ แˆแŒˆแ‰ฃแˆ - แ‰ แ‰ แ‹ญแАแŒˆแŒน แ‹แˆตแŒฅ แˆแˆ‰แˆ แАแŒˆแˆญ แ‰ แŒฃแˆ แŒแˆแ… แАแ‹แข

แŒแˆแŒฝ แ‹ซแˆแˆ†แАแ‹ แ‹แˆญแ‹แˆญ แŠฅแАแ‹šแˆ… แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณแ‹Žแ‰ฝ แ‰ฅแ‹™ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ†แ‰ฝ แŠ แˆแ‰ธแ‹ แ‹ญแˆ…แˆ แ‹จแŠฅแАแˆฑแŠ• แŒฅแ‹แ‰ต แˆ˜แ‰ปแ‰ปแˆ แ‹ซแˆจแŒ‹แŒแŒฃแˆแข แˆ†แŠ–แˆ แŒแˆซแ‹แŠ“ แˆˆแˆšแˆฐแˆซแ‹ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แ‹ณแ‰ณแ‰คแ‹ แ‰ แ‰ตแŠญแŠญแˆ แŠ แŠ•แ‹ต แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แ‹ญแˆแˆแŒ‹แˆแข แˆจแŒ…แˆ แŠ•แ‰ฃแ‰ฅ แˆฐแАแ‹ต แ‹ฐแˆ˜แŠ“แ‹ แ‹ˆแ‹ฐ แ‹แˆณแŠ” แŠ แˆ˜แŒฃแŠแข แ‹จแ‹แˆญแ‹ซแ‹แŠ• แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แ‰ฐแˆˆแ‹ˆแŒ  c-<cluster_id>.rw.mdb.yandexcloud.net แŠจแ‰ฐแ‹›แˆ›แŒ แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซ แŒ‹แˆญ แŠ แˆแŠ• แˆ‹แˆˆแ‹ แ‹จแŠญแˆ‹แˆตแ‰ฐแˆญ แ‹‹แŠ“ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แŠซแˆญแ‰ณ แ‰ฐแ‹˜แŒ‹แŒ…แ‰ทแˆแข แˆˆแŒแˆซแ‹แŠ“ แ‹จแˆแŠ•แˆฐแŒ แ‹ แ‹ญแˆ… แАแ‹แข

แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ

แŠ แˆแŠ• แ‹จแ‹ตแˆจ-แŒˆแŒฝ แŠ แŒˆแˆแŒ‹แ‹ญ แАแ‹แข แˆ˜แ‹ฐแ‰ แŠ› แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ•แŠ• แŠจแˆŠแŠ‘แŠญแˆต แŒ‹แˆญ แŠฅแŠ“แˆณแ‹ตแŒ แŠฅแŠ“ แŒแˆซแ‹แŠ“แŠ•แŠ• แ‰ แŠฅแˆฑ แˆ‹แ‹ญ แŠฅแŠ“แ‹‹แ‰…แˆญแข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‰  ssh แ‰ แŠฉแˆ แŠฅแŠ•แŒˆแŠ“แŠ แŠฅแŠ“ แŠ แˆตแˆแˆ‹แŒŠแ‹Žแ‰นแŠ• แŒฅแ‰…แˆŽแ‰ฝ แŠฅแŠ•แŒญแŠ•.

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ GrafanaแŠ• แ‰  systemctl แˆตแˆญ แŠฅแŠ“แˆตแŠฌแ‹ต แŠฅแŠ“ แŠจ ClickHouse แŒ‹แˆญ แˆˆแˆ˜แˆตแˆซแ‰ต แ‰ฐแˆฐแŠชแ‹แŠ• แŠฅแŠ•แŒญแŠ• (แŠ แ‹Ž แ‰ แˆ˜แˆ แˆจแ‰ณแ‹Š แŒฅแ‰…แˆ แ‹แˆตแŒฅ แŠ แˆแ‰€แˆจแ‰ แˆ)แข

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

แ‹ซ แАแ‹ แฃ แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แ‰ แ‰€แˆ‹แˆ แ‰ตแŠฅแ‹›แ‹

sudo service grafana-server start

แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แŠฅแŠ•แŒ€แˆแˆซแˆˆแŠ•. แŠ แˆแŠ• แ‰ แŠ แˆณแˆน แ‹แˆตแŒฅ แ‹จแ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘แŠ• แ‹แŒซแ‹Š แŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆป แŠ แˆตแŒˆแ‰ฅแ‰ฐแ‹ แ‹ˆแ‹ฐแ‰ฅ 3000 แ‹ญแŒแˆˆแŒน แŠฅแŠ“ แ‹จ Grafana UI แŠ• แ‹ญแˆ˜แˆแŠจแ‰ฑแข
GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แŒแŠ• แŠ แ‹ญแ‰ธแŠฉแˆ‰แฃ แŒแˆซแ‹แŠ“แŠ• แŠจแˆ›แ‰€แŠ“แ‰ แˆญแ‹Ž แ‰ แŠแ‰ตแฃ แ‰…แŠ•แ‰ฅแˆฎแ‰นแŠ• แŠฅแ‹šแ‹ซ แˆˆแˆ›แŠจแˆ›แ‰ธแ‰ต แ‹ˆแ‹ฐ MySQL แ‹จแˆšแ‹ˆแˆตแ‹ฐแ‹แŠ• แˆ˜แŠ•แŒˆแ‹ต แˆ˜แŠ•แŒˆแˆญแ‹ŽแŠ• แˆ›แˆตแ‰ณแ‹ˆแˆต แŠ แˆˆแ‰ฅแ‹Žแ‰ตแข

แ‹จแŒแˆซแ‹แŠ“ แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แŠ แŒ แ‰ƒแˆ‹แ‹ญ แ‹แ‰…แˆญ แ‰ แ‹แ‹ญแˆ‰ แ‹แˆตแŒฅ แŠ แˆˆแข /etc/grafana/grafana.ini. แ‹จแˆšแˆแˆˆแŒˆแ‹ แˆ˜แˆตแˆ˜แˆญ แ‹ญแˆ…แŠ• แ‹ญแˆ˜แˆตแˆ‹แˆแข

;url =

แŠ แˆตแ‰ฐแŠ“แŒ‹แŒแŠ• แ‹ˆแ‹ฐ MySQL แ‹˜แˆˆแˆ‹ แŠ แ‹˜แŒ‹แŒ…แ‰ฐแŠ“แˆแข แ‹ซแ‹ แ‹แ‹ญแˆ แŠจแˆ‹แ‹ญ แ‰ แˆแˆตแˆ‰ แˆ‹แ‹ญ แŒแˆซแ‹แŠ“แŠ• แˆˆแˆ›แŒแŠ˜แ‰ต แˆ˜แŒแ‰ขแ‹ซ แŠฅแŠ“ แ‹จแ‹ญแˆˆแ แ‰ƒแˆ แ‹ญแ‹Ÿแˆแฃ แ‰ แАแ‰ฃแˆช แˆแˆˆแ‰ฑแˆ แŠฅแŠฉแˆ แŠ“แ‰ธแ‹แข admin.

แ‹จ sed แ‰ตแ‹•แ‹›แ‹žแ‰ฝแŠ• แˆ˜แŒ แ‰€แˆ แ‹ญแ‰ฝแˆ‹แˆ‰:

sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini

แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ฉแŠ• แŠฅแŠ•แ‹ฐแŒˆแŠ“ แˆˆแˆ˜แŒ€แˆ˜แˆญ แŒŠแ‹œแ‹ แŠ แˆแŠ• แАแ‹!

sudo service grafana-server restart

แŠ แˆแŠ• แ‰  Grafana UI แ‹แˆตแŒฅ ClickHouseแŠ• แŠฅแŠ•แ‹ฐ แ‹ณแ‰ณ แˆแŠ•แŒญ แŠฅแŠ•แŒˆแˆแƒแˆˆแŠ•แข

แ‰ แˆšแŠจแ‰ฐแˆ‰แ‰ต แ‰…แŠ•แŒ…แ‰ถแ‰ฝ แ‹จแˆตแˆซ แ‹แ‰…แˆญ แˆ›แˆณแŠซแ‰ต แ‰ฝแ‹ซแˆˆแˆแก-

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แŠฅแŠ•แ‹ฐ URL แŒˆแˆˆแŒฝแŠฉแ‰ต https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

แˆแˆ‰แˆ! แŠจCH แŠฅแŠ“ MySQL แŒ‹แˆญ แ‹จแ‰ฐแŒˆแŠ“แŠ˜ แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แ‹ซแˆˆแ‹ แŠ แŠ•แ‹ต แ‹จแˆšแˆฐแˆซ แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ• แŠ แˆˆแŠ•แข แŠ แˆตแ‰€แ‹ตแˆ˜แ‹ แ‹จแˆ˜แˆจแŒƒ แ‰‹แ‰ฑแŠ• แ‹ˆแ‹ฐ ClickHouse แˆ˜แˆตแ‰€แˆ แŠฅแŠ“ แ‹ณแˆฝแ‰ฆแˆญแ‹ถแ‰ฝแŠ• แˆ˜แŒˆแŠ•แ‰ฃแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰แข แАแŒˆแˆญ แŒแŠ• แŠฅแˆตแŠซแˆแŠ• แŠ แˆ‹แˆ›แ‰ฝแŠ•แŠ• แŠ แˆ‹แˆณแŠซแŠ•แˆ แŠฅแŠ“ แ‹จแ‰ฐแˆŸแˆ‹ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แŠ แˆแ‹˜แˆจแŒ‹แŠ•แˆแข

แŠ แˆปแŒŠ

Yandex.Cloud แŠ แˆแŠ• แ‹ซแˆˆแ‹แŠ• แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ• แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แŠฅแŠ•แ‹ฒแˆแŒฅแˆฉ แ‹ญแˆแ‰…แ‹ตแˆแ‹Žแ‰ณแˆ, แŠฅแŠ“ แ‰ แŠฅแˆฑ แˆ˜แˆฐแˆจแ‰ต - แŠฅแˆญแˆต แ‰ แˆญแˆต แ‹จแˆšแˆ˜แˆณแˆฐแˆ‰ แˆ›แˆฝแŠ–แ‰ฝ แ‰ฅแ‹›แ‰ต. แ‰ แ‰ตแŠญแŠญแˆ แ‹จแˆแŠ•แŒ แ‰€แˆ˜แ‹ แ‹ญแˆ…แŠ•แŠ• แАแ‹แข แˆแˆตแˆ‰แŠ• แ‰ แˆšแˆ˜แ‰ฝ แˆแŠ”แ‰ณ แˆˆแˆ˜แˆฐแ‰ฅแˆฐแ‰ฅ, แˆ˜แˆณแˆชแ‹ซแ‹แŠ• แ‹ญแ‹แˆฐแ‹ฑ แŠ แˆปแŒŠ แŠจ HashiCorp. แˆแˆตแˆ‰แŠ• แˆˆแˆ˜แˆฐแ‰ฅแˆฐแ‰ฅ แˆ˜แˆ˜แˆชแ‹ซแ‹Žแ‰ฝแŠ• แ‹จแ‹ซแ‹˜ json แ‹แ‹ญแˆ แŠฅแŠ•แ‹ฐ แŒแ‰ฅแ‹“แ‰ต แ‹ญแ‹ˆแˆตแ‹ณแˆแข

แ‹จแŠฅแŠ› json แ‹แ‹ญแˆ แˆแˆˆแ‰ต แ‰ฅแˆŽแŠฎแ‰ฝแŠ• แ‹ซแŠซแ‰ตแ‰ณแˆแก แŒแŠ•แ‰ แŠžแ‰ฝ แŠฅแŠ“ แŠ แ‰…แˆซแ‰ขแ‹Žแ‰ฝแข แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แ‰ฅแˆŽแŠญ แ‹จแˆแˆตแˆ‰แŠ• แŒแ‰คแ‰ถแ‰ฝ แŠฅแŠ•แ‹ฐ แŠ แŠ•แ‹ต แŠ แŠซแˆ แ‹ญแŒˆแˆแƒแˆ, แˆแˆˆแ‰ฐแŠ›แ‹ แŠฅแŒˆแ‹ณ แ‹ฐแŒแˆž แŠ แˆตแˆแˆ‹แŒŠแ‹แŠ• แ‹ญแ‹˜แ‰ต แˆˆแˆ˜แˆ™แˆ‹แ‰ต แˆ˜แˆ˜แˆชแ‹ซแ‹Žแ‰ฝแŠ• แ‹ญแŒˆแˆแƒแˆ.

แŒˆแŠ•แ‰ขแ‹Žแ‰ฝ

{
"builders": [
    {
      "type": "yandex",
      "endpoint": "{{user `endpoint`}}",
      "folder_id": "<folder_id>",
      "subnet_id": "{{user `subnet_id`}}",
      "zone": "{{user `zone`}}",
      "labels": {},
      "use_ipv4_nat": true,
      "use_internal_ip": false,
      "service_account_key_file": "<service_account_key_file>",
      "image_name": "grafana-{{timestamp}}",
      "image_family": "grafana",
      "image_labels": {},
      "image_description": "GRAFANA",
      "source_image_family": "ubuntu-1804-lts",
      "disk_size_gb": 3,
      "disk_type": "network-hdd",
      "ssh_username": "ubuntu"
    }
  ],
...
}

แ‰ แ‹šแˆ… แŠ แ‰ฅแАแ‰ต แ‹แˆตแŒฅ, แˆแˆตแˆ‰แŠ• แˆˆแˆ˜แแŒ แˆญ แ‰ แˆšแˆแˆแŒ‰แ‰ แ‰ต แ‹ฐแˆ˜แŠ“ แ‹แˆตแŒฅ แ‹ซแˆˆแ‹แŠ• แŠญแแˆ แˆˆแ‹ช, แŠฅแŠ•แ‹ฒแˆแˆ แ‰ แ‹šแˆ… แŠญแแˆ แ‹แˆตแŒฅ แ‰€แ‹ฐแˆ แˆฒแˆ แŠจแ‰ฐแˆแŒ แˆจ แ‹จแŠ แŒˆแˆแŒแˆŽแ‰ต แˆ˜แˆˆแ‹ซ แ‰แˆแŽแ‰ฝ แŒ‹แˆญ แ‹ˆแ‹ฐ แ‹แ‹ญแˆ‰ แ‹จแˆšแ‹ˆแˆตแ‹ฐแ‹แŠ• แˆ˜แŠ•แŒˆแ‹ต แˆ›แ‹˜แŒ‹แŒ€แ‰ต แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ. แ‹จแŠ แŒˆแˆแŒแˆŽแ‰ต แˆ˜แˆˆแ‹ซแ‹Žแ‰ฝแŠ• แŠฅแŠ“ แ‰แˆแŽแ‰ฝแŠ• แ‰ แ‹แ‹ญแˆ แˆ˜แˆแŠญ แˆตแˆˆแˆ˜แแŒ แˆญ แ‰ แˆšแ‹›แˆ˜แ‹ฐแ‹ แŠญแแˆ แ‹แˆตแŒฅ แ‹จแ‰ แˆˆแŒ  แˆ›แŠ•แ‰ แ‰ฅ แ‹ญแ‰ฝแˆ‹แˆ‰แข แˆฐแАแ‹ต.

แ‹ญแˆ… แ‹แ‰…แˆจแ‰ต แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ‰ แ‰ แˆ˜แ‹ตแˆจแŠญ แˆ‹แ‹ญ แ‰ฐแˆ˜แˆตแˆญแ‰ถ แŠฅแŠ•แ‹ฐแˆšแŒˆแАแ‰ฃ แ‹ญแŠ“แŒˆแˆซแˆ ubuntu-1804-lts, แ‰ แˆแˆตแˆ‰ แ‰คแ‰ฐแˆฐแ‰ฅ แ‹แˆตแŒฅ แ‰ แ‰ฐแŒˆแ‰ขแ‹ แ‹จแ‰ฐแŒ แ‰ƒแˆš แŠญแแˆ แ‹แˆตแŒฅ แ‰ฐแ‰€แˆแŒงแˆ GRAFANA แ‰ แˆตแˆ™ แˆตแˆญ grafana-{{timestamp}}.

แŠ แ‰…แˆซแ‰ขแ‹Žแ‰ฝ

แŠ แˆแŠ• แ‹ญแ‰ แˆแŒฅ แŠ แˆตแ‹ฐแˆณแ‰ฝ แ‹จแˆ†แАแ‹ แ‹จแˆ›แ‹‹แ‰€แˆชแ‹ซแ‹ แŠญแแˆ แ‹ญแˆ˜แŒฃแˆ. แˆแŠ”แ‰ณแ‹แŠ• แ‹ˆแ‹ฐ แ‹ฒแˆตแŠญ แˆแˆตแˆ แŠจแˆ›แˆตแ‰€แˆ˜แŒฅแ‹Ž แ‰ แŠแ‰ต แ‰ แˆแŠ“แ‰ฃแ‹Šแ‹ แˆ›แˆฝแŠ• แˆ‹แ‹ญ แˆ˜แŠจแŠ“แ‹ˆแŠ• แ‹ซแˆˆแ‰ฃแ‰ธแ‹แŠ• แ‹จแŠฅแˆญแˆแŒƒแ‹Žแ‰ฝ แ‰…แ‹ฐแˆ แ‰ฐแŠจแ‰ฐแˆ แ‹ญแŒˆแˆแŒปแˆแข

{
...,
"provisioners": [
    {
            "type": "shell",
            "pause_before": "5s",
            "scripts": [
                "prepare-ctg.sh"
            ]
        },
    {
            "type": "file",
            "source": "setup.sh",
            "destination": "/opt/grafana/setup.sh"
        },
        {
            "type": "shell",
        "execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
            "pause_before": "5s",
            "scripts": [
                "install-packages.sh",
                "grafana-setup.sh",
                "run-setup-at-reboot.sh"
        ]
        }
  ]
}

แŠฅแ‹šแˆ… แˆแˆ‰แˆ แ‹ตแˆญแŒŠแ‰ถแ‰ฝ แ‰  3 แ‹ฐแˆจแŒƒแ‹Žแ‰ฝ แ‹ญแŠจแˆแˆ‹แˆ‰. แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซแ‹ แ‹ฐแˆจแŒƒ, แˆจแ‹ณแ‰ต แˆ›แ‹แŒซแŠ• แ‹จแˆšแˆแŒฅแˆญ แ‰€แˆ‹แˆ แˆตแŠญแˆชแ•แ‰ต แ‹ญแˆแŒธแˆ›แˆ.

แŠ แ‹˜แŒ‹แŒ…-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

แ‰ แˆšแ‰€แŒฅแˆˆแ‹ แ‹ฐแˆจแŒƒ, แ‰ แ‹šแˆ… แˆ›แ‹แŒซ แ‹แˆตแŒฅ แˆตแŠญแˆชแ•แ‰ต แŠฅแŠ“แˆตแ‰€แˆแŒฃแˆˆแŠ•, แ‹ญแˆ…แˆ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘แŠ• แŠจแŒ€แˆ˜แˆจ แ‰ แŠ‹แˆ‹ แ‹ˆแ‹ฒแ‹ซแ‹แŠ‘ แˆ˜แŒ€แˆ˜แˆญ แ‹ซแˆตแˆแˆแŒˆแ‹‹แˆ. แ‹ญแˆ… แˆตแŠญแˆชแ•แ‰ต แ‰  Grafana แ‹แ‰…แˆญ แ‹แˆตแŒฅ แˆ˜แˆ˜แ‹แŒˆแ‰ฅ แ‹ซแˆˆแ‰ฃแ‰ธแ‹แŠ• แ‹จแ‰ฐแŒ แ‰ƒแˆš แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ แ‹ซแˆตแ‰€แˆแŒฃแ‰ธแ‹‹แˆ แŠฅแŠ“ แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ฉแŠ• แŠฅแŠ•แ‹ฐแŒˆแŠ“ แ‹ซแˆตแŒ€แˆแˆซแˆแข

setup.sh:

#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

แŠจแ‹šแˆ… แ‰ แŠ‹แˆ‹ 3 แАแŒˆแˆฎแ‰ฝ แ‹ญแ‰€แˆซแˆ‰แก-
1) แ“แŠฌแŒ†แ‰ฝแŠ• แ‹ญแŒซแŠ‘
2) GrafanaแŠ• แ‰  systemctl แˆตแˆญ แ‹ซแˆ‚แ‹ฑ แŠฅแŠ“ แ‹จ ClickHouse แ‰ฐแˆฐแŠชแŠ• แ‹ญแŒซแŠ‘
3) แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘แŠ• แŠซแ‰ แˆฉ แ‰ แŠ‹แˆ‹ แ‹ˆแ‹ฒแ‹ซแ‹แŠ‘ แ‹จ setup.sh แˆตแŠญแˆชแ•แ‰ต แ‰ แˆ›แˆตแŒ€แˆ˜แˆชแ‹ซ แ‹ˆแˆจแ‹ แ‹แˆตแŒฅ แ‹ซแˆตแ‰€แˆแŒกแข

install-packages.sh:

#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

grafana-setup.sh:

#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

run-setup-at-reboot.shแก

#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;

แŠ แˆแŠ• แ‹จแ‰€แˆจแ‹ แ“แŠจแˆญแŠ• แˆ›แˆตแŠฌแ‹ต แŠฅแŠ“ แ‹จแ‹แŒคแ‰ต แˆแˆตแˆ แ‰ แ‰ฐแŒ แ‰€แˆฐแ‹ แŠญแแˆ แ‹แˆตแŒฅ แŠฅแŠ•แ‹ฒแ‰€แˆ˜แŒฅ แˆ›แ‹ตแˆจแŒ แАแ‹แข แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ• แˆฒแˆแŒฅแˆฉ แŠฅแŠ•แ‹ฐ แ‰กแ‰ต แ‹ฒแˆตแŠญ แˆ˜แˆแˆจแŒฅ แ‹ญแ‰ฝแˆ‹แˆ‰ แŠฅแŠ“ แŠจแ‰ฐแАแˆณ แ‰ แŠ‹แˆ‹ แ‹แŒแŒ แ‹จแˆ†แА แ‹จแŒแˆซแ‹แŠ“ แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญ แ‹ญแ‹ฐแˆญแˆฐแ‹Žแ‰ณแˆแข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต
GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‹จแŠ แ‰ฅแАแ‰ต แ‰กแ‹ตแŠ• แŠฅแŠ“ แˆšแ‹›แŠ“แ‹Š

แ‰ฅแ‹™ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹จแŒแˆซแ‹แŠ“ แ‹Œแ‰ฅ แˆฐแˆญแ‰จแˆฎแ‰ฝแŠ• แˆˆแˆ˜แแŒ แˆญ แ‹จแˆšแ‹ซแˆตแ‰ฝแˆ แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แŠซแˆˆแŠ• แ‰ แŠ‹แˆ‹ แ‹จแˆแˆณแˆŒ แ‰กแ‹ตแŠ• แˆ˜แแŒ แˆญ แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•แข แ‰  Yandex.Cloud แˆ˜แ‹ตแˆจแŠญ แˆ‹แ‹ญ, แ‹ญแˆ… แ‰ƒแˆ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‰ฃแˆ…แˆชแ‹ซแ‰ต แ‹ซแˆ‹แ‰ธแ‹แŠ• แ‹จแ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝแŠ• แŠ แŠ•แ‹ตแАแ‰ต แ‹ซแˆ˜แˆˆแŠญแ‰ณแˆ. แ‹จแˆแˆณแˆŒ แ‰กแ‹ตแŠ•แŠ• แ‰ แˆšแˆแŒฅแˆฉแ‰ แ‰ต แŒŠแ‹œ แ‰ แ‹šแˆ… แ‰กแ‹ตแŠ• แ‹แˆตแŒฅ แ‹ซแˆ‰แ‰ต แˆแˆ‰แˆ แˆ›แˆฝแŠ–แ‰ฝ แ•แˆฎแ‰ถแ‰ณแ‹ญแ• แ‰ฐแ‹‹แ‰…แˆจแ‹‹แˆ แฃ แŠฅแŠ“ แŠจแ‹šแ‹ซ แ‹จแ‰กแ‹ตแŠ‘ แ‰ฃแˆ…แˆชแ‹Žแ‰ฝ (แˆˆแˆแˆณแˆŒ แฃ แŠ แАแˆตแ‰ฐแŠ› แŠฅแŠ“ แŠจแแ‰ฐแŠ›แ‹ แ‹จแŠ•แ‰ แˆ›แˆฝแŠ–แ‰ฝ แ‰ฅแ‹›แ‰ต)แข แŠ แˆแŠ• แ‹ซแˆˆแ‹ แ‰แŒฅแˆญ แŠฅแАแ‹šแˆ…แŠ• แˆ˜แˆ˜แ‹˜แŠ›แ‹Žแ‰ฝ แ‹จแˆ›แ‹ซแˆŸแˆ‹ แŠจแˆ†แА, แ‹จแˆแˆณแˆŒแ‹ แ‰กแ‹ตแŠ• แŠฅแˆซแˆฑ แŠ แˆ‹แˆตแˆแˆ‹แŒŠ แˆ›แˆฝแŠ–แ‰ฝแŠ• แ‹ซแˆตแ‹ˆแŒแ‹ณแˆ แ‹ˆแ‹ญแˆ แ‰ แˆซแˆฑ แˆแˆตแˆ แŠ แ‹ณแ‹ฒแˆต แˆ›แˆฝแŠ–แ‰ฝแŠ• แ‹ญแˆแŒฅแˆซแˆ.

แŠฅแŠ•แ‹ฐ แ‰ฐแŒแ‰ฃแˆซแ‰ฝแŠ• แŠ แŠซแˆแฃ แ‰€แ‹ฐแˆ แˆฒแˆ แŠจแ‰ฐแˆแŒ แˆจแ‹ แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แ‹จแˆšแˆ˜แАแŒฉ แ‹จแ‹Œแ‰ฅ แˆฐแˆญแ‰จแˆฎแ‰ฝ แˆแˆณแˆŒ แ‰กแ‹ตแŠ• แŠฅแŠ•แˆแŒฅแˆซแˆˆแŠ•แข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‰ แŒฃแˆ แ‹จแˆšแ‹ซแˆตแ‹ฐแŠ•แ‰€แ‹ แ‹จแˆ˜แŒจแˆจแˆปแ‹ แ‰กแ‹ตแŠ• แˆ›แ‹‹แ‰€แˆญ แАแ‹แข แ‹จแ‹’แˆ‹แˆ›แ‹ แ‰กแ‹ตแŠ• แŠจ Load Balancer แŒ‹แˆญ แ‰ แˆ˜แ‰€แŠ“แŒ€แ‰ต แ‰ แ‹šแˆ… แ‰กแ‹ตแŠ• แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝ แˆ‹แ‹ญ แ‹จแŠคแˆ 3 แˆšแ‹›แŠ‘แŠ• แŠฅแŠ•แ‹ฒแ‹ซแ‹‹แ‰…แˆฉ แˆแˆˆแ‰ต แ‰แˆแŽแ‰ฝแŠ• แŒ แ‰… แ‰ แˆ›แ‹ตแˆจแŒ แ‹ญแˆจแ‹ณแ‹Žแ‰ณแˆแข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แˆšแ‹›แŠ‘แŠ• แˆณแ‹˜แŒ‹แŒ… แˆแˆˆแ‰ต แŠ แˆตแˆแˆ‹แŒŠ แАแŒฅแ‰ฆแ‰ฝแŠ• แ‰ฐแŒแ‰ฅแˆฌแŠ แˆˆแˆแก-

  1. แˆšแ‹›แŠ‘ แ‹จแ‰ฐแŒ แ‰ƒแˆšแ‹แŠ• แ‰ตแˆซแŠแŠญ แ‹ˆแ‹ฐแ‰ฅ 80 แŠฅแŠ•แ‹ฒแ‰€แ‰ แˆ แŠฅแŠ“ แŒแˆซแ‹แŠ“ แ‹ˆแ‹ฐแˆšแŠ–แˆญแ‰ แ‰ต แ‹ˆแ‹ฐ 3000 แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ–แ‰ฝ แŠฅแŠ•แ‹ฒแ‹žแˆญ แŠ แ‹ตแˆญแŒŒแ‹‹แˆˆแˆแข
  2. แ‹จแˆ›แˆฝแŠ–แ‰นแŠ• แŠ แ‹‹แŒญแАแ‰ต แ‰ แˆ˜แˆแ‰ฐแˆฝ แ‹ˆแ‹ฐแ‰ฅ 3000 แ‰ แˆ›แ‹ซแ‹ซแ‹ แŠ แ‹˜แŒ‹แŒ€แˆแข

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แŠ แАแˆตแ‰ฐแŠ› แˆ›แŒ แ‰ƒแˆˆแ‹ซ

แ‰ แˆ˜แŒจแˆจแˆปแˆ แ‹จแ‰ฐแˆแˆˆแŒˆแ‹แŠ• แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ตแŠ• แ‰ แŠฅแŒ… แˆ›แˆฐแˆ›แˆซแ‰ต แ‰ฝแˆˆแŠ“แˆแฃ แŠฅแŠ“ แŠ แˆแŠ• แ‰ แŒฃแˆ แ‹จแˆšแ‰‹แ‰‹แˆ แ‹จแŒแˆซแ‹แŠ“ แŠ แŒˆแˆแŒแˆŽแ‰ต แŠ แˆˆแŠ•แข แ‹จแˆ˜แˆจแŒƒ แ‰‹แ‰ฑแŠ• แ‹ˆแ‹ฐ แ‹แˆตแŒฅ แˆˆแˆ˜แŒซแŠ• แ‹จแˆ‚แˆณแ‰ฅ แˆฐแŒชแ‹แŠ• แ‹จแŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆป แŠฅแŠ•แ‹ฐ แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹ แˆ˜แŒแ‰ขแ‹ซ แАแŒฅแ‰ฅ แŠฅแŠ“ แ‹จ ClickHouse แŠญแˆ‹แˆตแ‰ฐแˆญ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แ‰ฅแ‰ป แˆ›แ‹ˆแ‰… แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆแข

แ‹ตแˆ โ€‹โ€‹แ‹ญแˆ˜แˆตแˆ‹แˆ? แŠ แ‹Ž แ‹ตแˆแข แАแŒˆแˆญ แŒแŠ• แŠ แˆแŠ•แˆ แŒแˆซ แ‹จแˆšแ‹ซแŒ‹แ‰ฃแŠ แАแŒˆแˆญ แŠ แˆˆแข แŠจแˆ‹แ‹ญ แ‹ซแˆˆแ‹ แŠ แŒ แ‰ƒแˆ‹แ‹ญ แˆ‚แ‹ฐแ‰ต แ‰ฅแ‹™ แ‰ แŠฅแŒ… แ‹จแˆšแ‹ˆแˆตแ‹ฑ แŠฅแˆญแˆแŒƒแ‹Žแ‰ฝแŠ• แ‹จแˆšแˆแˆแŒ แŠฅแŠ“ แ‰ แแแˆ แˆŠแˆฐแ‹ แ‹จแˆšแ‰ฝแˆ แŠ แ‹ญแ‹ฐแˆˆแˆแค แŠจแ‰ฐแ‰ปแˆˆ แŠ แ‹แ‰ถแˆ›แ‰ฒแŠญ แˆ›แ‹ตแˆจแŒ แŠฅแˆแˆแŒ‹แˆˆแˆแข แ‹จแˆšแ‰€แŒฅแˆˆแ‹ แŠญแแˆ แˆˆแ‹šแˆ… แАแ‹.

แ‹จแ‰ดแˆซแŽแˆญแˆ แ‹แˆ…แ‹ฐแ‰ต

แŠฅแŠ•แ‹ฐแŒˆแŠ“ แŠจ HashiCorp แ‹จแ‰ฐแ‰ฃแˆˆ แˆ˜แˆณแˆชแ‹ซ แŠฅแŠ•แŒ แ‰€แˆ›แˆˆแŠ• Terraform. แ‰ แ‰ฐแŒ แ‰ƒแˆšแ‹ แ‰ แˆšแ‰ฐแˆ‹แˆˆแ‰ แ‰ แˆญแŠซแ‰ณ แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ แˆ‹แ‹ญ แ‰ แˆ˜แˆ˜แˆตแˆจแ‰ต แŠ แŠ•แ‹ต แŠ แ‹แˆซแˆญ แŒ แ‰… แ‰ แˆ›แ‹ตแˆจแŒ แˆ™แˆ‰แ‹แŠ• แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แˆˆแˆ›แˆฐแˆ›แˆซแ‰ต แ‹ญแˆจแ‹ณแ‹Žแ‰ณแˆ. แ‰ แ‰ฐแˆˆแ‹ซแ‹ฉ แ‹จแ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ แŠญแแˆŽแ‰ฝ แ‹แˆตแŒฅ แ‰ฅแ‹™ แŒŠแ‹œ แˆŠแˆฐแˆซ แ‹จแˆšแ‰ฝแˆ แ‹จแˆแŒแ‰ฅ แŠ แˆฐแˆซแˆญแŠ• แŠฅแŠ•แƒแแข

แˆแˆ‰แˆ แŠจแ‰ดแˆซแŽแˆญแˆ แŒ‹แˆญ แ‹จแˆšแˆฐแˆฉแ‰ต แ‹จแˆ›แ‹‹แ‰€แˆชแ‹ซ แ‹แ‹ญแˆแŠ• แˆˆแˆ˜แƒแ แ‹ญแ‹ˆแˆญแ‹ณแˆ‰ (*.tf) แŠฅแŠ“ แ‰ แŠฅแˆฑ แˆ‹แ‹ญ แ‹จแ‰ฐแˆ˜แˆฐแˆจแ‰ฐ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แˆ˜แแŒ แˆญ.

แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ

แ‰ แ‹แ‹ญแˆ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แˆ‹แ‹ญ แ‹จแ‹ˆแ‹ฐแŠแ‰ฑ แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แ‹จแ‰ต แŠฅแŠ“ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแˆฐแˆ›แˆฉ แ‹จแˆšแ‹ˆแˆตแŠ‘ แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝแŠ• แŠฅแŠ“แŠซแ‰ตแ‰ณแˆˆแŠ•แข

variable "oauth_token" {
    type = string
    default = "<oauth-token>"
}
variable "cloud_id" {
    type = string
    default = "<cloud-id>"
}
variable "folder_id" {
    type = string
    default = "<folder_id>"
}
variable "service_account_id" {
    type = string
    default = "<service_account_id>"
}
variable "image_id" {
    type = string
    default = "<image_id>"
}
variable "username" {
    type = string
    default = "<username>"
}
variable "password" {
    type = string
    default = "<password>"
}
variable "dbname" {
    type = string
    default = "<dbname>"
}
variable "public_key_path" {
    type = string
    default = "<path to ssh public key>"
}

แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆแŠ• แˆˆแˆ˜แŒˆแŠ•แ‰ฃแ‰ต แŠฅแŠ“ แŠฅแАแ‹šแˆ…แŠ• แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ แˆˆแˆ›แ‹˜แŒ‹แŒ€แ‰ต แŠ แŒ แ‰ƒแˆ‹แ‹ญแ‹ แ‹จแˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แˆ›แˆฐแˆ›แˆซแ‰ต แˆ‚แ‹ฐแ‰ต แ‹ญแ‹ˆแˆญแ‹ณแˆแข แˆแŠ• แ‰ฐแŒ แ‹ซแ‰‚ แŠฅแŠ•แ‹ฐแˆ†แŠ‘ แˆ‹แ‰ฅแˆซแˆซแข

แŠฆแ‹แ‰ต_แ‰ถแŠจแŠ• - แ‹ฐแˆ˜แŠ“แ‹แŠ• แˆˆแˆ˜แ‹ตแˆจแˆต แˆแˆแŠญแ‰ตแข แ‰  แˆ›แŒแŠ˜แ‰ต แ‹ญแ‰ปแˆ‹แˆแข แˆ›แ‹ซแ‹ซแ‹ฃ.
แ‹จแ‹ฐแˆ˜แŠ“_แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซ - แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹แŠ• แ‹จแˆแŠ“แˆฐแˆ›แˆซแ‰ แ‰ต แ‹จแ‹ฐแˆ˜แŠ“ แˆ˜แˆˆแ‹ซ
แŠ แ‰ƒแŠ_แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซ - แˆ›แˆ˜แˆแŠจแ‰ปแ‹แŠ• แ‹จแˆแŠ“แˆฐแˆ›แˆซแ‰ แ‰ต แŠญแแˆ แˆ˜แˆˆแ‹ซ
แ‹จแŠ แŒˆแˆแŒแˆŽแ‰ต_แˆ˜แˆˆแ‹ซ_แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซ - แ‹จแŠ แŒˆแˆแŒแˆŽแ‰ต แˆ˜แˆˆแ‹ซ แˆ˜แˆˆแ‹ซ แ‰ แ‹ฐแˆ˜แŠ“แ‹ แŠญแแˆ แ‹แˆตแŒฅแข
แˆแˆตแˆ_แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซ - แ“แŠจแˆญแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹จแ‰ฐแŒˆแŠ˜แ‹แŠ• แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แˆ˜แˆˆแ‹ซ
แ‹จแ‰ฐแŒ แ‰ƒแˆš แˆตแˆ ะธ แ‹จแ‹ญแˆˆแ แ‰ƒแˆ แˆแˆˆแ‰ฑแŠ•แˆ แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณแ‹Žแ‰ฝ แŠฅแŠ“ แ‹จแŒแˆซแ‹แŠ“ แ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ญแŠ• แˆˆแˆ˜แ‹ตแˆจแˆต แ‹จแ‰ฐแŒ แ‰ƒแˆš แˆตแˆ แŠฅแŠ“ แ‹จแ‹ญแˆˆแ แ‰ƒแˆ
dbname - แ‹จแ‹แˆ‚แ‰ฅ แŒŽแ‰ณ แˆตแˆ แ‰  CH แŠฅแŠ“ MySQL แˆตแ‰ฅแˆตแ‰ฆแ‰ฝ แ‹แˆตแŒฅ
แ‹จแˆ…แ‹แ‰ฅ_แ‰แˆแ_แˆ˜แŠ•แŒˆแ‹ต โ€” แ‹ˆแ‹ฐ แ‹แ‹ญแˆ‰ แ‹จแˆšแ‹ˆแˆตแ‹ฐแ‹ แˆ˜แŠ•แŒˆแ‹ต แ‰ แŠ แ‹ฐแ‰ฃแ‰ฃแ‹ญ ssh แ‰แˆแแˆ…แฃ แ‰ แˆตแˆ™ แˆˆแˆ˜แŒˆแŠ“แŠ˜แ‰ต แˆแ‰ตแŒ แ‰€แˆแ‰ แ‰ต แ‰ตแ‰ฝแˆ‹แˆˆแˆ… ubuntu แŠจแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แŒ‹แˆญ แ‹ˆแ‹ฐ แˆแŠ“แ‰ฃแ‹Š แˆ›แˆฝแŠ–แ‰ฝ

แ‹จแŠ แ‰…แˆซแ‰ข แˆ›แ‹‹แ‰€แˆญ

แŠ แˆแŠ• แ‹จ Terraform แŠ แ‰…แˆซแ‰ขแ‹แŠ• แˆ›แ‹‹แ‰€แˆญ แ‹ซแˆตแˆแˆแŒแ‹Žแ‰ณแˆ - แ‰ แŠฅแŠ› แˆแŠ”แ‰ณ Yandex:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

แŠฅแ‹šแˆ… แŠจแˆ‹แ‹ญ แ‹จแ‰ฐแŒˆแˆˆแŒนแ‰ตแŠ• แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝ แŠฅแ‹จแ‰ฐแŒ แ‰€แˆแŠ• แˆ˜แˆ†แŠ‘แŠ• แ‹ซแˆตแ‰ฐแ‹แˆ‹แˆ‰แข

แŠ แ‹แ‰ณแˆจ แˆ˜แˆจแ‰ฅ แŠฅแŠ“ แˆตแ‰ฅแˆตแ‰ฆแ‰ฝ

แŠ แˆแŠ• แ‹จแˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แŠญแแˆŽแ‰ปแ‰ฝแŠ• แ‹จแˆšแŒแ‰ฃแ‰กแ‰ แ‰ต แŠ”แ‰ตแ‹ˆแˆญแŠญ แŠฅแŠ•แˆแŒฅแˆซแˆˆแŠ•แฃ แˆถแˆตแ‰ต แŠ•แŠกแˆต แŠ”แ‰ตแ‹ˆแˆญแŠฎแ‰ฝ (แ‰ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แŠญแˆแˆ แŠ แŠ•แ‹ต) แŠฅแŠ“ CH แŠฅแŠ“ MySQL แ‹˜แˆˆแˆ‹แ‹Žแ‰ฝแŠ• แŠจแ แŠฅแŠ“แ‹ฐแˆญแŒ‹แˆˆแŠ•แข


resource "yandex_vpc_network" "grafana_network" {}

resource "yandex_vpc_subnet" "subnet_a" {
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.1.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.2.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_c" {
  zone           = "ru-central1-c"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.3.0.0/24"]
}

resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
  name        = "grafana-clickhouse"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id

  clickhouse {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
  }

  zookeeper {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 10
    }
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
    }
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
  name        = "grafana_mysql"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id
  version     = "8.0"

  resources {
    resource_preset_id = "s2.micro"
    disk_type_id       = "network-ssd"
    disk_size          = 16
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
      roles         = ["ALL"]
    }
  }

  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }
  host {
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }
  host {
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

แŠฅแŠ•แ‹ฐแˆแ‰ณแ‹จแ‹แฃ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ณแ‰ธแ‹ แˆแˆˆแ‰ฑ แ‹˜แˆˆแˆ‹แ‹Žแ‰ฝ แ‰ แˆฆแˆตแ‰ต แ‹จแ‰ฐแ‹ฐแˆซแˆฝแАแ‰ต แ‹žแŠ–แ‰ฝ แ‹แˆตแŒฅ แ‰ แˆ˜แŒˆแŠ˜แ‰ณแ‰ธแ‹ แˆตแˆ…แ‰ฐแ‰ตแŠ• แ‹จแˆšแ‰ณแŒˆแˆก แŠ“แ‰ธแ‹แข

แ‹จแ‹ตแˆญ แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ

แ‰ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แˆ˜แŠ•แˆแˆต แˆ˜แ‰€แŒ แˆ แ‹จแˆแŠ•แ‰ฝแˆ แ‹ญแˆ˜แˆตแˆˆแŠ แАแ‰ แˆญแฃ แŒแŠ• แ‰ฝแŒแˆญ แ‹แˆตแŒฅ แŒˆแ‰ฃแˆแข แŠจแ‹šแˆ… แ‰ แŠแ‰ตแฃ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แ‹จ MySQL แŠญแˆ‹แˆตแ‰ฐแˆญ แŠ แАแˆณแˆ แŠฅแŠ“ แŠจแ‹šแ‹ซ แ‰ แŠ‹แˆ‹ แ‰ฅแ‰ป แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซแ‹แŠ• แŠ แ‹แ‰„แฃ แŠ แˆตแˆแˆ‹แŒŠแ‹แŠ• แ‹แ‰…แˆญ แ‹ซแˆˆแ‹ แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แˆฐแ‰ แˆฐแ‰ฅแŠฉแฃ แŠฅแ‹šแ‹ซแˆ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒแŠ• แ‹ˆแ‹ฐ แŠญแˆ‹แˆตแ‰ฐแˆญ แŒˆแˆˆแŒฝแŠฉแข แŠ แˆแŠ• แŒแŠ• แˆแˆตแˆ‰แŠ• แ‰ แˆšแˆ แˆซแ‰ แ‰ต แŒŠแ‹œ แŒจแˆแˆฎ TerraformแŠ• แŠจแˆ˜แŒ€แˆ˜แˆญแ‹Ž แ‰ แŠแ‰ต แ‹จแŠญแˆ‹แˆตแ‰ฐแˆญ แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซแ‹แŠ• แŠ แŠ“แ‹แ‰…แˆแข แˆตแˆˆแ‹šแˆ… แ‹ˆแ‹ฐแˆšแŠจแ‰ฐแˆˆแ‹ แАแŒˆแˆญ แˆ˜แˆ„แ‹ต แАแ‰ แˆจแ‰ฅแŠ แ‰ฅแˆแˆƒแ‰ต.

แ‹จแŠ แˆ›แ‹žแŠ• แˆœแ‰ณแ‹ณแ‰ณ แŠ แŒˆแˆแŒแˆŽแ‰ตแŠ• แ‰ แˆ˜แŒ แ‰€แˆ แ‹จแ‰ฐแ‹ˆแˆฐแŠ‘ แˆ˜แˆˆแŠชแ‹ซแ‹Žแ‰ฝแŠ• แ‹ˆแ‹ฐ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘ แŠฅแŠ“แˆตแ‰ฐแˆ‹แˆแ‹แˆˆแŠ•แฃ แŠฅแˆฑแˆ แ‰ฐแ‰€แ‰ฅแˆŽ แ‹ซแˆตแŠฌแ‹ณแˆแข แˆ›แˆฝแŠ‘ แŠจ MySQL แŠญแˆ‹แˆตแ‰ฐแˆญ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แŠฅแŠ“ แ‹จแ‰ฐแŒ แ‰ƒแˆš แˆตแˆ-แ‹ญแˆˆแ แ‰ƒแˆ แŒ€แˆญแ‰ฃ แ‹ซแˆˆแ‹ แˆœแ‰ณแ‹ณแ‰ณ แˆ˜แˆ„แ‹ต แŠฅแŠ•แˆแˆแŒ‹แˆˆแŠ•แฃ แ‰ฐแŒ แ‰ƒแˆšแ‹ แŠจแŒ€แˆ˜แˆจ แ‰ แŠ‹แˆ‹ แ‰  Terraform แ‹แ‹ญแˆ แ‹แˆตแŒฅ แ‹จแ‰ฐแŒˆแˆˆแŒธแ‹แข แ‹จแ‹แ‹ญแˆ‰แŠ• แ‹ญแ‹˜แ‰ต แ‰ แ‰ตแŠ•แˆน แŠฅแŠ•แˆˆแ‹แŒ แ‹ setup.shแ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘ แˆฒแ‰ แˆซ แ‹จแˆšแˆฐแˆซแข

setup.sh:

#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

แ‹จแˆ˜แŒแ‰ขแ‹ซ แ‰กแ‹ตแŠ• แŠฅแŠ“ แˆšแ‹›แŠ“แ‹Š

แŠ แ‹ฒแˆต แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แŠฅแŠ•แ‹ฐแŒˆแŠ“ แŠจแŒˆแАแ‰ฃแŠ•แฃ แ‰ แˆ˜แŒจแˆจแˆป แ‹จแŠฅแŠ›แŠ• แ‹แ‹ญแˆ แˆˆ Terraform แˆ›แŠจแˆ แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•แข

แŠ แˆแŠ• แ‹ซแˆˆแ‹แŠ• แ‹จแ‹ฒแˆตแŠญ แˆแˆตแˆ แˆ˜แŒ แ‰€แˆ แŠฅแŠ•แ‹ฐแˆแŠ•แˆแˆแŒ แŠฅแŠ•แŒ แ‰แˆแฆ

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

แŠ แˆแŠ• แ‹จแŠ แ‰ฅแАแ‰ต แ‰กแ‹ตแŠ• แŠฅแŠ•แแŒ แˆญแก-

resource "yandex_compute_instance_group" "grafana_group" {
  name               = "grafana-group"
  folder_id          = var.folder_id
  service_account_id = var.service_account_id
  instance_template {
    platform_id = "standard-v1"
    resources {
      memory = 1
      cores  = 1
    }
    boot_disk {
      mode = "READ_WRITE"
      initialize_params {
        image_id = data.yandex_compute_image.grafana_image.id
        size     = 4
      }
    }
    network_interface {
      network_id = yandex_vpc_network.grafana_network.id
      subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
      nat = "true"
    }
    metadata = {
      mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
      username = var.username
      password = var.password
      ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
    }
    network_settings {
      type = "STANDARD"
    }
  }

  scale_policy {
    fixed_scale {
      size = 6
    }
  }

  allocation_policy {
    zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
  }

  deploy_policy {
    max_unavailable = 2
    max_creating    = 2
    max_expansion   = 2
    max_deleting    = 2
  }

  load_balancer {
    target_group_name = "grafana-target-group"
  }
}

แ‹ˆแ‹ฐ แˆœแ‰ณแ‹ณแ‰ณ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ณแˆตแ‰ฐแˆ‹แˆˆแแŠ• แ‰ตแŠฉแˆจแ‰ต แˆ˜แˆตแŒ แ‰ต แ‰ฐแŒˆแ‰ข แАแ‹แข cluster_uri, username ะธ password. แŠฅแАแ‹šแˆ… แŠ“แ‰ธแ‹ แ‰จแˆญแ‰นแ‹‹แˆ แˆ›แˆฝแŠ‘ แŒ…แˆแˆญ แˆ‹แ‹ญ แŠ แ‹แŒฅแ‰ถ แ‰ แŒแˆซแ‹แŠ“ แ‹แ‰…แˆจแ‰ต แ‹แˆตแŒฅ แ‹ซแˆตแ‰€แˆแŒฃแˆแข

แˆšแ‹›แŠ‘แŠ• แ‹จแŒ แ‰ แ‰€ แАแ‹แข

resource "yandex_lb_network_load_balancer" "grafana_balancer" {
  name = "grafana-balancer"

  listener {
    name = "grafana-listener"
    port = 80
    target_port = 3000
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id

    healthcheck {
      name = "healthcheck"
      tcp_options {
        port = 3000
      }
    }
  }
}

แ‰ตแŠ•แˆฝ แˆตแŠณแˆญ

แ‰ตแŠ•แˆฝ แ‰ฅแ‰ป แАแ‹ แ‹จแ‰€แˆจแ‹แข แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ฑ แŠจแ‰ฐแ‹˜แˆจแŒ‹ แ‰ แŠ‹แˆ‹ แ‹ˆแ‹ฐ แŒแˆซแ‹แŠ“ UI แˆ˜แˆ„แ‹ต แŠฅแŠ“ แ‹จ CH แŠญแˆ‹แˆตแ‰ฐแˆญแŠ• (แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซแ‹ แŠ แˆแŠ•แˆ แˆ›แŒแŠ˜แ‰ต แ‹ซแˆˆแ‰ แ‰ต) แŠฅแŠ•แ‹ฐ แ‹จแ‹แˆ‚แ‰ฅ แˆแŠ•แŒญ แŠฅแˆซแˆตแ‹Ž แˆ›แŠจแˆ แŠ แˆˆแ‰ฅแ‹Žแ‰ตแข แАแŒˆแˆญ แŒแŠ• แ‰ดแˆซแŽแˆญแˆ แ‹จแŠญแˆ‹แˆตแ‰ฐแˆญ แˆ˜แ‰ณแ‹ˆแ‰‚แ‹ซแ‹แŠ• แ‹ซแ‹แ‰ƒแˆแข แŒ‰แ‹ณแ‹ฉแŠ• แ‹ˆแ‹ฐ แแŒปแˆœ แŠฅแŠ•แ‹ฒแ‹ซแ‹ฐแˆญแˆต แŠ แ‹ฐแˆซ แŠฅแŠ•แˆตแŒ แ‹แข

แŠ แ‹ฒแˆต แŠ แ‰…แˆซแ‰ข แŠฅแŠ•แŒจแˆแˆญ - Grafanaแฃ แŠฅแŠ“ แŠฅแŠ•แ‹ฐ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แ‹จแˆ‚แˆณแ‰ฅ แˆฐแŒชแ‹แŠ• แŠ แ‹ญแ’ แŠ แ‹ตแˆซแˆป แŠฅแŠ•แˆตแŒฃแ‰ตแข แ‰ดแˆซแŽแˆญแˆ แˆšแ‹›แŠ‘ แ‰ แˆšแ‹ˆแˆตแŠ•แ‰ แ‰ต แˆ›แˆฝแŠ• แˆ‹แ‹ญ แ‹จแˆšแ‹ซแ‹ฐแˆญแŒ‹แ‰ธแ‹ แˆˆแ‹แŒฆแ‰ฝ แˆแˆ‰ MySQL แ‹แˆตแŒฅ แ‹ซแ‹ตแŒ‹แˆ‰แฃ แŠฅแŠ“ แˆตแˆˆแ‹šแˆ… แ‰ แˆแˆ‰แˆ แˆŒแˆŽแ‰ฝ แˆ›แˆฝแŠ–แ‰ฝ แˆ‹แ‹ญแข

provider "grafana" {
  url  = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
  auth = "${var.username}:${var.password}"
}

resource "grafana_data_source" "ch_data_source" {
  type          = "vertamedia-clickhouse-datasource"
  name          = "grafana"
  url           = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
  basic_auth_enabled = "true"
  basic_auth_username = var.username
  basic_auth_password = var.password
  is_default = "true"
  access_mode = "proxy"
}

แŒธแŒ‰แˆซแ‰ฝแŠ•แŠ• แŠฅแŠ•แ‰ฆแŒญ

แˆšแ‹›แŠ‘แŠ• แ‹จแŒ แ‰ แ‰€ แ‹จแŠ แ‹ญ แ’ แŠ แ‹ตแˆซแˆป แŠฅแŠ“ แ‹จ ClickHouse แŠญแˆ‹แˆตแ‰ฐแˆญ แŠ แˆตแ‰ฐแŠ“แŒ‹แŒ… แŠฅแŠ“แˆณแ‹ญ

output "grafana_balancer_ip_address" {
  value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}

output "clickhouse_cluster_host" {
  value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}

แˆ˜แˆฎแŒฅ แ‰ตแ‰ฝแˆ‹แˆˆแˆ…

แˆแˆ‰แˆ! แ‹จแŠฅแŠ› แ‹จแˆ›แ‹‹แ‰€แˆชแ‹ซ แ‹แ‹ญแˆ แ‹แŒแŒ แАแ‹ แŠฅแŠ“ แ‰ฐแˆˆแ‹‹แ‹‹แŒฎแ‰ฝแŠ• แ‰ แˆ›แ‹˜แŒ‹แŒ€แ‰ต Terraform แŠจแˆ‹แ‹ญ แ‹จแŒˆแˆˆแ…แАแ‹แŠ• แˆแˆ‰ แŠฅแŠ•แ‹ฒแ‹ซแˆณแ‹ตแŒ แˆ˜แŠ•แŒˆแˆญ แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•แข แŠ แŒ แ‰ƒแˆ‹แ‹ญ แˆ‚แ‹ฐแ‰ฑ 15 แ‹ฐแ‰‚แ‰ƒ แ‹ซแˆ…แˆ แ‹ˆแˆฐแ‹ฐแŠแข
แ‰ แˆ˜แŒจแˆจแˆป แŠ แŠ•แ‹ต แ‹จแˆšแ‹ซแˆแˆญ แˆ˜แˆแŠฅแŠญแ‰ต แˆ›แ‹จแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰-

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:

clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25

แŠฅแŠ“ แ‰ แ‹ฐแˆ˜แŠ“แ‹ แ‹แˆตแŒฅ แฃ แ‹จแ‰ฐแАแˆฑแ‰ต แˆ˜แˆ แˆจแ‰ฐ แˆแˆ›แ‰ต แŠ แŠซแˆ‹แ‰ต แ‹ญแ‰ณแ‹ซแˆ‰-

GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แ‰  Yandex.Cloud แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแ‹แˆแˆ‰ แŠ แŒˆแˆแŒแˆŽแ‰ถแ‰ฝแŠ• แˆ˜แ‹˜แˆญแŒ‹แ‰ต

แ‹แŒคแ‰ฑแŠ• แ‰ แŠ แŒ แ‰ƒแˆ‹แ‹ญ แŠฅแŠ“แŒ แ‰ƒแˆแˆ

แŠ แˆแŠ•แฃ GrafanaแŠ• แŠฅแŠ•แ‹ฐ แˆแˆณแˆŒ แ‰ แˆ˜แŒ แ‰€แˆ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ณแ‰ฝแˆ แ‰  Yandex.Cloud แˆ˜แ‹ตแˆจแŠญ แˆ‹แ‹ญ แ‰ แ‰ฐแŠ•แŒฃแˆˆแˆˆ แ‹จแ‹ฐแˆ˜แŠ“ แŠ แˆญแŠญแ‰ดแŠญแ‰ธแˆญ แŠ แ•แˆŠแŠฌแˆฝแŠ–แ‰ฝแŠ• แˆ›แˆฐแˆ›แˆซแ‰ต แ‰ตแ‰ฝแˆ‹แˆ‹แ‰ฝแˆแข แŠจ HashiCorp แŠฅแŠ•แ‹ฐ แ“แŠจแˆญ แŠฅแŠ“ แ‰ดแˆซแŽแˆญแˆ แ‹ซแˆ‰ แŠ แŒ‹แ‹ฅ แˆ˜แˆณแˆชแ‹ซแ‹Žแ‰ฝ แ‰ แ‹šแˆ… แˆŠแˆจแ‹ฑแ‹Žแ‰ต แ‹ญแ‰ฝแˆ‹แˆ‰แข แŠ แŠ•แ‹ต แˆฐแ‹ แ‹ญแˆ… แŒฝแˆ‘แ แŒ แ‰ƒแˆš แˆ†แŠ– แŠฅแŠ•แ‹ณแŒˆแŠ˜แ‹ แ‰ฐแˆตแ‹ แŠ แ‹ฐแˆญแŒ‹แˆˆแˆ :)

PS แŠจแ‹šแˆ… แ‰ แ‰ณแ‰ฝ แ‰ แ‹šแˆ… แŒฝแˆ‘แ แ‹แˆตแŒฅ แ‹ซแ‰€แˆจแ‰ฅแŠณแ‰ธแ‹แŠ• แ‰แˆญแŒฅแˆซแŒฎแ‰ฝ แˆˆแ“แŠจแˆญ แŠฅแŠ“ แ‰ดแˆซแŽแˆญแˆ แ‹แŒแŒ แ‹จแˆ†แŠ‘ แ‹จแˆแŒแ‰ฅ แŠ แ‹˜แŒˆแŒƒแŒ€แ‰ถแ‰ฝแŠ• แ‹ˆแ‹ฐ แˆ›แŠจแˆ›แ‰ปแ‹ แ‹จแˆšแ‹ˆแˆตแ‹ต แŠ แŒˆแŠ“แŠ แŠ แ‹ซแ‹ญแ‹ฃแˆˆแˆแข

แˆ›แŠจแˆ›แ‰ป

แˆแŠ•แŒญ: hab.com

แŠ แˆตแ‰ฐแ‹ซแ‹จแ‰ต แ‹ซแŠญแˆ‰