• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

domino & monitoring & zabbix & jmx

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
Доброго времени.

Хотел бы предложить уважаемой публике свои изыскания на предмет сабжа.

Исходные данные:
1)
2) Domino-JAddin
3) Domino-Statistic-Inspector
4) Немного теории
5) Как всегда немного обработать напильником в конце

и вуаля (в теории можно отдавать любую статистику, начиная от консольной show stat *, до данных пользовательских приложений...):

1591809946958.png

1591812745875.png
 

Вложения

  • JmxServer.zip
    1,8 МБ · Просмотры: 236
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
@oshmianski замечательно, есть загвоздка - индусы сломали RunJava в 10.0.1ФП4, в 11.0.1 не смотрел
 

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
@lmike
У меня domino@10.0.1FP4 (linux) как раз. На нем и экспериментирую - все работает. Может я каких java обновлений не ставил, только FP.

1591899468624.png
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
Bash:
user@proton:~$ locale
LANG=be_BY.UTF-8
LANGUAGE=be
LC_CTYPE="be_BY.UTF-8"
LC_NUMERIC="be_BY.UTF-8"
LC_TIME="be_BY.UTF-8"
LC_COLLATE="be_BY.UTF-8"
LC_MONETARY="be_BY.UTF-8"
LC_MESSAGES="be_BY.UTF-8"
LC_PAPER="be_BY.UTF-8"
LC_NAME="be_BY.UTF-8"
LC_ADDRESS="be_BY.UTF-8"
LC_TELEPHONE="be_BY.UTF-8"
LC_MEASUREMENT="be_BY.UTF-8"
LC_IDENTIFICATION="be_BY.UTF-8"
LC_ALL=
user@proton:~$ uname -r
5.3.0-53-generic
user@proton:~$ cat /etc/os-release
NAME="Linux Mint"
VERSION="19.3 (Tricia)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 19.3"
VERSION_ID="19.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.ubuntu.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=tricia
UBUNTU_CODENAME=bionic
user@proton:~$

Domino запускается нативно.

Можно прикрутить - вроде по возможностям построения графиков по-мощнее будет.

1591900298500.png
 
Последнее редактирование:

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
Нет, такой ошибки в логах нету.
 

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
@savl
Продолжительных замеров я не делал.

При только что запущенной экосистеме:

1592311321929.png


прикрепил к верхнему сообщению исходники проекта.
 
  • Нравится
Реакции: lmike

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
вопрос больше к теме - насколько это способно повлиять на работоспособность остального кода адынов
Это чисто его косяк, если ты в DDM выключишь сбор проб про железо, то это уйдет. CPU/Memory/Disk/Network.
Как я понимаю это оттуда лезет.

@oshmianski еще вопрос: почему не пробовал использовать вот это:
STATPUB_ENABLE=1
STATPUB_URI= {link}
STATPUB_METRIC_FORMAT=Domino.myserver.$Name$ $Value$
STATPUB_DELTA_METRIC_FORMAT=Domino.myserver.PerMinuteStats.$Name$ $Value$
STATPUB_METRIC_DELIMITER=$Newline$

По идее он всю выгрузку сам будет делать, остается только парсить. И сам мониоринг может на отдельном сервере без домино стоять.
 

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
@savl
Про STATPUB_* совсем не вкурсе. Попробую покурить на досуге, спасибо.

STATPUB_URI=

Я так понял, статистика будет отправляться по этому URI в следующем формате:

STATPUB_METRIC_FORMAT=Domino.myserver.$Name$ $Value$
STATPUB_DELTA_METRIC_FORMAT=Domino.myserver.PerMinuteStats.$Name$ $Value$
STATPUB_METRIC_DELIMITER=$Newline$

Это все здорово, но статистику мне нужно собирать и что главное накапливать в стороннем сервисе (в данном случае zabbix).
Мне кажется STATPUB_* немного из другой оперы.
 

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
да, но там интереснее единственный коммент - чел отправляет в Elasticsearch and Kibana.
может и у zabbix что-то можно прикрутить, так глубоко не копал.

а пишет "By default this is prepared to work with NewRelic. But you can configure it to use any kind of target!"
 
