Add prom&grafana
parent
6f0d85600d
commit
f7cf301800
40
Makefile
40
Makefile
|
@ -1,18 +1,38 @@
|
||||||
cdir = $(shell pwd)
|
cdir = $(shell pwd)
|
||||||
|
|
||||||
up:
|
app-up:
|
||||||
docker-compose -f ./cicd/docker-compose.yml up -d --build
|
docker-compose -f ./cicd/docker-compose.yml up -d --build ; \
|
||||||
./cicd/init.sh
|
./cicd/init.sh
|
||||||
down: shutdown clean
|
|
||||||
|
|
||||||
shutdown:
|
app-down:
|
||||||
docker-compose -f ./cicd/docker-compose.yml down
|
docker-compose -f ./cicd/docker-compose.yml down ; \
|
||||||
sudo docker rmi $$(sudo docker images -a | grep '<none>' | awk '{print $$3}')
|
docker rmi $$(sudo docker images -a | grep '<none>' | awk '{print $$3}') ; \
|
||||||
|
rm -rf /opt/mysql_slave1/* ; \
|
||||||
|
rm -rf /opt/mysql_slave2/*
|
||||||
|
|
||||||
clean:
|
app-reload:
|
||||||
rm -rf /opt/mysql_master/* ; \
|
docker-compose -f ./cicd/docker-compose.yml down ; \
|
||||||
|
docker-compose -f ./cicd/docker-compose.yml up -d ; \
|
||||||
|
./cicd/init.sh
|
||||||
|
|
||||||
|
prom-up:
|
||||||
|
docker-compose -f ./test/monitor/docker-compose.yml up -d --build
|
||||||
|
|
||||||
|
prom-down:
|
||||||
|
docker-compose -f ./test/monitor/docker-compose.yml down ; \
|
||||||
|
docker rmi $$(sudo docker images -a | grep '<none>' | awk '{print $$3}')
|
||||||
|
|
||||||
|
up:
|
||||||
rm -rf /opt/mysql_slave1/* ; \
|
rm -rf /opt/mysql_slave1/* ; \
|
||||||
rm -rf /opt/mysql_slave2/* ; \
|
rm -rf /opt/mysql_slave2/* ; \
|
||||||
sudo docker rmi $$(sudo docker images -a | grep '<none>' | awk '{print $$3}')
|
docker-compose -f ./cicd/docker-compose.yml up -d --build ; \
|
||||||
|
./cicd/init.sh
|
||||||
|
docker-compose -f ./test/monitor/docker-compose.yml up -d --build ; \
|
||||||
|
|
||||||
.PHONY: up down
|
down:
|
||||||
|
docker-compose -f ./test/monitor/docker-compose.yml down ; \
|
||||||
|
docker-compose -f ./cicd/docker-compose.yml down ; \
|
||||||
|
docker rmi $$(sudo docker images -a | grep '<none>' | awk '{print $$3}')
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: app-up app-down app-reload prom-up prom-down up down
|
|
@ -58,138 +58,4 @@ services:
|
||||||
APP_DSN_PASS: app
|
APP_DSN_PASS: app
|
||||||
APP_DSN_BASE: app
|
APP_DSN_BASE: app
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
|
|
||||||
prometheus:
|
|
||||||
image: prom/prometheus:v2.24.1
|
|
||||||
container_name: prometheus
|
|
||||||
volumes:
|
|
||||||
- ./prometheus:/etc/prometheus
|
|
||||||
- prometheus_data:/prometheus
|
|
||||||
command:
|
|
||||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
|
||||||
- '--storage.tsdb.path=/prometheus'
|
|
||||||
- '--web.console.libraries=/etc/prometheus/console_libraries'
|
|
||||||
- '--web.console.templates=/etc/prometheus/consoles'
|
|
||||||
- '--storage.tsdb.retention.time=200h'
|
|
||||||
- '--web.enable-lifecycle'
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 9090
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
alertmanager:
|
|
||||||
image: prom/alertmanager:v0.21.0
|
|
||||||
container_name: alertmanager
|
|
||||||
volumes:
|
|
||||||
- ./alertmanager:/etc/alertmanager
|
|
||||||
command:
|
|
||||||
- '--config.file=/etc/alertmanager/config.yml'
|
|
||||||
- '--storage.path=/alertmanager'
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 9093
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
nodeexporter:
|
|
||||||
image: prom/node-exporter:v1.1.0
|
|
||||||
container_name: nodeexporter
|
|
||||||
volumes:
|
|
||||||
- /proc:/host/proc:ro
|
|
||||||
- /sys:/host/sys:ro
|
|
||||||
- /:/rootfs:ro
|
|
||||||
command:
|
|
||||||
- '--path.procfs=/host/proc'
|
|
||||||
- '--path.rootfs=/rootfs'
|
|
||||||
- '--path.sysfs=/host/sys'
|
|
||||||
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 9100
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
cadvisor:
|
|
||||||
image: gcr.io/cadvisor/cadvisor:v0.38.7
|
|
||||||
container_name: cadvisor
|
|
||||||
volumes:
|
|
||||||
- /:/rootfs:ro
|
|
||||||
- /var/run:/var/run:rw
|
|
||||||
- /sys:/sys:ro
|
|
||||||
- /var/lib/docker:/var/lib/docker:ro
|
|
||||||
#- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 8080
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
grafana:
|
|
||||||
image: grafana/grafana:7.4.0
|
|
||||||
container_name: grafana
|
|
||||||
volumes:
|
|
||||||
- grafana_data:/var/lib/grafana
|
|
||||||
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
|
|
||||||
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
|
|
||||||
environment:
|
|
||||||
- GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
|
|
||||||
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
|
|
||||||
- GF_USERS_ALLOW_SIGN_UP=false
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 3000
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
ports:
|
|
||||||
- "3001:3000"
|
|
||||||
|
|
||||||
pushgateway:
|
|
||||||
image: prom/pushgateway:v1.4.0
|
|
||||||
container_name: pushgateway
|
|
||||||
restart: unless-stopped
|
|
||||||
expose:
|
|
||||||
- 9091
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
caddy:
|
|
||||||
image: stefanprodan/caddy
|
|
||||||
container_name: caddy
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
- "9090:9090"
|
|
||||||
- "9093:9093"
|
|
||||||
- "9091:9091"
|
|
||||||
volumes:
|
|
||||||
- ./caddy:/etc/caddy
|
|
||||||
environment:
|
|
||||||
- ADMIN_USER=${ADMIN_USER:-admin}
|
|
||||||
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
|
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
|
||||||
- monitor-net
|
|
||||||
labels:
|
|
||||||
org.label-schema.group: "monitoring"
|
|
||||||
|
|
||||||
|
|
||||||
networks:
|
|
||||||
monitor-net:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
prometheus_data: { }
|
|
||||||
grafana_data: { }
|
|
|
@ -1,2 +1,34 @@
|
||||||
Встроен запуск prometeus, grafana и т.д.
|
#Полусинхронная репликация
|
||||||
Графана доступна на http://localhost:3001/
|
|
||||||
|
В результате выполнения ДЗ вы настроите полусинхронную репликацию, протестируете ее влияние на производительность системы и убедитесь, что теперь вы не теряете транзакции в случае аварии.
|
||||||
|
|
||||||
|
### В данном задании тренируются навыки:
|
||||||
|
- обеспечение отказоустойчивости проекта;
|
||||||
|
- администрирование MySQL;
|
||||||
|
- настройка репликации;
|
||||||
|
- проведение нагрузочных тестов.
|
||||||
|
|
||||||
|
### План выполнения ДЗ:
|
||||||
|
1) Настраиваем асинхронную репликацию.
|
||||||
|
2) Выбираем 2 любых запроса на чтения (в идеале самых частых и тяжелых по логике работы сайта) и переносим их на чтение со слейва.
|
||||||
|
3) Делаем нагрузочный тест по странице, которую перевели на слейв до и после репликации. Замеряем нагрузку мастера (CPU, la, disc usage, memory usage).
|
||||||
|
4) ОПЦИОНАЛЬНО: в качестве конфига, который хранит IP реплики сделать массив для легкого добавления реплики. Это не самый правильный способ балансирования нагрузки. Поэтому опционально.
|
||||||
|
5) Настроить 2 слейва и 1 мастер.
|
||||||
|
6) Включить row-based репликацию.
|
||||||
|
7) Включить GTID.
|
||||||
|
8) Настроить полусинхронную репликацию.
|
||||||
|
9) Создать нагрузку на запись в любую тестовую таблицу. На стороне, которой нагружаем считать, сколько строк мы успешно записали.
|
||||||
|
10) С помощью kill -9 убиваем мастер MySQL.
|
||||||
|
11) Заканчиваем нагрузку на запись.
|
||||||
|
12) Выбираем самый свежий слейв. Промоутим его до мастера. Переключаем на него второй слейв.
|
||||||
|
13) Проверяем, есть ли потери транзакций.
|
||||||
|
|
||||||
|
Результатом сдачи ДЗ будет в виде исходного кода на github и отчета в текстовом виде, где вы отразите как вы выполняли каждый из пунктов.
|
||||||
|
Критерии оценки: Оценка происходит по принципу зачет/незачет.
|
||||||
|
|
||||||
|
### Требования:
|
||||||
|
- В отчете корректно описано, как настроена репликация.
|
||||||
|
- 2 запроса переведено на чтение со слейва.
|
||||||
|
- Нагрузочное тестирование показало, что нагрузка перешла на слейв.
|
||||||
|
- В отчете описано как включить row-based репликацию и GTID
|
||||||
|
- Проведен эксперимент по потере и непотере транзакций при аварийной остановке master.
|
Binary file not shown.
After Width: | Height: | Size: 183 KiB |
|
@ -0,0 +1,27 @@
|
||||||
|
Встроен запуск prometeus, grafana и т.д.
|
||||||
|
Графана доступна на http://localhost:3001/
|
||||||
|
|
||||||
|
$ sudo docker run --rm -v /root/scripts:/scripts williamyeh/wrk -t1 -c10 -d5m --timeout 30s http://192.168.1.66:8080/search -s /scripts/post.lua -- debug true
|
||||||
|
Running 5m test @ http://192.168.1.66:8080/search
|
||||||
|
1 threads and 10 connections
|
||||||
|
Thread Stats Avg Stdev Max +/- Stdev
|
||||||
|
Latency 5.83s 1.74s 13.29s 77.58%
|
||||||
|
Req/Sec 3.57 4.74 30.00 82.50%
|
||||||
|
511 requests in 5.00m, 18.69MB read
|
||||||
|
Requests/sec: 1.70
|
||||||
|
Transfer/sec: 63.79KB
|
||||||
|
|
||||||
|
$ sudo make app-reload
|
||||||
|
...
|
||||||
|
...
|
||||||
|
...
|
||||||
|
$ sudo docker run --rm -v /root/scripts:/scripts williamyeh/wrk -t1 -c10 -d5m --timeout 30s http://192.168.1.66:8080/search -s /scripts/post.lua -- debug true
|
||||||
|
Running 5m test @ http://192.168.1.66:8080/search
|
||||||
|
1 threads and 10 connections
|
||||||
|
Thread Stats Avg Stdev Max +/- Stdev
|
||||||
|
Latency 32.12ms 31.59ms 561.62ms 90.65%
|
||||||
|
Req/Sec 373.34 147.37 610.00 68.45%
|
||||||
|
110834 requests in 5.00m, 433.90MB read
|
||||||
|
Non-2xx or 3xx responses: 110834
|
||||||
|
Requests/sec: 369.39
|
||||||
|
Transfer/sec: 1.45MB
|
|
@ -0,0 +1,117 @@
|
||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
|
||||||
|
prometheus:
|
||||||
|
image: prom/prometheus:v2.24.1
|
||||||
|
container_name: prometheus
|
||||||
|
volumes:
|
||||||
|
- ./prometheus:/etc/prometheus
|
||||||
|
- prometheus_data:/prometheus
|
||||||
|
command:
|
||||||
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||||
|
- '--storage.tsdb.path=/prometheus'
|
||||||
|
- '--web.console.libraries=/etc/prometheus/console_libraries'
|
||||||
|
- '--web.console.templates=/etc/prometheus/consoles'
|
||||||
|
- '--storage.tsdb.retention.time=200h'
|
||||||
|
- '--web.enable-lifecycle'
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 9090
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
alertmanager:
|
||||||
|
image: prom/alertmanager:v0.21.0
|
||||||
|
container_name: alertmanager
|
||||||
|
volumes:
|
||||||
|
- ./alertmanager:/etc/alertmanager
|
||||||
|
command:
|
||||||
|
- '--config.file=/etc/alertmanager/config.yml'
|
||||||
|
- '--storage.path=/alertmanager'
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 9093
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
nodeexporter:
|
||||||
|
image: prom/node-exporter:v1.1.0
|
||||||
|
container_name: nodeexporter
|
||||||
|
volumes:
|
||||||
|
- /proc:/host/proc:ro
|
||||||
|
- /sys:/host/sys:ro
|
||||||
|
- /:/rootfs:ro
|
||||||
|
command:
|
||||||
|
- '--path.procfs=/host/proc'
|
||||||
|
- '--path.rootfs=/rootfs'
|
||||||
|
- '--path.sysfs=/host/sys'
|
||||||
|
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 9100
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
cadvisor:
|
||||||
|
image: gcr.io/cadvisor/cadvisor:v0.38.7
|
||||||
|
container_name: cadvisor
|
||||||
|
volumes:
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /var/run:/var/run:rw
|
||||||
|
- /sys:/sys:ro
|
||||||
|
- /var/lib/docker:/var/lib/docker:ro
|
||||||
|
#- /cgroup:/cgroup:ro #doesn't work on MacOS only for Linux
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 8080
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:7.4.0
|
||||||
|
container_name: grafana
|
||||||
|
volumes:
|
||||||
|
- grafana_data:/var/lib/grafana
|
||||||
|
- ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
|
||||||
|
- ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources
|
||||||
|
environment:
|
||||||
|
- GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
|
||||||
|
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
|
||||||
|
- GF_USERS_ALLOW_SIGN_UP=false
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 3000
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
ports:
|
||||||
|
- "3001:3000"
|
||||||
|
|
||||||
|
pushgateway:
|
||||||
|
image: prom/pushgateway:v1.4.0
|
||||||
|
container_name: pushgateway
|
||||||
|
restart: unless-stopped
|
||||||
|
expose:
|
||||||
|
- 9091
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
caddy:
|
||||||
|
image: stefanprodan/caddy
|
||||||
|
container_name: caddy
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "9090:9090"
|
||||||
|
- "9093:9093"
|
||||||
|
- "9091:9091"
|
||||||
|
volumes:
|
||||||
|
- ./caddy:/etc/caddy
|
||||||
|
environment:
|
||||||
|
- ADMIN_USER=${ADMIN_USER:-admin}
|
||||||
|
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
|
||||||
|
restart: unless-stopped
|
||||||
|
labels:
|
||||||
|
org.label-schema.group: "monitoring"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
prometheus_data: { }
|
||||||
|
grafana_data: { }
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue