Mostrando las entradas con la etiqueta Grafana. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Grafana. 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!!!.

lunes, 18 de diciembre de 2023

Telegraf monitorear Vsphere y Dashboard en Grafana

 

Siguiendo con mis pruebas y laboratorios de Telegraf con InfluxDB y Grafana, encontré que tambien puede monitorear tu infraestructura virtual y apoyado de unos excelentes dashboards elaborados por José de la Cruz, manos a la obra:

cree el siguiente archivo en /etc/telegraf/telegraf.d/vsphere-stats.conf con el siguiente contenido dentro:

## Realtime instance

[[inputs.vsphere]]

## List of vCenter URLs to be monitored. These three lines must be uncommented

## and edited for the plugin to work.

interval = "60s"

  vcenters = [ "https://someaddress/sdk" ]

  username = "someuser@vsphere.local"

  password = "secret"

 

vm_metric_include = []

host_metric_include = []

cluster_metric_include = []

datastore_metric_exclude = ["*"]

 

max_query_metrics = 256

timeout = "60s"

insecure_skip_verify = true

 

## Historical instance

[[inputs.vsphere]]

interval = "300s"

  vcenters = [ "https://someaddress/sdk" ]

  username = "someuser@vsphere.local"

  password = "secret"

 

  datastore_metric_include = [ "disk.capacity.latest", "disk.used.latest", "disk.provisioned.latest" ]

  insecure_skip_verify = true

  force_discover_on_init = true

  host_metric_exclude = ["*"] # Exclude realtime metrics

  vm_metric_exclude = ["*"] # Exclude realtime metrics

 

  max_query_metrics = 256

  collect_concurrency = 3

 

 Ahora en grafana solo falta importar estos Dashboards que detallo  a continuación para monitorear tu VSphere de forma integral:

https://grafana.com/dashboards/8159

alt tag

https://grafana.com/dashboards/8162

alt tag

https://grafana.com/dashboards/8165

alt tag

https://grafana.com/dashboards/8168

alt tag

Bueno como verás con estas poderosas herramientas podrás tener todo de manera gráfica el performance de tu infraestructura Virtual, nos vemos en la próxima...

miércoles, 13 de diciembre de 2023

Telegraf para capturar Netflow + InfluxDB + Grafana Dashboards

 

En entradas anteriores habíamos visto como instalar Nagios, Pnp4nagios, mrtg y Nagvis. En estos días probando Grafana una potente herramienta para elaborar tableros que soporta varias fuente de datos, elaboré unos dashboard desde PNP4nagios, sin embargo, se me presentó un inconveniente al intentar leer los datos desde MRTG, por lo que revisando conocí de  esta herramienta Telegraf que al integrarla con una base de datos que soporta grafana como InfluxDB, por lo que me puse manos a la obra e instalar estas dos potentes herramientas para monitorear los dispositivos de red, como sabrán mi preferencia con Centos por lo que empecemos:

1.      Primero saber que mi sistema operativo está actualizado:

sudo yum -y update

2.      Agregar repositorio RPM Influxdata

sudo tee /etc/yum.repos.d/influxdb.repo<<EOF

[influxdb]

name = InfluxDB Repository - RHEL

baseurl = https://repos.influxdata.com/rhel/8/x86_64/stable/

enabled = 1

gpgcheck = 0

gpgkey = https://repos.influxdata.com/influxdb.keyProcedemos a instalar Telegraf

EOF

sudo yum -y install telegraf

 

3.      Configuraremos Telegraf

sudo nano /etc/telegraf/telegraf.conf

4.      Agregamos las líneas para enviar las métricas a InfluxDB o puedes quitarle el comentario

[[outputs.influxdb]]

urls = ["http://127.0.0.1:8086"]

database = "telegraf"

## HTTP Basic Auth

username = "telegraf"

password = "telegraf"

5.      Ahora indicamos para que el servicio inicie automáticamente

sudo systemctl enable  telegraf

6.      Ahora iniciamos el servicio

Systemctl start telegraf

7.      Instalamos InfluxDB

sudo yum -y install influxdb

8.      Iniciamos y habilitamos InfluxDB

sudo systemctl enable influxdb

sudo systemctl start influxdb

9.      Configuramos Influxdb

influx

> create database telegraf

> show databases

> create user telegraf with password 'telegraf'

> exit

10.   Configurar HTTPS en Influxdb

11.   Instalamos los paquetes necesarios

Yum install gnutls-utils

12.   Vamos a crear los certificados para ellos creamos ingresamos al directorio /etc/ssl

cd /etc/ssl

sudo mkdir influxdb && cd influxdb

sudo certtool --generate-privkey --outfile server-key.pem --bits 2048

13.   Creamos la clave pública para nuestro servidor influxdb

sudo certtool --generate-self-signed --load-privkey server-key.pem --outfile server-cert.pem

14.   Ahora habilitaremos HTTPS en nuestro servidor influxdb

Nos dirigimos al directorio /etc/influxdb/influxdb.conf y modificamos las siguientes líneas:

# Determines whether HTTPS is enabled.

  https-enabled = true

# The SSL certificate to use when HTTPS is enabled.

https-certificate = "/etc/ssl/influxdb/server-cert.pem"

# Use a separate private key location.

https-private-key = "/etc/ssl/influxdb/server-key.pem"

15.   Reiniciamos el servicio de Influxdb y asegúrese que no de error

Systemctl restart influxdb

