diff --git a/grafana/detmir-dlp-management-dashboard.json b/grafana/detmir-dlp-management-dashboard.json index 544b653..e4277b2 100644 --- a/grafana/detmir-dlp-management-dashboard.json +++ b/grafana/detmir-dlp-management-dashboard.json @@ -41,7 +41,7 @@ }, "id": 1, "options": { - "content": "### Руководительская ИБ-сводка\n- **Верхний ряд** показывает текущий уровень внимания: открытые кейсы, тяжёлые инциденты и новые сработки.\n- **Средний блок** отвечает на вопрос: где накапливается риск и по кому он концентрируется.\n- **Нижний блок** показывает, что требует действий прямо сейчас: активные кейсы, свежие инциденты и проблемы доставки telemetry.\n- Для технического разбора есть отдельный экран по ссылке **Технический ИБ-дашборд**.", + "content": "### Руководительская ИБ-сводка\n- **Верхний ряд** показывает текущий уровень внимания: открытые кейсы, тяжёлые инциденты и новые сработки.\n- **Средний блок** отвечает на вопрос: где накапливается риск и по кому он концентрируется.\n- **Нижний блок** показывает, что требует действий прямо сейчас: активные кейсы, свежие инциденты и проблемы доставки данных.\n- Для технического разбора есть отдельный экран по ссылке **Технический ИБ-дашборд**.", "mode": "markdown" }, "title": "Как читать экран", @@ -431,7 +431,7 @@ }, "targets": [ { - "query": "all = from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)\n |> set(key: \"series\", value: \"Все сработки\")\n\nhigh = from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\" and (r.severity == \"high\" or r.severity == \"critical\"))\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)\n |> set(key: \"series\", value: \"High/Critical\")\n\nunion(tables: [all, high])\n |> group(columns:[\"series\"])", + "query": "all = from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)\n |> set(key: \"series\", value: \"Все сработки\")\n\nhigh = from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\" and (r.severity == \"high\" or r.severity == \"critical\"))\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)\n |> set(key: \"series\", value: \"Высокие и критичные\")\n\nunion(tables: [all, high])\n |> group(columns:[\"series\"])", "refId": "A" } ], @@ -484,7 +484,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.signal_type}" + "displayName": "${__field.labels.signal_type_ru}" }, "overrides": [] }, @@ -509,7 +509,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> group(columns:[\"signal_type\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with signal_type_ru: if r.signal_type == \"self_test\" then \"Самопроверка\" else if r.signal_type == \"print_job\" then \"Печать\" else if r.signal_type == \"clipboard_copy\" then \"Буфер обмена\" else if r.signal_type == \"file_operation\" then \"Файловая операция\" else if r.signal_type == \"email_outbound\" then \"Исходящая почта\" else if r.signal_type == \"browser_domain\" then \"Сайт\" else if r.signal_type == \"unknown\" then \"Неизвестно\" else r.signal_type }))\n |> group(columns:[\"signal_type_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], @@ -523,7 +523,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.verdict}" + "displayName": "${__field.labels.verdict_ru}" }, "overrides": [] }, @@ -548,7 +548,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_review\" and r._field == \"count\")\n |> group(columns:[\"verdict\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_review\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with verdict_ru: if r.verdict == \"false_positive\" then \"Ложное срабатывание\" else if r.verdict == \"incident\" then \"Инцидент\" else if r.verdict == \"allowed\" then \"Разрешено\" else if r.verdict == \"review_needed\" then \"Нужен разбор\" else if r.verdict == \"pending\" then \"Ожидает решения\" else r.verdict }))\n |> group(columns:[\"verdict_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], @@ -562,7 +562,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "Endpoint send failures", + "displayName": "Ошибки отправки", "unit": "none" }, "overrides": [] @@ -589,7 +589,7 @@ "refId": "A" } ], - "title": "Проблемы доставки telemetry за 7 дней", + "title": "Проблемы доставки данных за 7 дней", "type": "timeseries" }, { diff --git a/grafana/detmir-dlp-security-dashboard.json b/grafana/detmir-dlp-security-dashboard.json index b992f80..ae2b839 100644 --- a/grafana/detmir-dlp-security-dashboard.json +++ b/grafana/detmir-dlp-security-dashboard.json @@ -36,7 +36,7 @@ }, "id": 1, "options": { - "content": "### Как читать этот экран\n- **Верхний блок** отвечает на вопрос: сколько было сработок и в каком состоянии разбор.\n- **Средний блок** показывает характер сработок: типы, серьёзность, пользователи, verdict review.\n- **Нижний блок** нужен для оперативной работы ИБ: динамика по дням, ошибки отправки collectors, последние кейсы и последние инциденты.\n- Если нужно быстро понять, есть ли проблема прямо сейчас, смотрите на **открытые кейсы**, **high/critical**, **send failures** и **последние инциденты**.", + "content": "### Как читать этот экран\n- **Верхний блок** отвечает на вопрос: сколько было сработок и в каком состоянии разбор.\n- **Средний блок** показывает характер сработок: типы, серьёзность, пользователи и итоги разбора.\n- **Нижний блок** нужен для оперативной работы ИБ: динамика по дням, ошибки отправки коллекторов, последние кейсы и последние инциденты.\n- Если нужно быстро понять, есть ли проблема прямо сейчас, смотрите на **открытые кейсы**, **высокие/критичные**, **ошибки отправки** и **последние инциденты**.", "mode": "markdown" }, "title": "ИБ: как смотреть этот дашборд", @@ -156,7 +156,7 @@ "refId": "A" } ], - "title": "High/Critical за 7 дней", + "title": "Высокие и критичные за 7 дней", "type": "stat" }, { @@ -398,7 +398,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.severity}" + "displayName": "${__field.labels.severity_ru}" }, "overrides": [] }, @@ -423,7 +423,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> group(columns:[\"severity\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with severity_ru: if r.severity == \"critical\" then \"Критичный\" else if r.severity == \"high\" then \"Высокий\" else if r.severity == \"medium\" then \"Средний\" else if r.severity == \"low\" then \"Низкий\" else if r.severity == \"info\" then \"Инфо\" else r.severity }))\n |> group(columns:[\"severity_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], @@ -437,7 +437,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.signal_type}" + "displayName": "${__field.labels.signal_type_ru}" }, "overrides": [] }, @@ -462,7 +462,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_signal\" and r._field == \"count\")\n |> group(columns:[\"signal_type\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_signal\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with signal_type_ru: if r.signal_type == \"self_test\" then \"Самопроверка\" else if r.signal_type == \"print_job\" then \"Печать\" else if r.signal_type == \"clipboard_copy\" then \"Буфер обмена\" else if r.signal_type == \"file_operation\" then \"Файловая операция\" else if r.signal_type == \"email_outbound\" then \"Исходящая почта\" else if r.signal_type == \"browser_domain\" then \"Сайт\" else if r.signal_type == \"unknown\" then \"Неизвестно\" else r.signal_type }))\n |> group(columns:[\"signal_type_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], @@ -515,7 +515,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.verdict}" + "displayName": "${__field.labels.verdict_ru}" }, "overrides": [] }, @@ -540,11 +540,11 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_review\" and r._field == \"count\")\n |> group(columns:[\"verdict\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_review\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with verdict_ru: if r.verdict == \"false_positive\" then \"Ложное срабатывание\" else if r.verdict == \"incident\" then \"Инцидент\" else if r.verdict == \"allowed\" then \"Разрешено\" else if r.verdict == \"review_needed\" then \"Нужен разбор\" else if r.verdict == \"pending\" then \"Ожидает решения\" else r.verdict }))\n |> group(columns:[\"verdict_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], - "title": "Review verdicts за 30 дней", + "title": "Итоги разбора за 30 дней", "type": "bargauge" }, { @@ -554,7 +554,7 @@ }, "fieldConfig": { "defaults": { - "displayName": "${__field.labels.action}" + "displayName": "${__field.labels.action_ru}" }, "overrides": [] }, @@ -579,7 +579,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_rule\" and r._field == \"count\")\n |> group(columns:[\"action\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_rule\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with action_ru: if r.action == \"allow\" then \"Разрешить\" else if r.action == \"alert\" then \"Оповестить\" else if r.action == \"block\" then \"Блокировать\" else if r.action == \"review\" then \"На разбор\" else if r.action == \"notify\" then \"Уведомить\" else if r.action == \"log\" then \"Логировать\" else if r.action == \"deny\" then \"Запретить\" else r.action }))\n |> group(columns:[\"action_ru\"])\n |> sum()\n |> sort(columns:[\"_value\"], desc:true)", "refId": "A" } ], @@ -603,7 +603,7 @@ "mode": "normal" } }, - "displayName": "${__field.labels.severity}" + "displayName": "${__field.labels.severity_ru}" }, "overrides": [] }, @@ -625,7 +625,7 @@ }, "targets": [ { - "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> group(columns:[\"severity\"])\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)", + "query": "from(bucket: \"aw_metrics\")\n |> range(start: -30d)\n |> filter(fn: (r) => r._measurement == \"aw_dlp_incident\" and r._field == \"count\")\n |> map(fn: (r) => ({ r with severity_ru: if r.severity == \"critical\" then \"Критичный\" else if r.severity == \"high\" then \"Высокий\" else if r.severity == \"medium\" then \"Средний\" else if r.severity == \"low\" then \"Низкий\" else if r.severity == \"info\" then \"Инфо\" else r.severity }))\n |> group(columns:[\"severity_ru\"])\n |> aggregateWindow(every: 1d, fn: sum, createEmpty: false)", "refId": "A" } ], @@ -666,7 +666,7 @@ "refId": "A" } ], - "title": "Endpoint collector: send failures", + "title": "Ошибки отправки endpoint-коллектора", "type": "timeseries" }, { @@ -703,7 +703,7 @@ "refId": "A" } ], - "title": "Endpoint collector: queue depth", + "title": "Очередь endpoint-коллектора", "type": "timeseries" }, { @@ -740,7 +740,7 @@ "refId": "A" } ], - "title": "FileOps collector: send failures", + "title": "Ошибки отправки FileOps-коллектора", "type": "timeseries" }, { @@ -802,10 +802,10 @@ "host": "Хост", "case_id": "Кейс", "status": "Статус", - "severity": "Severity", + "severity": "Уровень", "assignee": "Исполнитель", "title": "Заголовок", - "incident_id": "Incident ID", + "incident_id": "ID инцидента", "has_forensics": "DFIR" } } @@ -873,12 +873,12 @@ "host": "Хост", "username": "Пользователь", "signal_type": "Тип сигнала", - "severity": "Severity", - "action": "Action", + "severity": "Уровень", + "action": "Действие", "message": "Сообщение", "document_name": "Документ", "printer_name": "Принтер", - "incident_verdict": "Verdict" + "incident_verdict": "Вердикт" } } }