Skip to main content

Prometheus Exporter for Junos using PyEZ Tables and Views

Project description

junos-exporter

PyPI - Python Version PyPI GitHub

This project is under development.

Overview

This is a Prometheus Exporter for Junos using PyEZ(Juniper/py-junos-eznc) Tables and Views.
PyEZ can extract information from Junos operational command output and map it to a Python data structure via yaml.
junos-exporter converts the information provided by PyEZ into the Prometheus metrics format via yaml.
So, this exporter's metrics can be flexibly configured by simply editing yaml.

Usage

usage: junos-exporter [-h] [--log-level {critical,error,warning,info,debug,trace}] [--no-access-log] [--port PORT] [--root-path ROOT_PATH]
                      [--workers WORKERS]

options:
  -h, --help            show this help message and exit
  --log-level {critical,error,warning,info,debug,trace}
                        log level[default: info]
  --no-access-log       disable access log
  --port PORT           listening port[default: 9326]
  --root-path ROOT_PATH
                        root path[default: ""]
  --workers WORKERS     number of worker processes[default: 1]

Docker

docker run -v <config file>:/app/config.yml ghcr.io/minefuto/junos-exporter

Pip

Put the config file in "~/.junos-exporter/config.yml".

pip install junos-exporter
junos-exporter

Configuration

Please see the config.yml for configuration example.

Create Exporter Config

general:
  prefix: junos  # prefix of the metrics

Create PyEZ Operational Tables

Put the yaml or textfsm file in the following directory.

  • ./op/ or ~/.junos-exporter/op/ : structured & unstructured tables and views configuration file
  • ./textfsm/ or ~/.junos-exporter/textfsm/ : textfsm template file

If using the following predefined operational table, you can skip this step.

Create Convert Rule

optables:
  EthPortTable:  # pyez table name
    metrics:
      - name: interface_link_status  # metrics name
        value: oper  # metrics value
        type: gauge  # metrics type(gauge or count or untyped)
        help: physical interface link status(up:2, down:1)  # metrics help
        value_transform:  #(optional) if metrics value is str, can be transformed to float
          up: 2
          down: 1
          _: 0  #(optional) value_transform's fallback value(default: NaN)
      - name: interface_lastflap_seconds
        value: interface_flapped
        type: counter
        regex: (\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d).*  #(optional) metric value can be extracted by using regexp
        to_unixtime: True  # transform to unixtime for timestamp/uptime  e.g. 2025-03-22 12:57:10, 10w3d 11:11:11
        help: physical interface link flap timestamp
    labels:
      - name: interface  # label name
        value: name  # label value
      - name: description
        value: description
        regex: (.*)  #(optional) label values can be extracted by using regexp
      - name: link_mode
        value: link_mode
      - name: mac
        value: macaddr

metrics value and label value select from fields key of PyEZ View.

EthPortView:
  groups:
    mac_stats: ethernet-mac-statistics
    flags: if-device-flags
  fields: <- !!
    oper: oper-status
    admin: admin-status
    description: description
    mtu: { mtu : int }
    link_mode: link-mode
    macaddr: current-physical-address
-snip-

PyEZ Table's key is automatically mapping to key and name.

EthPortTable:
  rpc: get-interface-information
  args:
    media: True
    interface_name: '[afgxe][et]-*'
  args_key: interface_name <- !!
  item: physical-interface
  view: EthPortView

If there are multiple keys, a number is assigned at the end such as key.0, key.1.

IsisAdjacencyTable:
  rpc: get-isis-adjacency-information
  args:
    extensive: True
  item: isis-adjacency
  key:
    - interface-name  <- key.0, name.0
    - system-name     <- key.1, name.1
  view: IsisAdjacencyView

The metrics value can be a static value.

optables:
  ArpTable:
    metrics:
      - name: arp_entry_info
        value: 1  <- !!
        type: gauge
        help: arp entry info

Create Junos Device Config

credentials:
  vjunos: # credential name
    username: admin  # junos device's username
    password: admin@123  # junos device's password

modules:
  router:  # module name
    tables:  # pyez table name(which pyez table information to retrieve in this module)
      - ArpTable
      - EthPortTable

Create Prometheus Config

scrape_configs:
  - job_name: "junos-exporter"
    static_configs:
      - targets:
          - "192.168.1.1"  # target device
          - "192.168.1.2"
        labels:
          __meta_credential: "vjunos"  # credential name
          __meta_module: "router"  # module name
      - targets:
          - "192.168.10.3"
        labels:
          __meta_credential: "vjunos"
          __meta_module: "switch"
    relabel_configs:
      - source_labels: [__meta_credential]
        target_label: __param_credential
      - source_labels: [__meta_module]
        target_label: __param_module
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9326

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

junos_exporter-0.0.7.tar.gz (51.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

junos_exporter-0.0.7-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file junos_exporter-0.0.7.tar.gz.

File metadata

  • Download URL: junos_exporter-0.0.7.tar.gz
  • Upload date:
  • Size: 51.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.6.12

File hashes

Hashes for junos_exporter-0.0.7.tar.gz
Algorithm Hash digest
SHA256 e27d7c70528a1344786c6061ba258dd328c9ccac3ae28edd1f4b20e8e4f95af0
MD5 e82378907ed1344f412f710fa6b2f656
BLAKE2b-256 687ab3292a4d0cf81b9a4cb06cd13910b0481a8e9f7dd7f12efae366d67407f5

See more details on using hashes here.

File details

Details for the file junos_exporter-0.0.7-py3-none-any.whl.

File metadata

File hashes

Hashes for junos_exporter-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 c675d065bad978ea099f527000f7376341af7ab3455173fa0adf024483325273
MD5 b57f0c513957d7af6e34099228d04819
BLAKE2b-256 c140c02d0977439cc5d3c4a225f9dd8a8c4a8ac4934ab62ada1e153327581ea3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page