diff --git a/REPORT.md b/REPORT.md new file mode 100644 index 0000000..1206843 --- /dev/null +++ b/REPORT.md @@ -0,0 +1,85 @@ +# Docker Задание 2 +## Настройки Docker и создание скриптов +Для настройки файла контейнера докера воспользуемся следующим конфигом конфигом + +![image](assets/images/img.png) + +Cоздадим образ на основе файла Dockerfile и контекста: + +![image](assets/images/img_1.png) + +Конфиг docker-compose файла симулятора выглядит следующим образом: + +![image](assets/images/img_4.png) + +Конфиг docker-compose файла сервера выглядит следующим образом: + +![image](assets/images/img_5.png) + +Запустим симулятор через докер: + +![image](assets/images/img_6.png) + +Загрузим на докер-хаб: + +![image](assets/images/img_7.png) + +В результате на докер-хабе у нас появится json образ симулятора: + +![image](assets/images/img_8.png) + +А в самом докере у нас появится новый контейнер temperature: + +![image](assets/images/img_9.png) + +Запустим контейнер с mosquitto брокером (в результате запуска контейнера с симулятором датчика увидим подключение): + +![image](assets/images/img_2.png) + +А так же в самом докере появится контейнер с mosquitto брокером: + +![image](assets/images/img_12.png) + +После запуска симулятора можно будет отследить работу брокера: + +![image](assets/images/img_10.png) + +## Работа с PlayWithDocker + +С помощью команды загрузим все нужные файлы: + +```shell +$ git clone -b develop https://github.com/Chilipinas/DockerPractice.git +``` +### Клиент (Докер 1) +После запуска simulator.sh скрипта на виртуальной машине развернется три контейнера с разными симуляторами датчиков. Так же автоматически настроится ip route к серверу gateway. + +![image](assets/images/img_11.png) + +### Шлюз (Докер 2) +После запуска gateway.sh будет настроен путь к двум другим серверам, так же будет запущен контейнер с брокером + +![image](assets/images/img_13.png) + +### Сервер (Докер 3) +После запуска server.sh будет настроен ip route а так же запущены три контейнера + +![image](assets/images/img_14.png) + +![image](assets/images/img_15.png) + +![image](assets/images/img_16.png) + +Настройка базы данных grafana: + +![image](assets/images/img_17.png) + +Создам три панели с графиками для тока, давления и температуры как на картинке снизу: + +![image](assets/images/img_18.png) + +Если вывести все графики в один dashboard, то получится следующее: + +![image](assets/images/img_19.png) + +В конце копируем настройки mqtt.json в файл который будет залит на git. diff --git a/assets/images/img.png b/assets/images/img.png new file mode 100644 index 0000000..9f0bd4b Binary files /dev/null and b/assets/images/img.png differ diff --git a/assets/images/img_1.png b/assets/images/img_1.png new file mode 100644 index 0000000..bf9bac6 Binary files /dev/null and b/assets/images/img_1.png differ diff --git a/assets/images/img_10.png b/assets/images/img_10.png new file mode 100644 index 0000000..37ef015 Binary files /dev/null and b/assets/images/img_10.png differ diff --git a/assets/images/img_11.png b/assets/images/img_11.png new file mode 100644 index 0000000..c2023a1 Binary files /dev/null and b/assets/images/img_11.png differ diff --git a/assets/images/img_12.png b/assets/images/img_12.png new file mode 100644 index 0000000..6b88cc1 Binary files /dev/null and b/assets/images/img_12.png differ diff --git a/assets/images/img_13.png b/assets/images/img_13.png new file mode 100644 index 0000000..382c9a8 Binary files /dev/null and b/assets/images/img_13.png differ diff --git a/assets/images/img_14.png b/assets/images/img_14.png new file mode 100644 index 0000000..9589275 Binary files /dev/null and b/assets/images/img_14.png differ diff --git a/assets/images/img_15.png b/assets/images/img_15.png new file mode 100644 index 0000000..7847aef Binary files /dev/null and b/assets/images/img_15.png differ diff --git a/assets/images/img_16.png b/assets/images/img_16.png new file mode 100644 index 0000000..1a5e7bd Binary files /dev/null and b/assets/images/img_16.png differ diff --git a/assets/images/img_17.png b/assets/images/img_17.png new file mode 100644 index 0000000..79e4c07 Binary files /dev/null and b/assets/images/img_17.png differ diff --git a/assets/images/img_18.png b/assets/images/img_18.png new file mode 100644 index 0000000..dcbe961 Binary files /dev/null and b/assets/images/img_18.png differ diff --git a/assets/images/img_19.png b/assets/images/img_19.png new file mode 100644 index 0000000..c1fc41e Binary files /dev/null and b/assets/images/img_19.png differ diff --git a/assets/images/img_2.png b/assets/images/img_2.png new file mode 100644 index 0000000..5115742 Binary files /dev/null and b/assets/images/img_2.png differ diff --git a/assets/images/img_3.png b/assets/images/img_3.png new file mode 100644 index 0000000..9b9cfe4 Binary files /dev/null and b/assets/images/img_3.png differ diff --git a/assets/images/img_4.png b/assets/images/img_4.png new file mode 100644 index 0000000..db5abd2 Binary files /dev/null and b/assets/images/img_4.png differ diff --git a/assets/images/img_5.png b/assets/images/img_5.png new file mode 100644 index 0000000..6cd6251 Binary files /dev/null and b/assets/images/img_5.png differ diff --git a/assets/images/img_6.png b/assets/images/img_6.png new file mode 100644 index 0000000..c589665 Binary files /dev/null and b/assets/images/img_6.png differ diff --git a/assets/images/img_7.png b/assets/images/img_7.png new file mode 100644 index 0000000..c832622 Binary files /dev/null and b/assets/images/img_7.png differ diff --git a/assets/images/img_8.png b/assets/images/img_8.png new file mode 100644 index 0000000..1c59f8c Binary files /dev/null and b/assets/images/img_8.png differ diff --git a/assets/images/img_9.png b/assets/images/img_9.png new file mode 100644 index 0000000..2224c43 Binary files /dev/null and b/assets/images/img_9.png differ diff --git a/vms/client/simulator/Dockerfile b/vms/client/simulator/Dockerfile index e875bd0..cccd7b3 100644 --- a/vms/client/simulator/Dockerfile +++ b/vms/client/simulator/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.7 +FROM python:3.7-alpine WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt diff --git a/vms/client/simulator/docker-compose.yml b/vms/client/simulator/docker-compose.yml index b9e08bb..cb956c7 100644 --- a/vms/client/simulator/docker-compose.yml +++ b/vms/client/simulator/docker-compose.yml @@ -2,23 +2,23 @@ version: "3" services: temp_sensor: - image: antonaleks/data-simulator + image: chikomon/sensor-sim environment: - - SIM_HOST=192.168.1.1 + - SIM_HOST=192.168.19.1 - SIM_NAME=TIRCAHL24 - SIM_PERIOD=5 - SIM_TYPE=temperature pressure_sensor: - image: antonaleks/data-simulator + image: chikomon/sensor-sim environment: - - SIM_HOST=192.168.1.1 + - SIM_HOST=192.168.19.1 - SIM_NAME=PIRCAHL11 - SIM_PERIOD=10 - SIM_TYPE=pressure current_sensor: - image: antonaleks/data-simulator + image: chikomon/sensor-sim environment: - - SIM_HOST=192.168.1.1 + - SIM_HOST=192.168.19.1 - SIM_NAME=A0_CURRENT - SIM_PERIOD=1 - SIM_TYPE=current diff --git a/vms/client/simulator/simulator.sh b/vms/client/simulator/simulator.sh new file mode 100644 index 0000000..f75febe --- /dev/null +++ b/vms/client/simulator/simulator.sh @@ -0,0 +1,18 @@ +#!/bin/bash +IpA=192.168.19.10/24 +IpB=192.168.19.1 +IpC=192.168.8.0/24 + +echo -e "создаем новый адаптер с типом bridge и делаем связь адаптера с eth0: \n ip link add macvlan1 link eth0 type macvlan mode bridge" +ip link add macvlan1 link eth0 type macvlan mode bridge + +echo -e "добавляем ip адрес адаптеру: \n ip address add dev macvlan1 192.168.19.10/24" +ip address add dev macvlan1 $IpA + +echo -e "включаем адаптер: \n ip link set macvlan1 up" +ip link set macvlan1 up + +echo -e "добавляем маршрут к виртуалке С через виртуалку В: \n ip route add 192.168.8.0/24 via 192.168.19.1" +ip route add $IpC via $IpB + +docker-compose up -d \ No newline at end of file diff --git a/vms/gateway/gateway.sh b/vms/gateway/gateway.sh new file mode 100644 index 0000000..3c3852e --- /dev/null +++ b/vms/gateway/gateway.sh @@ -0,0 +1,20 @@ +#!/bin/bash +IpB1=192.168.19.1/24 +IpB2=192.168.8.1/24 + + +echo -e "создаем новый адаптер с типом bridge и делаем связь адаптера с eth0: \n ip link add macvlan1 link eth0 type macvlan mode bridge" +ip link add macvlan1 link eth0 type macvlan mode bridge +echo -e "добавляем ip адрес адаптеру: \n ip address add dev macvlan1 192.168.19.1/24" +ip address add dev macvlan1 $IpB1 +echo -e "включаем адаптер: \n ip link set macvlan1 up" +ip link set macvlan1 up + +echo -e "создаем новый адаптер с типом bridge и делаем связь адаптера с eth0: \n ip link add macvlan2 link eth0 type macvlan mode bridge" +ip link add macvlan2 link eth0 type macvlan mode bridge +echo -e "добавляем ip адрес адаптеру: \n ip address add dev macvlan2 192.168.8.1/24" +ip address add dev macvlan2 $IpB2 +echo -e "включаем адаптер: \n ip link set macvlan2 up" +ip link set macvlan2 up + +docker run -v $PWD/mosquitto:/mosquitto/config -p 1883:1883 --name broker --rm eclipse-mosquitto \ No newline at end of file diff --git a/vms/server/infra/grafana/provisioning/dashboards/mqtt.json b/vms/server/infra/grafana/provisioning/dashboards/mqtt.json index ec65ac0..5bef9ec 100644 --- a/vms/server/infra/grafana/provisioning/dashboards/mqtt.json +++ b/vms/server/infra/grafana/provisioning/dashboards/mqtt.json @@ -3,17 +3,14 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, "type": "dashboard" } ] @@ -21,9 +18,127 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, + "id": 2, "links": [], "liveNow": false, "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-YlBl" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Count", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 3, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.5.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "hide": false, + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "autogen", + "query": "SELECT mean(\"value\") FROM \"autogen\".\"mqtt_consumer\" WHERE $timeFilter GROUP BY time($__interval) fill(null)", + "rawQuery": false, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "sensors/current/A0_CURRENT" + } + ] + } + ], + "title": "A0_CURRENT", + "type": "timeseries" + }, { "datasource": { "type": "influxdb", @@ -35,6 +150,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -47,6 +164,9 @@ "viz": false }, "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { @@ -67,8 +187,7 @@ "mode": "absolute", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "red", @@ -80,9 +199,9 @@ "overrides": [] }, "gridPos": { - "h": 9, + "h": 8, "w": 12, - "x": 0, + "x": 12, "y": 0 }, "id": 2, @@ -90,13 +209,15 @@ "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, + "pluginVersion": "9.5.2", "targets": [ { "datasource": { @@ -106,7 +227,7 @@ "groupBy": [], "measurement": "mqtt_consumer", "orderByTime": "ASC", - "policy": "default", + "policy": "autogen", "refId": "A", "resultFormat": "time_series", "select": [ @@ -121,18 +242,101 @@ ], "tags": [ { - "key": "topic", + "key": "topic::tag", "operator": "=", - "value": "sensors/current/A0_CURRENT" + "value": "sensors/temp/TIRCAHL24" } ] } ], - "title": "Panel Title", + "title": "Temperature", "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 6, + "y": 8 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "9.5.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "autogen", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "sensors/pressure/PIRCAHL11" + } + ] + } + ], + "title": "Pressure", + "type": "stat" } ], - "schemaVersion": 35, + "refresh": "", + "schemaVersion": 38, "style": "dark", "tags": [], "templating": { @@ -144,7 +348,8 @@ }, "timepicker": {}, "timezone": "", - "title": "New dashboard", - "version": 0, + "title": "New dashboard1", + "uid": "dda7ec77-ef4c-4575-8b3c-bc4ca1bb7356", + "version": 2, "weekStart": "" } \ No newline at end of file diff --git a/vms/server/infra/server.sh b/vms/server/infra/server.sh new file mode 100644 index 0000000..3740a62 --- /dev/null +++ b/vms/server/infra/server.sh @@ -0,0 +1,16 @@ +#!/bin/bash +IpC=192.168.8.10/24 +IpB=192.168.8.1 +IpA=192.168.19.0/24 + +echo -e "создаем новый адаптер с типом bridge и делаем связь адаптера с eth0: \n ip link add macvlan1 link eth0 type macvlan mode bridge" +ip link add macvlan1 link eth0 type macvlan mode bridge +echo -e "добавляем ip адрес адаптеру: \n ip address add dev macvlan1 192.168.8.10/24" +ip address add dev macvlan1 192.168.8.10/24 +echo -e "включаем адаптер: \n ip link set macvlan1 up" +ip link set macvlan1 up # включаем адаптер + +echo -e "добавляем маршрут к виртуалке А через виртуалку В: \n ip route add 192.168.19.0/24 via 192.168.8.1" +ip route add 192.168.19.0/24 via 192.168.8.1 + +docker-compose up \ No newline at end of file diff --git a/vms/server/infra/telegraf/telegraf.conf b/vms/server/infra/telegraf/telegraf.conf index ddd8b05..9d3fd0c 100644 --- a/vms/server/infra/telegraf/telegraf.conf +++ b/vms/server/infra/telegraf/telegraf.conf @@ -8558,7 +8558,7 @@ password = "telegraf" # "telegraf/+/mem", # "sensors/#", # ] -servers = ["tcp://192.168.26.1:1883"] # адрес vm с mqtt-брокером +servers = ["tcp://192.168.8.1:1883"] # адрес vm с mqtt-брокером topics = [ "sensors/#" ]