
Métricas de FortiGate con Prometheus y Grafana
Para todos aquellos que tengamos uno o varios FortiGate entre nuestras manos, si queremos ver las métricas en tiempo real de estos dispositivos con Prometheus, en unos pocos pasos lo tendremos totalmente funcional. Métricas que visualizaremos en unos dashboards preciosos de Grafana!
Lo dicho hace unos días, este año daremos un impulso a la recopilación de métricas, logs y trazas con distintas soluciones, hoy toca algo sencillito (de verdad), no es más que coger las métricas de FortiGate, almacenarlas en Prometheus y verlas en Grafana, para ello, necesitaremos la base que vimos anteriormente.
Os dejo unas imágenes de ejemplo del tipo de información que podrás obtener, con métricas a nivel de 1 segundo, 5 segundos… Al finalizar este post, tendrás esta misma info. Datos de carga, CPU, Memoria, sesiones…
Estado y uso de las interfaces de red del firewall en tiempo real,
Uso de las reglas del firewall en tiempo real, y bastantes cosas más…
Empecemos, en este caso usaremos FortiGate Exporter, un exportador de métricas para Prometheus, en este caso lo desplegaremos de manera rápida bajo un contenedor de Docker. Antes de nada, necesitaremos crear un usuario en nuestro FortiGate que tenga permisos de lectura del sistema. Para ello, desde el FortiGate crearemos un ‘REST API Admin’ desde System > Administrators. En el ‘Administrator profile’ indicaremos que sea ‘super_admin_readonly’ y sin PKI Group; ojito que al darle al OK nos dará su Token que deberemos anotar.
Comenzamos pues, descargando FortiGate Exporter:
cd git clone https://github.com/bluecmd/fortigate_exporter.git cd fortigate_exporter
Dentro de la carpeta creamos el archivo ‘fortigate-key.yaml’ con el siguiente contenido, teniendo en cuenta de indicar la dirección IP del FortiGate, el token que hemos conseguido, y podremos comentar métricas que no usamos para que no las intente obtener:
"https://DIRECCION_IP_FORTIGATE": token: TOKEN_DEL_ADMIN_READ_ONLY probes: exclude: - Wifi - System/SDNConnector #- Log/Fortianalyzer/Status #- Log/Fortianalyzer/Queue - Log/Fortianalyzer - VirtualWAN - Switch #- Switch/ManagedSwitch - System/SensorInfo
Y finalizamos creando el fichero de definición del contenedor que vamos a desplegar, creamos ‘docker-compose.yml’
version: '3' services: prometheus_fortigate_exporter: build: ./ ports: - 9710:9710 volumes: - ./fortigate-key.yaml:/config/fortigate-key.yaml command: ["-auth-file", "/config/fortigate-key.yaml", "-insecure"] restart: unless-stopped networks: fortigate_exporter_default: networks: fortigate_exporter_default: driver: bridge
Y con esto lo tenemos listo, ya sólo nos queda desplegar el contenedor ejecutando:
sudo docker compose up -d
Una vez desplegado el contenedor, éste se conectará al FortiGate y nos expondrá sus métricas en el puerto 9710tcp, podremos confirmarlo si abrimos un navegador contra la IP del Docker, algo como: http://DIRECCION_IP_DOCKER:9710/metrics La cuestión será, que ahora debemos indicarle a nuestro Prometheus, que se conecte a este exporter y almacene sus métricas.
Para ello, pues editamos el fichero de configuración de nuestro Prometheus (nano ~/prometheus/prometheus/prometheus.yml) y añadiremos el job en la sección de scrape_configs:
global: scrape_interval: 5s scrape_timeout: 5s evaluation_interval: 5s scrape_configs: - job_name: 'fortigate_exporter' metrics_path: /probe static_configs: - targets: - https://DIRECCION_IP_FORTIGATE #- https://my-other-fortigate:8443 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance # Drop the https:// and port (if specified) for the 'instance=' label regex: '(?:.+)(?::\/\/)([^:]*).*' - target_label: __address__ replacement: 'DIRECCION_IP_DOCKER_FORTIGATE_EXPORTER:9710'
Y para que Prometheus recargue los datos, que no se os olvide reiniciar Prometheus:
sudo docker restart prometheus
Con esto ya tenemos las métricas de FortiGate almacenadas en nuestro servidor de Prometheus, lo que nos quedaría, es la parte bonita. En este caso visualizar estas métricas desde Grafana. Para ello, bastará con importar un dashboard ya desarrollado por la comunidad (gracias) que podremos usar en un periquete. Desde Grafana, con darle a crear un dashboard, le diremos que queremos importarlo e indicaremos el ID 14011. Con eso lo tendremos listo!
Como siempre, espero que os pueda resultar útil, y que os vaya bien y que os portéis mejor 🤠, la verdad que hay muchas curiosas que podemos explotar, espero ir sacando tiempo e ir al menos poniendo cosas rápidas y fáciles de implementar. Un abrazo!