Последнее редактирование:

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
да, но там интереснее единственный коммент - чел отправляет в Elasticsearch and Kibana.
может и у zabbix что-то можно прикрутить, так глубоко не копал.
а пишет "By default this is prepared to work with NewRelic. But you can configure it to use any kind of target!"
Я полагаю дело про формат... так-то да, когда 10-ка только запускалась это был рекламный ход, мол н-е количество времени можно было бесплатно пользоваться, но по факту через 6 месяцев после выхода 10-ки NewRelic обнулил все ключи и сделал платный сервис сразу.
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Это чисто его косяк, если ты в DDM выключишь сбор проб про железо, то это уйдет. CPU/Memory/Disk/Network.
Как я понимаю это оттуда лезет.

@oshmianski еще вопрос: почему не пробовал использовать вот это:
STATPUB_ENABLE=1
STATPUB_URI= {link}
STATPUB_METRIC_FORMAT=Domino.myserver.$Name$ $Value$
STATPUB_DELTA_METRIC_FORMAT=Domino.myserver.PerMinuteStats.$Name$ $Value$
STATPUB_METRIC_DELIMITER=$Newline$

По идее он всю выгрузку сам будет делать, остается только парсить. И сам мониоринг может на отдельном сервере без домино стоять.
Поднял графану, поднял influxdb. Начал хидер прикручивать авторизации...
И.... Забросил ((
А так - натравливал вывод в агента а с него в любую иную бд/zabbix/etc...
 
04.06.2019
135
19
BIT
0
да, но там интереснее единственный коммент - чел отправляет в Elasticsearch and Kibana.
может и у zabbix что-то можно прикрутить, так глубоко не копал.

а пишет "By default this is prepared to work with NewRelic. But you can configure it to use any kind of target!"
О, круто, мы тоже так делаем. Эластик для логов и аналитики по ним. Заббикс для отслеживания серверных метрик
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Сделал свой вариант мониторинга домино. Поскольку вся инфраструктура мониторится из прометеус+графана - использовал эти инструменты для мониторинга и хранения метрик.
У меня такая схема - один сервер домино видит все остальные сервера и по этому принято решение собирать всю статистику с 1 сервера.
Был сделан агент, который вызывается по http прометеусом.
Конфиг прометеуса:
YAML:
#Dimino server statistics
  - job_name: '00_APP'
    metrics_path: /domstat/00   
    static_configs:
      - targets: ['192.168.10.223:80']

  - job_name: '06_APP'
    metrics_path: /domstat/06   
    static_configs:
      - targets: ['192.168.10.223:80']


  - job_name: '16_APP'
    metrics_path: /domstat/16   
    static_configs:
      - targets: ['192.168.10.223:80']
Номера - это регионы с серверами.
на сервере есть правило:
Description: Redirect to domino statistic
Type of rule: Substitution
Incoming URL pattern: /domstat/
Replacement pattern: /mh/dom_exporter.nsf/DomStats?OpenAgent&org=*

Код самого агента:
Visual Basic:
%REM
    Получение параметра статистики сервера используя вызовы Notes API.
    Некоторые параметры из Notes-клиента недоступны,
    для их получения нужно вызывать агент на сервере.
  
    Недокументированная API функция Cmovmem используется в этом примере
    под псевдонимом CopyBufferToString - она копирует содержимое буфера
    и возвращает данные в виде строки в LotusScript.
 
    Julian Robichaux -- http://www.nsftools.com
    VladSh https://codeby.net/threads/kak-opredelit-vremja-zapuska-tekuschego-servera.37025/#post-416119
    Только для x64 и для linux . Изменен указатель на double
%END REM
Option Public
Option Declare
Declare Function OSLockObject Lib "libnotes.so" (ByVal objectHandle As Long) As Double
Declare Function OSUnlockObject Lib "libnotes.so" (ByVal objectHandle As long) As Integer
Declare Function OSMemFree Lib "libnotes.so" (ByVal handle As Long) As Integer
'Недокументировання функция Notes API копирования буфера памяти в строку
Declare Sub CopyBufferToString Lib "libnotes.so" Alias "Cmovmem" (ByVal lpSrc As Double, ByVal lpDest As String, ByVal lSize As Long)
'Если нужно скопировать не строковые данные, используйте параметр lpDest As Any
Declare Sub CopyBuffer Lib "libnotes.so" Alias "Cmovmem" (ByVal lpSrc As Long, lpDest As Any, ByVal lSize As Long)
'Функция статистики с возможностью выбора определённого сервера
Declare Private Function NSFGetServerStats Lib "libnotes.so" Alias "NSFGetServerStats" (ByVal ServerName As LMBCS String, ByVal Facility As LMBCS String, ByVal StatName As LMBCS String, hRetTable As Long, nRetSize As Long) As Integer
'Функция статистики с форматированием вывода
Declare Function StatQueryTime Lib "libnotes.so" (ByVal facility As String, ByVal statName As Any, _
ByVal headerString As String, ByVal namePrefix As String, ByVal valuePrefix As String, ByVal lineSuffix As String, _
hRetTable As Long, nRetSize As Long) As Integer
Sub Initialize
    Dim s As New NotesSession
    Dim ret$,Srv$,Org$
    Dim doc As NotesDocument
    Dim v As NotesView
    Dim cl As NotesDocumentCollection
    
    Set doc=s.Documentcontext
    org=StrLeftBack(StrRightBack(doc.QUERY_STRING_DECODED(0)+"&","&org="),"&")
    
    Set v=s.Currentdatabase.Getview("Config")
    v.Autoupdate=False
    Set cl=v.Getalldocumentsbykey(org,true)
    Print "Content-type: text/plain"
    Set doc=cl.Getfirstdocument()
    While Not doc Is Nothing
        If doc.disable(0)<>"1" Then
            Srv=LCase(doc.Servers(0))
            Print |# server - |+srv
            ret=GetStatParam(srv)
            ret=Metric_Format(ret,srv)
            Print ret
        End If
        
        Set doc=cl.Getnextdocument(doc)
    Wend
End Sub



%REM
    Function GetStatParam
    Возвращает параметр статистики с указанного сервера с помощью NSFGetServerStats
%END REM
Function GetStatParam(sServerName As String) As String
    Dim nError As Integer
    Dim hRetTable As Long
    Dim nRetSize As Long
    Dim tmm
    tmm=GetThreadInfo(6)
    nError = NSFGetServerStats(sServerName, "", "", hRetTable, nRetSize)
    tmm=GetThreadInfo(6)-tmm
    If nError = 0 Then
        GetStatParam = GetBufferAsString(hRetTable, nRetSize, 0, True)
     End If
    GetStatParam=GetStatParam+Chr(10)+"dom_stat_error"+Chr(9) & nError
    GetStatParam=GetStatParam+Chr(10)+"dom_stat_ms"+Chr(9) & CStr(tmm)
End Function

%REM
    Копирование информации из буфера в строку
       используя недокументированную функцию Cmovmem API (вместо CopyMemory+ из kernel32).
 
    Параметры:
    * buffer    - адрес буфера
    * bufferLen - количество байт для копирования
    * offset    - точка отсчета начала копирования
    * bFreeMem  - индикатор? - очищать очищать буфер
        или оставить для дальнейшего использования
 
    Julian Robichaux -- http://www.nsftools.com
%END REM
Function GetBufferAsString(buffer As Long, bufferLen As Long, offset As Long, bFreeMem As Boolean) As String
    Dim pointer As Double
    Dim bufferText As String
 
    bufferText = Space(bufferLen)
    pointer = OSLockObject(buffer)
    
    Call CopyBufferToString(pointer, bufferText, bufferLen)
    Call OSUnlockObject(buffer)
 
    'Предупреждение: если после вызова OSMemFree вы попробуете заблокировать или
    'получить доступ к буферу, это приведет к сбою Notes/Domino
    If bFreeMem Then
        Call OSMemFree(buffer)
    End If
 
    GetBufferAsString = bufferText
End Function
%REM
    Function Metric_format
    Description: Форматирует метрики согласно стандарту Прометеуса
%END REM
Function Metric_format(ret$,node) As String
    Dim itemLines, metric$, metric_value,k As Integer,i_hist,tmp As Variant,htype$
    If InStr(node,"/")>0 Then node=StrLeft(node,"/")
    itemLines=FullTrim(Split(ret,Chr(10)))
    For k=0 To UBound(itemLines)
        htype=""
        i_hist=itemLines(k)
        metric=LCase(Replace(StrLeft(itemLines(k),Chr(9)),".","_"))
        metric=Replace(Replace(metric,"(",""),")","")
        metric=Replace(Replace(Replace(metric,"/","")," ","_"),"-","_")
        metric=Replace(metric,"__","_")
        metric_value=LCase(Replace(Trim(StrRight(itemLines(k),Chr(9))),Chr(127),""))
        
        i_hist=metric_value
        If instr(metric_value,".")>0 And InStr(metric_value,",")>0 Then '' Вот такая хрень летит... 2,123,44,555.88
            metric_value=Replace(metric_value,",","")   
        ElseIf InStr(metric_value,",")>0 then   
           metric_value=Replace(StrLeftBack(metric_value,","),",","")+"."+StrRightBack(metric_value,",")
        End if
        
        If Metric_Filter(metric) And Len(metric)>0 And InStr(metric_value,"ZE5")=0 And Not metric_value Like "*[!0-9.,e+]*"  then
'            If InStr(metric,"total")>0 Then  '' тут при желании ставится HELP и TYPE прометеуса
'                htype=|# TYPE |+metric+| counter|+Chr(10)
'            End If
            itemLines(k)="hcl_" & metric+|{srv="|+node+|",v="|+i_hist+|"} | & metric_value ' & "=="  & Format$(Replace(metric_value," ",""),"Standard")
        Else
            itemLines(k)=""
        End if
    Next
    itemLines=FullTrim(itemLines)
    ReDim Preserve itemLines(UBound(itemLines)+1)
    itemLines(UBound(itemLines))=|hcl_dom_stat_count{srv="|+node+|"} | & UBound(itemLines)
    Metric_format=Join(FullTrim(itemLines),Chr(10))
End Function

%REM
    Function Metric_Filter
    Description: Отсекаются не нужные метрики
%END REM
Function Metric_Filter(metric) As Boolean
    Static filter_Array
    If Not IsArray(filter_Array) Then
    filter_Array=Split("mem_pid_*,security_*,platform_process_*,domino_config*,update*_*,calendar_*,agent_*,adminp_*,mail_*,monitor_*,server_task*,server_administrators*",",")
    End if
    ForAll token In filter_Array
        If metric Like token Then Exit function
    End ForAll
    Metric_Filter=true
End Function

Результат - в скриншоте.
Screenshot_2.png


Настройка панели графаны:

JSON:
{
  "annotations": {
    "list": [
      {
        "builtIn": 1,
        "datasource": "-- 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": 0,
  "id": 3,
  "iteration": 1661895582588,
  "links": [],
  "liveNow": false,
  "panels": [
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "fieldConfig": {
        "defaults": {
          "color": {
            "mode": "thresholds"
          },
          "mappings": [
            {
              "options": {
                "0": {
                  "index": 0,
                  "text": "OK"
                }
              },
              "type": "value"
            }
          ],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 1
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 5,
        "w": 24,
        "x": 0,
        "y": 0
      },
      "id": 4,
      "options": {
        "orientation": "auto",
        "reduceOptions": {
          "calcs": [
            "lastNotNull"
          ],
          "fields": "",
          "values": false
        },
        "showThresholdLabels": true,
        "showThresholdMarkers": true
      },
      "pluginVersion": "8.4.1",
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "hcl_dom_stat_error",
          "interval": "",
          "legendFormat": "{{srv}}",
          "refId": "A"
        }
      ],
      "title": "Host Alive",
      "type": "gauge"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "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": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 5
      },
      "id": 10,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single",
          "sort": "none"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum by (srv) (hcl_domino_requests_per1minute_total{job=~\"$job\",srv=~\"$srv\"})",
          "interval": "",
          "legendFormat": "{{srv}}",
          "refId": "A"
        }
      ],
      "title": "domino_requests_per1minute_total",
      "type": "timeseries"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "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": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "decbytes"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 12,
        "y": 5
      },
      "id": 8,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single",
          "sort": "none"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum by (srv) (hcl_platform_network_total_networkbytespersec{job=~\"$job\",srv=~\"$srv\"})",
          "interval": "",
          "legendFormat": "{{srv}}",
          "refId": "A"
        }
      ],
      "title": "platform_network_total_networkbytespersec",
      "type": "timeseries"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "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",
            "lineStyle": {
              "fill": "solid"
            },
            "lineWidth": 1,
            "pointSize": 5,
            "scaleDistribution": {
              "type": "linear"
            },
            "showPoints": "auto",
            "spanNulls": true,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "short"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 0,
        "y": 13
      },
      "id": 6,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single",
          "sort": "none"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum by (srv) (hcl_http_currentconnections{job=~\"$job\",srv=~\"$srv\"})",
          "interval": "",
          "intervalFactor": 1,
          "legendFormat": "{{srv}}",
          "refId": "A"
        }
      ],
      "title": "http_currentconnections",
      "type": "timeseries"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "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": "auto",
            "spanNulls": false,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          },
          "unit": "short"
        },
        "overrides": []
      },
      "gridPos": {
        "h": 8,
        "w": 12,
        "x": 12,
        "y": 13
      },
      "id": 12,
      "options": {
        "legend": {
          "calcs": [],
          "displayMode": "list",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single",
          "sort": "none"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum ({__name__=~\"hcl_platform_logicaldisk_.*_pctutil\",job=~\"$job\",srv=~\"$srv\"}) by (srv)",
          "interval": "",
          "legendFormat": "{{srv}}",
          "refId": "A"
        }
      ],
      "title": "platform_logicaldisk_.*_pctutil_avg",
      "type": "timeseries"
    },
    {
      "datasource": {
        "type": "prometheus",
        "uid": "OyD3yi37z"
      },
      "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": "auto",
            "spanNulls": true,
            "stacking": {
              "group": "A",
              "mode": "none"
            },
            "thresholdsStyle": {
              "mode": "off"
            }
          },
          "mappings": [],
          "thresholds": {
            "mode": "absolute",
            "steps": [
              {
                "color": "green",
                "value": null
              },
              {
                "color": "red",
                "value": 80
              }
            ]
          }
        },
        "overrides": []
      },
      "gridPos": {
        "h": 9,
        "w": 23,
        "x": 0,
        "y": 21
      },
      "id": 14,
      "options": {
        "legend": {
          "calcs": [
            "lastNotNull",
            "max",
            "count"
          ],
          "displayMode": "table",
          "placement": "bottom"
        },
        "tooltip": {
          "mode": "single",
          "sort": "none"
        }
      },
      "targets": [
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum (hcl_platform_system_pctcombinedcpuutil{job=~\"$job\",srv=~\"$srv\"}) by (srv)",
          "interval": "",
          "legendFormat": "sys-{{srv}}",
          "refId": "A"
        },
        {
          "datasource": {
            "type": "prometheus",
            "uid": "OyD3yi37z"
          },
          "exemplar": true,
          "expr": "sum (hcl_platform_system_pcttotalusercpuutil{job=~\"$job\",srv=~\"$srv\"}) by (srv)",
          "hide": false,
          "interval": "",
          "legendFormat": "usr-{{srv}}",
          "refId": "B"
        }
      ],
      "title": "cpu user\\sys",
      "type": "timeseries"
    }
  ],
  "refresh": false,
  "schemaVersion": 35,
  "style": "dark",
  "tags": [],
  "templating": {
    "list": [
      {
        "current": {
          "selected": true,
          "text": [
            "00_APP",
            "56_APP",
            "66_APP",
            "38_APP",
            "35_APP",
            "92_APP"
          ],
          "value": [
            "00_APP",
            "56_APP",
            "66_APP",
            "38_APP",
            "35_APP",
            "92_APP"
          ]
        },
        "datasource": {
          "type": "prometheus",
          "uid": "OyD3yi37z"
        },
        "definition": "label_values(hcl_dom_stat_count, job)",
        "hide": 0,
        "includeAll": true,
        "label": "job",
        "multi": true,
        "name": "job",
        "options": [],
        "query": {
          "query": "label_values(hcl_dom_stat_count, job)",
          "refId": "StandardVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 1,
        "type": "query"
      },
      {
        "current": {
          "selected": true,
          "text": [
            "All"
          ],
          "value": [
            "$__all"
          ]
        },
        "datasource": {
          "type": "prometheus",
          "uid": "OyD3yi37z"
        },
        "definition": "label_values(hcl_dom_stat_count{job=~\"$job\"}, srv)",
        "hide": 0,
        "includeAll": true,
        "label": "srv",
        "multi": true,
        "name": "srv",
        "options": [],
        "query": {
          "query": "label_values(hcl_dom_stat_count{job=~\"$job\"}, srv)",
          "refId": "StandardVariableQuery"
        },
        "refresh": 1,
        "regex": "",
        "skipUrlSync": false,
        "sort": 0,
        "type": "query"
      }
    ]
  },
  "time": {
    "from": "now-3h",
    "to": "now"
  },
  "timepicker": {},
  "timezone": "",
  "title": "Domino Stats",
  "uid": "JZlwov77k",
  "version": 61,
  "weekStart": ""
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!