Мне понадобилось следить за процессами в Windows и рисовать по ним графики, а также создавать оповещения о их различных статусах. Для этого я написал отдельное приложение на c# и сделал следующую связку:
1. На windows машинке работает служба telegraf, которая коллекционирует различные метрики, среди которых в ней включен плагин exec.
2. Плагин exec вызывает моё приложение, который отдаёт перечень процессов и их состояние в виде аргумента в telegraf.
3. Telegraf посылает метрики в БД influxdb.
4. Grafana берёт метрики из influxdb и далее рисуются графики и прикручиваются алерты...
Подробнее о используемых технологиях можно почитать тут:
Пример графика |
Как работает моё приложение...
Приложение вызывается с передачей к нему в качестве аргумента пути к CSV файлу, который внутри себя представляет примерно следующее:
C:\Program Files (x86)\ZKTime.Net\ZKTimeNet.exe,$ZKTimeNet
C:\OhmGraphite-0.10.0\OhmGraphite.exe,OhmGraphite
C:\Windows\system32\dns.exe,$DNS_server
C:\OhmGraphite-0.10.0\OhmGraphite.exe,OhmGraphite
C:\Windows\system32\dns.exe,$DNS_server
Первый столбец указывает на путь выполнения к файлу (регистр букв соблюдается, так что предварительно необходимо посмотреть в таск менеджере корректный путь к выполняемому процессу). Разделителем выступает символ , после которого указывается наименование выполняемого процесса. Для чего это нужно? Представим что в системе есть 2 браузера firefox, но они установленны в разные директории. Таким образом в описании можно указать для разных путей разные наименования. Например firefox1 и firefox2.
Обратите внимание на символ $ в начале наименования процесса. Таким образом я указываю, что за этим процессом необходимо следить и отсылать состояние его работы даже в том случае, когда он не запущен (допустим критические приложения). В случае наличия данного символа и отсутствия выполняемого процесса в системе - в метрике будет отдано значение -1, тогда как состояние запущенности процесса указывается метрикой, равной 1.
Качаем отсюда (https://github.com/constantinekg/getprocesses) 2 файла:
Файл getprocs.7z распаковываем, получаем getprocs.exe. Эти 2 файла (getprocs.exe и procs.csv) перемещаем в директорию с установленным telegraf'ом (C:\Program Files\telegraf).
Правим по образу и подобию CSV файл. Указываем необходимые для мониторинга процессы и т.д.
В конфиг telegraf добавляем следующее:
# Читает метрики в stdout
[[inputs.exec]]
commands = [
"C:/\"Program Files\"/telegraf/getprocs.exe C:/\"Program Files\"/telegraf/procs.csv",
]
[[inputs.exec]]
commands = [
"C:/\"Program Files\"/telegraf/getprocs.exe C:/\"Program Files\"/telegraf/procs.csv",
]
# Интервал сбора метрик
interval = "60s"
## Таймаут для ожидания выполнения процесса
timeout = "10s"
interval = "60s"
## Таймаут для ожидания выполнения процесса
timeout = "10s"
# Оставляем как есть
data_format = "influx"
data_type = "string"
[inputs.exec.tags]
data_format = "influx"
data_type = "string"
[inputs.exec.tags]
# Возможные теги для полученных метрик процессов (в моём случае мне достаточно знать что это метрики из офиса, но можно добавить что то своё дополнительно
location = "office"
location = "office"
После добавления необходимо перезапустить сервис telegraf в системе ну или перезагрузить компик...
Далее в графане необходимо будет создать какие угодно графики, а лерты и т.д. и т.п. Но об этом лучше почитать в мануалах по графане...
Комментариев нет:
Отправить комментарий