Mostrando las entradas con la etiqueta métricas. Mostrar todas las entradas
Mostrando las entradas con la etiqueta métricas. Mostrar todas las entradas

lunes, 14 de abril de 2025

DHCP Windows Server - Dashboard Grafana

 hace unos días, un cliente me pidió tener dashboards en grafana de su servidor DHCP para conocer y medir el servicio, por lo que me puse a investigar como podiamos obtener los datos del servidor DHCP y poder armar los tableros en grafana, por lo que en esta entrada les comento lo que hice:

Para este propósito usamos un script en PowerShell + Telegraf + Influxdb y Grafana.

1.- En el servidor DHCP arme un script en powershell y guardarlo con el nombre GetDHCPStats.ps1 en la siguiente ruta C:\Scripts el cual ejecuta los siguientes comandos:

Get-DhcpServerv4Scope: Devuelve la configuración del ámbito IPv4 de los ámbitos especificados

 Get-DhcpServerv4ScopeStatistics: Obtener las estadísticas de alcance IPv4 correspondientes a los ID de alcance IPv4.

 Get-DhcpServerv4ExclusionRange: Devuelve los rangos de direcciones IPv4 excluidos de los ID de alcance especificados.

 Get-Service -Name DHCPServer: Otener el estado del servicio DHCP.

Aqui coloco el código desarrollado:

 

  
    
 $scopes = Get-DhcpServerv4Scope

foreach ($scope in $scopes) {
    $stats = Get-DhcpServerv4ScopeStatistics -ScopeId $scope.ScopeId
    $exclusionRanges = Get-DhcpServerv4ExclusionRange -ScopeId $scope.ScopeId
    $totalExcluidas = 0

    foreach ($rango in $exclusionRanges) {
        $startBytes = [System.Net.IPAddress]::Parse($rango.StartRange).GetAddressBytes()
        $endBytes = [System.Net.IPAddress]::Parse($rango.EndRange).GetAddressBytes()
        $startInt = ($startBytes[0] -shl 24) -bor ($startBytes[1] -shl 16) -bor ($startBytes[2] -shl 8) -bor $startBytes[3]
        $endInt = ($endBytes[0] -shl 24) -bor ($endBytes[1] -shl 16) -bor ($endBytes[2] -shl 8) -bor $endBytes[3]
        $totalExcluidas += $endInt - $startInt + 1
    }

    # Construcción correcta de campos (sin espacios)
    $fields = @(
        "start_range=`"$($scope.StartRange)`"",
        "end_range=`"$($scope.EndRange)`"",
        "addresses_free=$($stats.AddressesFree)",
        "addresses_used=$($stats.AddressesInUse)",
        "addresses_reserved=$($stats.Reserved)",
        "addresses_excluded=$totalExcluidas",
        "percentage_used=$($stats.PercentageInUse)"
    ) -join ','

    # Línea única con formato válido
    $line = "dhcp_scope,host=$env:COMPUTERNAME,scope_id=$($scope.ScopeId),subnetMask=$($scope.SubnetMask),name=$($scope.Name.Replace(' ','\ ')),state=$($scope.State),lease=$($scope.LeaseDuration) $fields"
    
    Write-Output $line
}

# Estado del servicio
$service = Get-Service -Name DHCPServer
Write-Output "dhcp_service,host=$env:COMPUTERNAME status=`"$($service.Status)`""  
 
2.- Configurar Telegraf para enviar los datos a servidor Influxdb
  
 
[[inputs.exec]]
 commands = ["powershell -ExecutionPolicy Bypass -File C:\\Scripts\\GetDHCPStats.ps1"]
 timeout = "10s"
 data_format = "influx"  
   
 
  
  
[[outputs.influxdb]]
  urls = ["http://IP_InfluxDB:8086"]  # Ej: http://192.168.1.100:8086
  database = "dhcp_metrics"           # Nombre de la base de datos
  username = "usuario"                # Opcional
  password = "contraseña"             # Opcional
     
 

Finalmente obtendremos este dashboard en nuestro grafana: 

Dashboard DHCP

 Nos vemos en la próxima!!!.