![Grafana áá˝ááş áĄááŻáśá¸ááźáŻáá°áĄáŻááşá
áŻáá
áşá
áŻááᯠááááşááťáŹá¸áĄááźá
áş á
áŻááąáŹááşá¸áááşá¸ [+ docker ááŻáśáážááˇáşáĄáá° áĽáááŹ]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
Grafana ááᯠáĄááŻáśá¸ááźáŻá Promopult áááşááąáŹááşáážáŻáá˝ááş áĄááŻáśá¸ááźáŻáá°áĄáŻááşá áŻááťáŹá¸ááᯠááźááşááąáŹááşááźááşá¸áááŻááşáᏠááźáżááŹááᯠááťá˝ááşáŻááşáááŻáˇ áááşáááŻáˇááźáąáážááşá¸áá˛áˇááááşá¸á
- áĄááŻáśá¸ááźáŻáá°áĄááťáŹá¸áĄááźáŹá¸áážááˇáşáĄáá° áĄáŹá¸ááąáŹááşá¸áááˇáşáááşááąáŹááşáážáŻá áááşáááşáážáŻ 10 áážá áşááťáąáŹáşá á áá áşáá˝ááşáážááşááŻáśáááşáá°áĄááąáĄáá˝ááşáááşáá áşáááşá¸ááťáąáŹáşáá˝áŹá¸ááźáŽááźá áşáááşá áĄááŹá¸áá° áááşááąáŹááşáážáŻááťáŹá¸ááᯠááźáŻáśáá˝áąáˇáá°á¸áá°ááťáŹá¸áááş á¤áĄáááşá¸áĄááťááşá¸áááş áĄááŻáśá¸ááźáŻáá°ááťáŹá¸ áá áşááŹá¸áááşá¸ááźá áşáááş ááąá¸áá˝áŹááźáąáŹááşá¸ ááááŤáááşá
áá áşá áŻáśáá áşááąáŹááşáááş á áŹáááşá¸áá˝ááşá¸ááźáŽá¸ ááŹáá "áĄáááşááťáąáŹáşáá˝áŹá¸áááş" á áá áşá áŻáśáá áşááąáŹááşáááş á ááŹá¸áážááşááᯠááąáˇáá˝áŹá¸áᏠááźáąáŹááşááĄáá˝ááşá¸ ááąáŹááşáááş áážá áşááźáááş áážááşááŻáśáááşáá˛áˇáááşá áá áşá áŻáśáá áşááąáŹááşá áá˝áąáážááşá¸ááąáŹááşááŹááś áááŻááşááśáá°ááŹááźáŽá¸ áá áşá áŻáśáá áşááąáŹááşá áĄáááŹá¸ááŹááąá¸áááşá . áá áşááŻááťááşá¸ááŽáááą áĄááźááşáááşá¸áááşá¸ááááşááąáŹááşá¸áááşá
ááťá˝ááşáŻááşáááŻáˇáá˛áˇáááŻáˇ ááźáŽá¸ááŹá¸ááąáŹ ááąááŹáĄáá˝á˛ááťáŹá¸ááźááˇáşá ááŻáśá¸á á˝á˛áá°áá áşáŚá¸ááťááşá¸á áŽá áĄááźáŻáĄáá°ááᯠáááŻááşá¸ááźáŹá¸á áááşááźáŹááźáŽá¸ áĄááąá¸á áŹá¸ ááŻáśá¸ááźááşááťááşááťáŹá¸ááťááźááşá¸áááş áĄáááášááŹááşááážáááąá áááŻáˇááąáŹáş ááąááşááąá áŽá¸ááźáąáŹááşá¸ááťáŹá¸ááᯠáááşá¸á áŹá¸ááźáŽá¸ áĄáŻááşá áŻááźáŽá¸ááťáŹá¸áážááˇáş ááŻááşááąáŹááşáááşáážáŹ ááźá áşáááŻááşááźáŽá¸ áááŻáĄááşááŤáááşá á፠ááťá˝ááşááąáŹáşáááŻáˇ ááááşááŻááşááŹááŤá
áĄááťááşá¸ááťáŻááş
- áĄá áŻáááŻááşáá˝á˛ááźááşá¸á áááşááźáŹáážáŻáááŻáᏠááŹáá˛á ááŹááźáąáŹááˇáş áááŻáĄááşááŹáá˛á
- SQL áá˝ááş áĄááŻáśá¸ááźáŻáá°áážááşááŻáśáááşáááˇáşááĄáááŻááş áĄá áŻáĄááąá¸ááťáŹá¸ááźáŻááŻááşáááşá¸á
- áĄáá˝á˛ááťáŹá¸ááᯠáááşáááŻáˇáá˝ážá˛ááźáąáŹááşá¸ááááşáááşá¸á .
áá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸áá°áááş áĄáááşáááşá¸áážááˇáş SQL áá˝ááş áááşá¸ááᯠáááşáááŻáˇááŻááşááąáŹááşááááşááᯠáááşááááźáŽá¸ááŤá ááąáŹááşááŻáśá¸áĄáááŻááşá¸áááŻáˇ ááťáąáŹáşáá˝áŹá¸ááŤá
áá áĄá áŻáááŻááşáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸áá°áááş áĄáááşáááşá¸á áĄáááşááźáąáŹááˇáş áááŻáĄááşááááşá¸á
áĄá áŻáĄáá˝á˛áˇáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸áááş ááŻáśá¸á á˝á˛áá°ááťáŹá¸á ááá°ááŽááąáŹáĄáŻááşá áŻááťáŹá¸ (áĄáŻááşá áŻááťáŹá¸) ááᯠáážááŻááşá¸áážááşááźááşá¸áĄááąáŤáş áĄááźáąááśáááˇáş áááşá¸áááşá¸áá áşááŻááźá áşáááşá áĄááťáŹá¸á áŻáážáŹá ááŻáśá¸á á˝á˛áá°á áááşááąáŹááşáážáŻááᯠá áááşáĄááŻáśá¸ááźáŻáááˇáş áááşááášááááş áááŻáˇáááŻááş ááĄáááŻááş áĄáŻááşá áŻááťáŹá¸áá˝á˛áˇááąáˇáážááááşá á¤ááąááŹáážá áĄááŻáśá¸ááźáŻáá°á áááşáááşá¸ááᯠáá˝ááşááťááşááŹá¸ááźáŽá¸á áááşá¸áááş áážáŻááşáá˝áąá¸ááąáŹ áá˝á˛ááźááşá¸á áááşááźáŹáážáŻááᯠááŻááşááąáŹááşáááŻááşáááˇáşáĄááąáŤáş áĄááźáąááśáááˇáş áá˝ážááşááźááťááşáá áşáᯠááźá áşááąááŤááźáŽá áĽáááŹáĄáŹá¸ááźááˇáş ááŹá¸áááşáááşá
- áááşáá°áážáŻááťááşáááşáááş áĄááŻáśá¸ááźáŻáá°ááááşáááşá¸ááᯠáááşáááŻáˇáĄááťááŻá¸áááşááąáŹááşá áąááááşá¸á
- áĄááşášááŤáááş áááŻáˇáááŻááş áááşááąáŹááşáážáŻáá áşááŻááŻááᯠáĄááŻáśá¸ááźáŻááźááşá¸áááş áá áşáááşááŹáĄááąáŤáş áááşáááŻáˇáĄááťááŻá¸áááşááąáŹááşáááşá
- Feature X áááş ááááşáážá áşáážááˇáş áážááŻááşá¸áážááşááŤá áááşá¸á áááşáááşá¸ááᯠáááşáááŻáˇáĄááťááŻá¸áááşááąáŹááşáá˛áˇááááşá¸á
2. SQL áá˝ááş áĄá áŻáĄááąá¸ááťáŹá¸ áááşáááŻáˇááźáŻááŻááşááááşáááşá¸á
ááąáŹááşá¸ááŤá¸á áĄáá˝ááşáĄá áŹá¸áážááˇáş ááŹáááşáĄáááááŹá¸áááş á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇá áĄááťááşáĄáááşáĄá á áşáĄáážááşááᯠááąá¸ááąáŹááşáááş áá˝ááˇáşáááźáŻá፠- á ááşá¸áááşáĄáážááŻááşááŻáśá¸áá˝ááş áá áşáážá áşáá˝á˛áĄáá˝ááş á áŹáááşá¸áĄááşá¸ááťáŹá¸ááŤáážááááş- ááŻáśá¸á á˝á˛áá° 1200 áážááˇáş 53 áĄááąáŹááşá¸áĄáááşááťáŹá¸á á¤ááąááŹááźááˇáş áááşáá áŹá¸áááŻááşá áąáááşáĄáá˝ááşá áááşáááŻááşáááŻááşááśá áŹá¸áááŻááşáááˇáş MySQL áážááˇáş Grafana ááźááˇáş docker ááŻáśáá áşááŻááᯠááťá˝ááşáŻááşáááŻáˇ ááźááşáááşááŹá¸ááŤáááşá GitHub áááŻáˇáááˇáşááşáááş ááąáŹááşá¸ááŤá¸ááĄááŻáśá¸áá˝ááşááźá áşáááşá
á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş áááŻá¸áážááşá¸ááąáŹ áĽáááŹááᯠáĄááŻáśá¸ááźáŻá áĄá áŻáĄáá˝á˛áˇááťáŹá¸ áááşááŽá¸ááźááşá¸ááᯠáááŻááşááźááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáá˝ááş áááşááąáŹááşáážáŻáá áşááŻáážááááşáᯠáá°áááźááŤá ááŻáˇá áĄááŻáśá¸ááźáŻáá°ááťáŹá¸áááş áááşááąáŹááşáážáŻááťáŹá¸ááąáŤáşáá˝ááş áážááşááŻáśáááşááźáŽá¸ áá˝áąááŻáśá¸á á˝á˛ááźáááşá áĄááťáááşááźáŹááŹáááşáážááˇáşáĄááťáž ááŻáśá¸á á˝á˛áá°ááťáŹá¸ áááşáááˇáşáá˝áŹá¸ááŤáááşá ááŻáśá¸á á˝á˛áá°ááťáŹá¸áááş áááşááťážááźáŹááźáŹ áááşááąáŹááşáážáŻáážááˇáş áááşááąáŹááşáážáŻááᯠáĄááŻáśá¸ááźáŻáááˇáş áááááážááˇáş ááŻáááááá˝ááş áááşááťáž ááťááşáá˝áŹá¸áááşááᯠááťá˝ááşáŻááşáááŻáˇ áááááŻááŤáááşá
á¤ááąá¸áá˝ááşá¸ááťáŹá¸áááŻááźáąáááŻáááşá áážááşááŻáśáááşáááˇáşááá˝ááş áĄá áŻáĄáá˝á˛áˇááťáŹá¸áááşááąáŹááşáááş áááŻáĄááşááŤáááşá áá ááşááááŻááşá¸ ááŻááşááťá ááááşááźááˇáş ááŻááşááąáŹááşáážáŻááťáŹá¸ááᯠáááŻááşá¸ááŹááŤáááşá ááŻááşááťá ááááşááťáŹá¸áĄá áŹá¸á áĄáąáŹáşááŤááťáŹá¸á á áŹáááşá¸áá˝ááşá¸áááťáŹá¸ áááŻáˇáááŻááş áĄááťáááşáážááˇáşáááşá ááşááąáááˇáş áĄááźáŹá¸ááŻááşááąáŹááşáážáŻáá áşááŻáᯠáážááááŻááşááŤáááşá
áááĽáŽá¸ááąááŹ
ááá°ááŹááťáŹá¸ááᯠMySQL áá˝ááş ááźáŻááŻááşááŹá¸ááąáŹáşáááşá¸ áĄááźáŹá¸ááąáŹ DBMS áĄáá˝ááş ááááŹáááşáážáŹá¸ááąáŹ ááźáŹá¸ááŹá¸áážáŻááťáŹá¸ ááážááááˇáşááŤá
áĄááŻáśá¸ááźáŻáá°ááťáŹá¸áááŹá¸ â áĄááŻáśá¸ááźáŻáá°ááťáŹá¸
ááŻáśá¸á
á˝á˛áá°áĄááŻááşááŽ
áážááşááŻáśáááşáááşá
á˝á˛
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
ááŻááşááťá ááááşáááŹá¸ - áá˝áąááąá¸ááťáąáážáŻ-
ááŻáśá¸á
á˝á˛áá°áĄááŻááşááŽ
ááąáˇá
ážá˛
áážáąááąáŤááťá¸
1
2019-01-02
11
1
2019-02-22
11
2
2019-02-12
12
3
2019-02-11
13
3
2019-03-11
13
4
2019-03-01
14
4
2019-03-02
14
ááťá˝ááşáŻááşáááŻáˇáááş áĄááŻáśá¸ááźáŻáá° ááŻááşáá˝ááşáážáŻááťáŹá¸áážááˇáş áážááşááŻáśáááşáááˇáşáááşáĄáŹá¸ááŻáśá¸ááᯠáá˝áąá¸ááťááşáááş-
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
ááááş:
ááŻáśá¸á
á˝á˛áá°áĄááŻááşááŽ
ááąáˇá
ážá˛
áážááşááŻáśáááşáááşá
á˝á˛
1
2019-01-02
2019-01-02
1
2019-02-22
2019-01-02
2
2019-02-12
2019-02-01
3
2019-02-11
2019-02-10
3
2019-03-11
2019-02-10
4
2019-03-01
2019-03-01
4
2019-03-02
2019-03-01
ááťá˝ááşáŻááşáááŻáˇáááş áĄá áŻáĄááąá¸ááťáŹá¸ááᯠáááťáŹá¸áĄáááŻááş áááşááąáŹááşáᏠáááşá á˝á˛ááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠáááťáŹá¸áĄááźá áş ááźáąáŹááşá¸áá˛ááąá¸ááŤáááşá
DATE_FORMAT(Date, '%Y-%m')áááŻáĄááŻáśá¸ááźáŻáá°áááş ááááşááťážáááşááźá˝áá˛áˇáááşááᯠááťá˝ááşáŻááşáááŻáˇáááááŻáááş - á¤áááşáážáŹ áá˝áąááŻááşáááˇáşááážááˇáş áážááşááŻáśáááşáááˇáşáááźáŹá¸ áá˝áŹááźáŹá¸ááťááşááźá áşáááşá MySQL áá˝ááş ááŻááşááąáŹááşááťááş PERIOD_DIFF() ááŤáážááááş - áážá áşáááźáŹá¸ áá˝áŹááźáŹá¸ááťááşá ááąá¸ááźááşá¸áážáŻáááŻáˇ PERIOD_DIFF() ááᯠáááˇáşááŤ-
SELECT
b.userId,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
ááŻáśá¸á
á˝á˛áá°áĄááŻááşááŽ
áá˝áąááąáŹááşá¸ááśáááˇáşá
áážááşááŻáśáááşáááşá
á˝á˛
ááááŻááşá¸ááźáŹá¸ááŹá¸áážáŻ
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
3
2019-02
2019-02
0
3
2019-03
2019-02
1
4
2019-03
2019-03
0
4
2019-03
2019-03
0
áá ááşáĄááŻáśá¸ááźáŻáá°ááťáŹá¸ááᯠááťá˝ááşáŻááşáááŻáˇááąáá˝ááşáááş - BillingMonthá RegistrationMonth áážááˇáş MonthsDiff ááźááˇáş áážááşáááşá¸ááťáŹá¸ááᯠáĄáŻááşá áŻáá˝á˛áˇááŤáááşá
SELECT
COUNT(DISTINCT(b.userId)) AS UsersCount,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
GROUP BY BillingMonth, RegistrationMonth, MonthsDiff
ááááş:
áĄááŻáśá¸ááźáŻáá°áĄááąáĄáá˝ááş
áá˝áąááąáŹááşá¸ááśáááˇáşá
áážááşááŻáśáááşá
ááááŻááşá¸ááźáŹá¸ááŹá¸áážáŻ
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
1
2019-03
2019-02
1
1
2019-03
2019-03
0
áááşáááŤááŽá ááąááąáŹáşááŤááŽáážááˇáş áááşááááŻáˇáá˝ááş áĄááŻáśá¸ááźáŻáá°áĄáá áşáá áş áŚá¸ ááąáŤáşááŹáááş - MonthsDiff = 0á áááşáááŤááŽááž ááŻáśá¸á á˝á˛áá°áá áşáŚá¸áááş ááąááąáŹáşááŤááŽáá˝ááş áááşááźá˝á á˝áŹááŤáááşáá˛áˇáááş - RegistrationMonth = 2019-01á BillingMonth = 2019-02 áážááˇáş ááąááąáŹáşááŤááŽáááž áĄááŻáśá¸ááźáŻáá°áá áşáŚá¸áááşáááşá¸ áááşááá˝ááş áĄááŻáśá¸ááźáŻáá˛áˇáááşá
ááźáŽá¸ááŹá¸ááąáŹááąááŹáĄáá˝á˛áá˝ááşá ááŻáśá áśááťáŹá¸ááᯠáááŹááĄáááŻááşá¸ áááŻáááźááşáááŻááşáááşá
Grafana áááŻáˇ áĄá áŻáĄááąá¸ááťáŹá¸ááᯠáááşáááŻáˇááźáąáŹááşá¸áá˝ážáąáˇááááşáááşá¸á
áĄá áŻáĄááąá¸ááťáŹá¸áá˝á˛áˇáááşá¸ááᯠááťá˝ááşáŻááşáááŻáˇááąáˇááŹáá˛áˇááźáŽá¸ááźá áşááąáŹáşáááşá¸ áážááşáááşá¸ááťáŹá¸á á˝áŹáážáááąáŹáĄá፠áááşá¸áááŻáˇáááŻáá˝á˛ááźááşá¸á áááşááźáŹáááş ááá˝ááşáá°ááąáŹáˇááŤá áážááşáááşá¸ááťáŹá¸ááᯠExcel áááŻáˇ áááşáááŻáˇáááŻááşááźáŽá¸ áážáááąáŹáááŹá¸ááťáŹá¸ááᯠáá˝á˛áˇá ááşá¸áááŻááşááąáŹáşáááşá¸á á¤áááşáážáŹ ááťá˝ááşáŻááşáááŻáˇááááşá¸áááşá¸áááŻááşááŤá
áĄá áŻáĄááąá¸ááťáŹá¸ááᯠáĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşááąáŹ ááááşáĄááźá áş ááźááááŻááşááŤáááşá .
áááşá¸áááŻááŻááşááąáŹááşáááşá ááťá˝ááşáŻááşáááŻáˇáááş Grafana áĄáá˝ááş áááˇáşááťáąáŹáşááąáŹ ááąáŹáşáááşáááŻáˇ ááąááŹááᯠááźáąáŹááşá¸áááş áĄááźáŹá¸ááąá¸áá˝ááşá¸áá áşááŻááᯠááąáŤááşá¸áááˇáşáááş-
SELECT
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## ŃŃаŃŃĐš СапŃĐžŃ, вОСвŃаŃаŃŃиК кОгОŃŃŃ
SELECT
COUNT(DISTINCT(b.userId)) AS Users,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
WHERE
u.RegistrationDate BETWEEN '2018-01-01' AND CURRENT_DATE
GROUP BY
BillingMonth, RegistrationMonth, MonthsDiff
) AS s
GROUP BY
time_sec, metric
ááźáŽá¸ááąáŹáˇ ááąááŹáá˝áąááᯠGrafana áážáŹ áááşáááşá
ááááşáá áşááŻááĽááᏠ:
![Grafana áá˝ááş áĄááŻáśá¸ááźáŻáá°áĄáŻááşá
áŻáá
áşá
áŻááᯠááááşááťáŹá¸áĄááźá
áş á
áŻááąáŹááşá¸áááşá¸ [+ docker ááŻáśáážááˇáşáĄáá° áĽáááŹ]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
áááşááááşááźááˇáşááááŤ-
â áááˇáşáá˝ááşááźá°ááŹááąáŤáşáá˝ááş áááşááŻáśá¸áááŻááşááąáŹ MySQL áážááˇáş Grafana ááŤááąáŹ docker ááŻáśááźá áşáááşá ááąááŹááąáˇá áşáá˝ááş 2018 áááşáááŤááŽááž 2019 ááŻáážá áş áá°áááŻááşááĄáá áá áşáážá áşáá˝á˛ááźáŹ áááŻááşááźááąááŹááŤáážáááźáŽá¸ááźá áşáááşá
ááášááážáááŤá á¤ááŻáśáá˝ááş áááˇáşááąááŹááᯠáááşáááŻááşááŤáááşá
P.S. SQL áážá áĄá áŻáĄááąá¸áá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸áááŻááşáᏠááąáŹááşá¸ááŤá¸ááťáŹá¸-
source: www.habr.com
