Obtener process list con Powershell y Json en Windows con Telegraf

Generaremos una nueva database en influx, un usuario y sus permisos correspondientes para almacenar los datos.

> CREATE DATABASE CTX_VDI
> USE CTX_VDI
> CREATE USER "VDI" WITH PASSWORD 'VDI'
> GRANT ALL ON CTX_VDI TO VDI

Agregar la database a Grafana del tipo InfluxDB y rellenamos los campos necesarios.

Configura Data Source Grafana para InfluxDB

Configuraremos la database, usuario y contraseña en el fichero de telegraf.conf de nuestras máquinas.

[[outputs.influxdb]]
  ## The full HTTP or UDP URL for your InfluxDB instance.
  ##
  ## Multiple URLs can be specified for a single cluster, only ONE of the
  ## urls will be written to each interval.
  # urls = ["unix:///var/run/influxdb.sock"]
  # urls = ["udp://127.0.0.1:8089"]
  urls = ["http://IP_INFLUXDB:8086"]  ###*********IP O NOMBRE SERVIDOR INFLUX
  
  ## The target database for metrics; will be created as needed.
  database = "CTX_VDI"
  
  ## HTTP Basic Auth
  username = "VDI"                     ###*********USUARIO DATABASE
  password = "VDI"                     ###*********PASSWORD DATABASE

Generamos el siguiente Script para sacar la lista de procesos de los usuarios y pasarlos a Json para influxdb.

$ProcesosUser = Get-Process -includeUserName | Where-Object {$_.username -notmatch "^NT"}
$Procobject = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process
$row = @()
Foreach ($ProcU in $ProcesosUser) {

	Foreach ($Procobj in $Procobject) {
		If (($ProcU.name -eq $Procobj.name)-and ($ProcU.name -ne "idle") -and ($ProcU.username -notlike "Window Manager*") -and ($ProcU.username -ne $null)){
			$row += @{
				AppUser = $ProcU.username 
				Aplicacion = $ProcU.name 
				AppCPU = $Procobj.PercentProcessorTime 
				AppMem = ([math]::Round($Procobj.WorkingSetPrivate/1Mb,2))
				}
		}
	}
}

$row | ConvertTo-JSon
Ejemplo de Salida de fichero Json:
[
    {
        "AppMem":  4.47,
        "AppUser":  "MORDOR\\administrator",
        "Aplicacion":  "ApplicationFrameHost",
        "AppCPU":  0
    },
    {
        "AppMem":  0.53,
        "AppUser":  "MORDOR\\administrator",
        "Aplicacion":  "cmd",
        "AppCPU":  0
    },
    {
        "AppMem":  0.53,
        "AppUser":  "MORDOR\\administrator",
        "Aplicacion":  "cmd",
        "AppCPU":  0
    }
]

Agregaremos en el fichero telegraf.conf lo siguiente, para que telegraf ejecute el Powershell y recopile los datos en formato Json. https://github.com/influxdata/telegraf/tree/master/plugins/parsers/json

  [[inputs.exec]]
    name_override = "VDI_ProcessList"
    commands = ['powershell -ExecutionPolicy Bypass \\\\mordor.gon\\netlogon\\telegraf\\List_Process.ps1 -RunType $true']
    timeout = "60s"
    data_format = "json"
    tag_keys = ["Aplicacion","AppUser"]
    json_string_fields = ["AppMem","AppCPU"]

En la variable "json_string_fields" agregaremos todas las variables que vienen del Json y en tag_keys son de array (No pueden estar en las dos variables.

También se pueden generar entradas con otros formatos CSV, nagios, ... https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md

Visualizacion en Grafana

Crearemos un nuevo dashboard para ver los datos.

Datos en Tabla

Podremos crear un Dashboard de Tabla con la siguiente query.

Query Grafana

En Visualización podemos configurarlo para que nos advierta en rojo o amarillo

Datos en Grafica

Podremos mostrar los datos con graficas

Grafica por aplicacion

Crearemos un nuevo Dashboard y entraremos en los settings en variables, para crear dos nuevas queries.

Crearemos una variable para el hostname y otro para las aplicaciones, indicaremos un (Name y Label) del tipo (Query), seleccionaremos el Data Source, el tipo de refresco en mi caso al cargar el dashboard e introducimos la query que me muestre las aplicaciones de la tabla "VDI_ProcessList".

En la parte superior podremos seleccionar la máquina o la aplicación.

Agregaremos nuestras queries en el panel.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *