diff --git a/source/_static/grafana_add_source1.png b/source/_static/grafana_add_source1.png
new file mode 100644
index 0000000..b2a7808
Binary files /dev/null and b/source/_static/grafana_add_source1.png differ
diff --git a/source/_static/grafana_add_source2.png b/source/_static/grafana_add_source2.png
new file mode 100644
index 0000000..1d27438
Binary files /dev/null and b/source/_static/grafana_add_source2.png differ
diff --git a/source/_static/grafana_add_source3.png b/source/_static/grafana_add_source3.png
new file mode 100644
index 0000000..ee08198
Binary files /dev/null and b/source/_static/grafana_add_source3.png differ
diff --git a/source/_static/grafana_add_source4.png b/source/_static/grafana_add_source4.png
new file mode 100644
index 0000000..43fa2fc
Binary files /dev/null and b/source/_static/grafana_add_source4.png differ
diff --git a/source/_static/grafana_dashboard1.png b/source/_static/grafana_dashboard1.png
new file mode 100644
index 0000000..ace137e
Binary files /dev/null and b/source/_static/grafana_dashboard1.png differ
diff --git a/source/_static/grafana_dashboard2.png b/source/_static/grafana_dashboard2.png
new file mode 100644
index 0000000..22c30f9
Binary files /dev/null and b/source/_static/grafana_dashboard2.png differ
diff --git a/source/_static/grafana_dashboard3.png b/source/_static/grafana_dashboard3.png
new file mode 100644
index 0000000..6b789ed
Binary files /dev/null and b/source/_static/grafana_dashboard3.png differ
diff --git a/source/_static/grafana_dashboard4.png b/source/_static/grafana_dashboard4.png
new file mode 100644
index 0000000..733500b
Binary files /dev/null and b/source/_static/grafana_dashboard4.png differ
diff --git a/source/_static/grafana_dashboard5.png b/source/_static/grafana_dashboard5.png
new file mode 100644
index 0000000..b3e16f9
Binary files /dev/null and b/source/_static/grafana_dashboard5.png differ
diff --git a/source/_static/grafana_link.png b/source/_static/grafana_link.png
new file mode 100644
index 0000000..6308ac9
Binary files /dev/null and b/source/_static/grafana_link.png differ
diff --git a/source/_static/grafana_login.png b/source/_static/grafana_login.png
new file mode 100644
index 0000000..d47089f
Binary files /dev/null and b/source/_static/grafana_login.png differ
diff --git a/source/_static/grapana_explore1.png b/source/_static/grapana_explore1.png
new file mode 100644
index 0000000..2ba7dbe
Binary files /dev/null and b/source/_static/grapana_explore1.png differ
diff --git a/source/_static/grapana_explore2.png b/source/_static/grapana_explore2.png
new file mode 100644
index 0000000..f4ce57d
Binary files /dev/null and b/source/_static/grapana_explore2.png differ
diff --git a/source/_static/grapana_explore3.png b/source/_static/grapana_explore3.png
new file mode 100644
index 0000000..3f4e55c
Binary files /dev/null and b/source/_static/grapana_explore3.png differ
diff --git a/source/_static/prometheus.png b/source/_static/prometheus.png
new file mode 100644
index 0000000..0174599
Binary files /dev/null and b/source/_static/prometheus.png differ
diff --git a/source/_static/prometheus_targets.png b/source/_static/prometheus_targets.png
new file mode 100644
index 0000000..186e289
Binary files /dev/null and b/source/_static/prometheus_targets.png differ
diff --git a/source/_static/prometheus_uptime.png b/source/_static/prometheus_uptime.png
new file mode 100644
index 0000000..d32e9ff
Binary files /dev/null and b/source/_static/prometheus_uptime.png differ
diff --git a/source/_static/ss14.grafana.json b/source/_static/ss14.grafana.json
new file mode 100644
index 0000000..5f8d9e6
--- /dev/null
+++ b/source/_static/ss14.grafana.json
@@ -0,0 +1,606 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__elements": [],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "9.0.2"
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "stat",
+ "name": "Stat",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "table",
+ "name": "Table",
+ "version": ""
+ },
+ {
+ "type": "panel",
+ "id": "timeseries",
+ "name": "Time series",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "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"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "graphTooltip": 1,
+ "id": null,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": true,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 22,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "dtdhms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 6,
+ "x": 0,
+ "y": 1
+ },
+ "id": 8,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "9.0.2",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "expr": "robust_server_uptime",
+ "interval": "",
+ "legendFormat": "",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "uptime",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "A"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "dark-green",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 6,
+ "w": 18,
+ "x": 6,
+ "y": 1
+ },
+ "id": 4,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "hidden",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "9.0.2",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "expr": "rate(robust_server_curtick[1m])",
+ "legendFormat": "tps",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "TPS",
+ "type": "timeseries"
+ }
+ ],
+ "title": "uptime / tps",
+ "type": "row"
+ },
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 1
+ },
+ "id": 14,
+ "panels": [],
+ "title": "Online",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 20,
+ "gradientMode": "opacity",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "stepAfter",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "A"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "#07dfff",
+ "mode": "fixed",
+ "seriesBy": "last"
+ }
+ },
+ {
+ "id": "unit",
+ "value": "none"
+ },
+ {
+ "id": "min",
+ "value": 0
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "B"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "dthms"
+ },
+ {
+ "id": "custom.lineInterpolation",
+ "value": "linear"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 11,
+ "w": 24,
+ "x": 0,
+ "y": 2
+ },
+ "id": 2,
+ "options": {
+ "legend": {
+ "calcs": [
+ "firstNotNull",
+ "lastNotNull",
+ "mean",
+ "min",
+ "max"
+ ],
+ "displayMode": "table",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "robust_player_count",
+ "instant": false,
+ "legendFormat": "Игроков",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "expr": "ss14_round_length",
+ "hide": false,
+ "interval": "1m",
+ "legendFormat": "Время раунда",
+ "range": true,
+ "refId": "B"
+ }
+ ],
+ "title": "Игроков на сервере",
+ "type": "timeseries"
+ },
+ {
+ "collapsed": true,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 13
+ },
+ "id": 20,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Received: positive \nTransmitted: negative",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 25,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineStyle": {
+ "fill": "solid"
+ },
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "never",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green"
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "net_recv"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "semi-dark-blue",
+ "mode": "fixed"
+ }
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byFrameRefID",
+ "options": "net_send"
+ },
+ "properties": [
+ {
+ "id": "color",
+ "value": {
+ "fixedColor": "semi-dark-purple",
+ "mode": "fixed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 24,
+ "x": 0,
+ "y": 14
+ },
+ "id": 12,
+ "options": {
+ "legend": {
+ "calcs": [
+ "mean"
+ ],
+ "displayMode": "table",
+ "placement": "right"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "expr": "rate(robust_net_recv_bytes[$__rate_interval])",
+ "legendFormat": "recv",
+ "range": true,
+ "refId": "net_recv"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "editorMode": "code",
+ "expr": "rate(robust_net_sent_bytes[$__rate_interval]) * -1",
+ "hide": false,
+ "legendFormat": "trans",
+ "range": true,
+ "refId": "net_send"
+ }
+ ],
+ "title": "Network Received / Transmitted",
+ "type": "timeseries"
+ }
+ ],
+ "title": "Network",
+ "type": "row"
+ }
+ ],
+ "refresh": false,
+ "schemaVersion": 36,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": []
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "1m"
+ ]
+ },
+ "timezone": "",
+ "title": "Space Station 14",
+ "uid": "MoajuA54k",
+ "version": 29,
+ "weekStart": ""
+}
diff --git a/source/index.rst b/source/index.rst
index 92f4c39..9875f72 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -10,3 +10,4 @@
build-and-run
build-for-prod
prod-advenced
+ metrics
diff --git a/source/metrics.rst b/source/metrics.rst
new file mode 100644
index 0000000..3f12ab1
--- /dev/null
+++ b/source/metrics.rst
@@ -0,0 +1,395 @@
+Сбор метрик
+###########
+
+Данная инструкция описывает способ сбора метрик **Space Station 14**, таких как
+текущий онлайн игроков или нагрузка Сети с использованием програмного стека
+**Grafana** и **Prometheus**.
+
+.. note::
+ - Предполагается, что читатель имеет базовые навыки работы с **Linux** системами;
+ - Предполагается, что читатель умеет подключаться к удалённому серверу через **SSH**;
+ - В качестве удалённой операционной системы будет использоваться **Debian 12**.
+
+Prometheus
+**********
+
+Для сбора метрик, нам понадобится установить **Prometheus**.
+
+**Prometheus** - это бесплатное программное обеспечение, используемое для
+мониторинга и оповещения о событиях.
+
+Принцип его работы достаточно прост: раз в 15 секунд (по-умолчанию), "прометей"
+опрашивает указанные в настройках точки интереса и собирает по ним данные в свою
+встроенную базу данных.
+
+
+Установка и настройка
+=====================
+
+1. Открываем |link_prometheus|
+
+2. Выбираем операционную систему **Linux**
+
+3. Скачиваем архив с отметкой LTS *(Long term support, Долгосрочная поддержка)*
+ на удалённый сервер
+
+ .. code-block:: bash
+
+ cd /root
+ wget 'https://github.com/prometheus/prometheus/releases/download/v2.45.5/prometheus-2.45.5.linux-amd64.tar.gz'
+
+4. Распаковываем полученный архив
+
+ .. code-block:: bash
+
+ mkdir /root/prometheus
+ tar -xf /root/prometheus-2.45.5.linux-amd64.tar.gz -C /root/prometheus --strip-component=1
+ mkdir /root/prometheus/data
+
+5. Открываем файл ``/root/prometheus/prometheus.yml`` и заменяем всё его
+ содержимое на следующее
+
+ .. code-block:: yaml
+
+ global:
+ scrape_interval: 15s
+ evaluation_interval: 15s
+
+ scrape_configs:
+ - job_name: 'ss14'
+ static_configs:
+ - targets: ['127.0.0.1:9001']
+
+6. Создаём новый файл ``/etc/systemd/system/prometheus.service`` и записываем
+ туда следующее
+
+ .. code-block::
+
+ [Unit]
+ Description=Prometheus Service
+ After=syslog.target network.target
+
+ [Service]
+ Type=simple
+ WorkingDirectory=/root/prometheus
+ ExecStart=/root/prometheus/prometheus \
+ --config.file=/root/prometheus/prometheus.yml \
+ --storage.tsdb.path=/root/prometheus/data \
+ --storage.tsdb.retention.time=14d \
+ --web.listen-address="0.0.0.0:9000"
+ Restart=on-failure
+
+ [Install]
+ WantedBy=multi-user.target
+
+ .. warning::
+ | Т.к. **Prometheus** не предназначен для долговременного хранения метрик,
+ крайне не рекомендуется указывать срок хранения данных более 14 дней
+ | (параметр ``--storage.tsdb.retention.time``).
+
+ .. warning::
+ | **Обратите внимание:**
+ | Мы указали в параметре ``--web.listen-address`` широковещательный адрес
+ ``0.0.0.0``. В инструкции это сделано намеренно для удобной проверки
+ правильной настройки всех систем.
+ | На своём сервере, после всех проверок, вы **ОБЯЗАНЫ** заменить адрес
+ ``0.0.0.0`` на ``127.0.0.1``!
+
+7. Выполняем повторное считываение сервисов и запускаем сервис **Prometheus**
+
+ .. code-block:: bash
+
+ systemctl daemon-reload
+ systemctl start prometheus
+
+Если всё сделано правильно, по адресу ``http://ip-вашего-сервера:9000/``
+будет отображаться интерфейс "прометея".
+
+.. image:: _static/prometheus.png
+ :alt: Панель управления Prometheus
+
+
+Настройка игрового сервера
+==========================
+
+Открываем на редактирование конфигурационный файл игрового сервера
+``server_config.toml`` и добавляем туда следующую секцию
+
+.. code-block:: toml
+
+ [metrics]
+ enabled = true
+ host = "127.0.0.1"
+ port = 9001
+ runtime = false
+
+.. note::
+ Если игровой сервер был запущен, то перезапустите его для применения новых
+ настроек
+
+Если всё сделано правильно, то в панеле "прометея", в разделе "Startus" -> "Targets"
+будет отображаться "зелёным" наша точка интереса.
+
+.. image:: _static/prometheus_targets.png
+ :alt: Успешно настроенная точка сбора метрик
+
+
+Мы так же можем проверить собранные данные, перейдя в панеле "прометея" в раздел
+"Graph" и выбрав любую метрику. Например, ``robust_server_uptime`` показывает
+сколько времени (в секундах) "живёт" игровой сервер
+
+.. image:: _static/prometheus_uptime.png
+ :alt: График "жизни" игрового сервера
+
+
+Grafana
+*******
+
+Смотреть метрики через интерфейс **Prometheus** можно, но не удобно. Удобнее
+будет следить за метриками через другое бесплатное програмное обеспечение
+**Grafana**.
+
+
+База данных
+===========
+
+Начнём с настройки доступов к базе данных **Postgres**.
+
+1. Подключаемся к интерактивной postgres-консоли
+
+ .. code-block:: bash
+
+ sudo -u postgres psql
+
+ Дальнейшие команды будут выполняться в ней.
+
+2. Создаём базу данных
+
+ .. code-block:: sql
+
+ CREATE DATABASE grafana;
+
+3. Добавляем к новосозданной БД пользователя, указываем ему пароль
+ и предоставляем все права на базу:
+
+ .. code-block:: sql
+
+ CREATE USER grafana_user WITH encrypted password 'ChangeMePlease';
+ GRANT ALL PRIVILEGES ON DATABASE grafana TO grafana_user;
+ ALTER DATABASE grafana OWNER TO grafana_user;
+
+4. Выходим из интерактивной postgres-консоли
+
+ .. code-block::
+
+ \q
+
+
+Установка
+=========
+
+1. Открываем |link_grafana|
+
+2. В поле "Edition" **обязательно** указываем значение "OSS"
+
+3. Нас интересует строчка загрузки из раздела "Standalone Linux Binaries"
+
+ .. image:: _static/grafana_link.png
+ :alt: Строка загрузки Grafana
+
+4. Скачиваем архив на удалённом сервере
+
+ .. code-block:: bash
+
+ cd /root
+ wget 'https://dl.grafana.com/oss/release/grafana-11.0.0.linux-amd64.tar.gz'
+
+5. Распаковываем архив
+
+ .. code-block:: bash
+
+ tar -xf /root/grafana-11.0.0.linux-amd64.tar.gz -C /root
+ mv /root/grafana-v11.0.0 /root/grafana
+
+6. Подготавливаем папки
+
+ .. code-block:: bash
+
+ mkdir -p /root/grafana/data/log
+ mkdir -p /root/grafana/data/plugins
+
+7. Копируем "дефолтный" файл конфигурации
+
+ .. code-block:: bash
+
+ cp /root/grafana/conf/defaults.ini /root/grafana/conf/grafana.ini
+
+8. Открываем на редактирование новый конфигурационный файл
+ ``/root/grafana/conf/grafana.ini``
+
+ 1. В секции ``[paths]`` указываем абсолютные пути к данным, логам и прочему
+
+ .. code-block:: ini
+
+ [paths]
+ data = /root/grafana/data
+ logs = /root/grafana/data/log
+ plugins = /root/grafana/data/plugins
+ provisioning = /root/grafana/conf/provisioning
+
+ 2. В секции ``[database]`` указываем данные подключения к БД Postgres
+
+ .. code-block:: ini
+
+ [database]
+ type = postgres
+ host = 127.0.0.1:5432
+ name = grafana
+ user = grafana_user
+ password = """ChangeMePlease"""
+
+ 3. В секции ``[security]`` указываем логин и пароль администратора
+ по-умолчанию
+
+ .. code-block:: ini
+
+ [security]
+ admin_user = Voomra
+ admin_password = ChangeMePlease
+
+9. Создаём новый файл ``/etc/systemd/system/grafana.service`` и записываем туда
+ следующее
+
+ .. code-block::
+
+ [Unit]
+ Description=Grafana Service
+ After=syslog.target network.target
+ After=postgresql.service
+
+ [Service]
+ Type=simple
+ WorkingDirectory=/root/grafana
+ ExecStart=/root/grafana/bin/grafana-server --config=/root/grafana/conf/grafana.ini
+ Restart=on-failure
+
+ [Install]
+ WantedBy=multi-user.target
+
+10. Выполняем повторное считываение сервисов и запускаем сервис **Grafana**
+
+ .. code-block:: bash
+
+ systemctl daemon-reload
+ systemctl start grafana
+
+Если всё сделано было правильно, то по адресу ``http://ip-вашего-сервера:3000/``
+будет отображаться форма входа в панель управления **Grafana**
+
+.. image:: _static/grafana_login.png
+ :alt: Форма входа в панель управления Grafana
+
+
+Настройка
+=========
+
+Добалвение источника данных
+---------------------------
+
+1. Перейти в "Connection" -> "Data sources"
+
+ .. image:: _static/grafana_add_source1.png
+ :alt: Меню добавление нового источника данных
+
+2. Нажимаем на кнопку "Add data source"
+
+3. Выбираем "Prometheus"
+
+ .. image:: _static/grafana_add_source2.png
+ :alt: Источник данных "Prometheus"
+
+4. В поле "Connection" указываем адрес **Prometheus** ``http://127.0.0.1:9000``
+
+ .. image:: _static/grafana_add_source3.png
+ :alt: Адрес Prometheus
+
+5. | Внизу страницы нажимаем на кнопку "Save & test".
+ | Если появилась "зелёное" оповещение, значит всё хорошо.
+
+ .. image:: _static/grafana_add_source4.png
+ :alt: Проверка источника данных
+
+
+Исследование в источнике данных
+-------------------------------
+
+После того как был добавлен источник данных, с ним уже можно работать. Для этого
+переходим в окно "Explore"
+
+.. image:: _static/grapana_explore1.png
+ :alt: Explore
+
+Дальше, в поле "Metrics" вбиваем нужную метрику, например
+``robust_server_uptime`` и жмем на синюю кнопку обновления в правом верхнем углу
+
+.. image:: _static/grapana_explore2.png
+ :alt: Выбор метрики
+
+После этого внизу отобразиться график с данными
+
+.. image:: _static/grapana_explore3.png
+ :alt: График метрики
+
+
+Добавляем Dashboard
+-------------------
+
+Вручную помнить все метрики и тем более вручную их искать в источнике данных
+совсем не удобное занятие. Гораздо удобнее будет настроить панель с необходимым
+набором графиков.
+
+.. note::
+ Объяснение типов метрик, видов графиков и прочей информации, что поможет
+ вам самостоятельно создавать панели "с нуля" выходит за рамки данной статьи.
+ А потому здесь будет только предоставлена готовая панель с уже минимальным
+ набором игровых метрик.
+
+1. Переходим в "Dashboards"
+
+ .. image:: _static/grafana_dashboard1.png
+
+2. Выбираем "New" -> "Import"
+
+ .. image:: _static/grafana_dashboard2.png
+
+3. | Загружаем готовую панельку
+ | :download:`ss14.grafana.json <_static/ss14.grafana.json>`
+
+ .. image:: _static/grafana_dashboard3.png
+
+4. Указываем источник данных
+
+ .. image:: _static/grafana_dashboard4.png
+
+5. Нажимаем кнопку "Import"
+
+В итоге получаем готовую панель со следующими метриками:
+
+- Uptime игрового сервера
+- TPS (Tick per second)
+- Онлайн игроков
+- Длительность раунда
+- Сетевой трафик
+
+.. image:: _static/grafana_dashboard5.png
+ :alt: Панель метрик Space Station 14
+
+.. -----------------------------------------------------------------------------
+
+.. |link_prometheus| raw:: html
+
+ страницу загрузки
+
+.. |link_grafana| raw:: html
+
+ страницу загрузки