16.   Configurar Telegarf para que se conecte por https

Editamos el archivo conf que se encuentra en el siguiente directorio /etc/telegraf/telegraf.conf

# Configuration for sending metrics to InfluxDB

[[outputs.influxdb]]

 

# https, not http!

urls = ["https://127.0.0.1:8086"]

## Use TLS but skip chain & host verification

insecure_skip_verify = true

17.   Reiniciamos Telegraf

systemctl restart telegraf

18.   Explorando tus métricas en InfluxDB

influx -ssl -unsafeSsl -username 'telegraf' -password 'telegraf'

Connected to http://localhost:8086 version 1.7.7

InfluxDB shell version: 1.7.7

> USE telegraf

> SELECT * FROM cpu WHERE time > now() - 30s

19.   Configurar la fuente de datos de Grafana

Abra su navegador web y escriba la dirección IP del servidor con el puerto 3000.

http://direccion_ip:3000/

Inicie sesión con el usuario predeterminado ‘admin’ y la contraseña ‘admin’.

Haga clic en el botón ‘Agregar fuente de datos’ para agregar la fuente de datos influxdb.

Nombre: influxdb

Tipo: influxdb o Query Languaje: InfluxQl

URL: http://direccion_ip:8086/


20.   Configurar el panel de Grafana

Grafana proporciona el repositorio de complementos y paneles de Grafana.

Para importar el tablero de grafana, haga clic en el menú ‘+’ en el panel izquierdo y haga clic en ‘Importar’.

Ahora abra el panel de Grafana de muestra desde la URL https://grafana.com/dashboards/5955 y haga clic en el botón Copiar ID al portapapeles.

Pegue la identificación del tablero.

Y será redirigido automáticamente a la configuración del tablero.

En la sección de opciones, haga clic en InfluxDB y elija su servidor influxdb, luego haga clic en el botón Importar.

Debería ver una captura de pantalla del tablero importado, similar a esta:

Grafana dashboards 5955


 

21.   Listo ahora en nuestro equipo con Telegraf instalado vamos a configurarlo para que pueda monitorear a nuestros switches por SNMP. Para separar y no modificar el archivo telegraf.conf vamos a crear uno nuevo para nuestros switches cisco, para ello creamos un archivo dentro del directorio telegraf.d

nano /etc/telegraf/telegraf.d/telegraf01.conf

22.   Ahora copiamos el siguiente texto, esta claro de que debemos ajustarlo a nuestra necesidad:

[[inputs.snmp]]

  agents = [ "172.16.11.1:161","172.16.12.1:161" ]

  version = 2

  community = "public"

  interval = "60s"

  timeout = "10s"

  retries = 3

 

  [[inputs.snmp.field]]

    name = "hostname"

    oid = "RFC1213-MIB::sysName.0"

    is_tag = true

 

  [[inputs.snmp.field]]

    name = "uptime"

    oid = "DISMAN-EXPRESSION-MIB::sysUpTimeInstance"

 

 [[inputs.snmp.field]]

    name = "CPUBusy"

    oid = ".1.3.6.1.4.1.9.2.1.57.0"

 

  [[inputs.snmp.field]]

    name = "ciscoEnvMonFanState"

    oid = ".1.3.6.1.4.1.9.9.13.1.4.1.3"

 

  [[inputs.snmp.field]]

    name = "ciscoEnvMonVoltageStatusValue"

    oid = ".1.3.6.1.4.1.9.9.13.1.2.1.3"

 

  [[inputs.snmp.field]]

    name = "ciscoEnvMonTemperatureStatusValue"

    oid = ".1.3.6.1.4.1.9.9.13.1.3.1.3"

 

  [[inputs.snmp.field]]

    name = "cpmCPUTotal5min"

    oid = ".1.3.6.1.4.1.9.9.109.1.1.1.1.5"

 

  [[inputs.snmp.field]]

    name = "ciscoMemoryPoolFree"

    oid = ".1.3.6.1.4.1.9.2.1.8.0"

 

  [[inputs.snmp.field]]

    name = "ciscoMemoryPoolTotal"

    oid = "1.3.6.1.4.1.9.3.6.6.0"

 

  [[inputs.snmp.field]]

    name = "ciscoMemoryPoolUsed"

    oid = ".1.3.6.1.4.1.9.9.48.1.1.1.5"

 

  [[inputs.snmp.table]]

    name = "interface"

    inherit_tags = [ "hostname" ]

    oid = "IF-MIB::ifTable"

 

    [[inputs.snmp.table.field]]

      name = "ifDescr"

      oid = "IF-MIB::ifDescr"

      is_tag = true

 

  [[inputs.snmp.table]]

    name = "interface"

    inherit_tags = [ "hostname" ]

    oid = "IF-MIB::ifXTable"

 

    [[inputs.snmp.table.field]]

      name = "ifDescr"

      oid = "IF-MIB::ifDescr"

      is_tag = true

 

  [[inputs.snmp.table]]

    name = "interface"

    inherit_tags = [ "hostname" ]

    oid = "EtherLike-MIB::dot3StatsTable"

 

    [[inputs.snmp.table.field]]

      name = "ifDescr"

      oid = "IF-MIB::ifDescr"

      is_tag = true

 

23.   Reiniciamos Telegraf

Systemctl restart telegraf

24.    

 

Instalar plugin geoip

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment


Hasta aquí llegamos, nos vemos en la próxima!