feat: Сбор метрик
BIN
source/_static/grafana_add_source1.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
source/_static/grafana_add_source2.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
source/_static/grafana_add_source3.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
source/_static/grafana_add_source4.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
source/_static/grafana_dashboard1.png
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
source/_static/grafana_dashboard2.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
source/_static/grafana_dashboard3.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
source/_static/grafana_dashboard4.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
source/_static/grafana_dashboard5.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
source/_static/grafana_link.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
source/_static/grafana_login.png
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
source/_static/grapana_explore1.png
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
source/_static/grapana_explore2.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
source/_static/grapana_explore3.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
source/_static/prometheus.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
source/_static/prometheus_targets.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
source/_static/prometheus_uptime.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
606
source/_static/ss14.grafana.json
Normal file
@@ -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": ""
|
||||||
|
}
|
||||||
@@ -10,3 +10,4 @@
|
|||||||
build-and-run
|
build-and-run
|
||||||
build-for-prod
|
build-for-prod
|
||||||
prod-advenced
|
prod-advenced
|
||||||
|
metrics
|
||||||
|
|||||||
395
source/metrics.rst
Normal file
@@ -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
|
||||||
|
|
||||||
|
<a href="https://prometheus.io/download/" target="_blank">страницу загрузки</a>
|
||||||
|
|
||||||
|
.. |link_grafana| raw:: html
|
||||||
|
|
||||||
|
<a href="https://grafana.com/grafana/download?edition=oss" target="_blank">страницу загрузки</a>
|
||||||