A Python-based Exalead for Prometheus
Project description
exalead_exporter
Description
Prometheus exporter for Exalead solution
This exporter collect metrics from Exalead HTTP API.
It is a python HTTP server that exposes metrics to http (default port 9271) that can be then scrapped by Prometheus.
Several Exalead servers can be polled by adding them to the YAML config file, by adding a host section:
Config: (see config.yml)
exaleads:
- host: host.domain
port: 9398
# protocol: https
# verify_ssl: false
# timeout: 20
# keep_session: true # default
# default_labels:
# - name: veeam_em
# value: my_veeam_em_server.domain
# proxy:
# url: http://my.proxy.domain:port/
# protocol: https
weblisten:
address: 0.0.0.0
port: 9247
logger:
level: info
facility: syslog
metrics_file: "metrics/*_metrics.yml"
Usage
The exporter may run as a unix command with module installation or as standalone python script without instalation.
the easiest way is to install from pip:
pip3 install --upgrade exalead-exporter
then you can use the entry point create by the installer of the module in /usr/local/bin/exalead_exporter or in [venv]/bin/exalead_exporter for venv context. The commanded usage is in venv.
To use the exporter, few packages needs to be installed. This can be done using:
pip3 install -r pip_requirements.txt
Contents of requirements.txt
xmltodict==0.12.0
tenacity==6.2.0
requests>=2.20.0
Jinja2==3.0.3
urllib3==1.24.2
prometheus_client==0.14.1
PyYAML>=5.3.1
python-dateutil>=2.7.0
- Consider, to extract the archiv file in /tmp folder; this will generate a folder /tmp/exalead_exporter_[version].
- create a directory where you want by example /opt/exalead_exporter_[version],
- move the /tmp/exalead_exporter_[version]/exalead_exporter_package directory to /opt/eeam_exporter_[version]
- create a command file to launch the exporter in dir /opt/exalead_exporter_[version]
vi /opt/exalead_exporter_X.Y.Z/exalead_exporter_cmd
#!/usr/libexec/platform-python
# -*- coding: utf-8 -*-
import re
import sys
from exalead_exporter.exalead_exporter import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
- Then edit the conf/config.yml file and add your settings.
- Try your config by executing the command in try mode
example with the default dumy config file:
python3 exalead_exporter_cmd -n -v
exalead_exporter[227114]: level=INFO - exalead_exporter 0.0.2 starting....
exalead_exporter[227114]: level=DEBUG - config is {'exaleads': [{'host': 'host.domain', 'port': 9398, 'verify_ssl': False, 'timeout': 20}], 'weblisten': {'address': '0.0.0.0', 'port': 9271}, 'logger': {'level': 'info', 'facility': 'syslog'}, 'metrics_file': 'metrics/*.yml'}
exalead_exporter[227114]: level=WARNING - [Errno 2] No such file or directory: '/home/users/d107684/python/exalead-exporter-package/exalead_exporter/metrics'
exalead_exporter[227114]: level=ERROR - no metrics found
exalead_exporter[227114]: level=INFO - exalead_exporter 0.0.2 stopped.
[ /home/users/d107684/python/exalead-exporter-package ]d107684@dal-v-survdadc $ python3 cli.py -v -n
exalead_exporter[228511]: level=INFO - exalead_exporter 0.0.2 starting....
exalead_exporter[228511]: level=DEBUG - config is {'exaleads': [{'host': 'host.domain', 'port': 9398, 'verify_ssl': False, 'timeout': 20}], 'weblisten': {'address': '0.0.0.0', 'port': 9271}, 'logger': {'level': 'info', 'facility': 'syslog'}, 'metrics_file': 'conf/metrics/*.yml'}
exalead_exporter[228511]: level=ERROR - Connection Exception: Host host.domain: HTTPConnectionPool(host='host.domain', port=9398): Max retries exceeded with url: /mami/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f02ab6be7f0>: Failed to establish a new connection: [Errno -2] Name or service not known',))
exalead_exporter[228511]: level=DEBUG - # HELP exalead_up probe success login status: 0 Down / 1 Up
exalead_exporter[228511]: level=DEBUG - # TYPE exalead_up gauge
exalead_exporter[228511]: level=DEBUG - exalead_up 0.0
exalead_exporter[228511]: level=INFO - exalead_exporter 0.0.2 stopped
exporter command line options
to start the exporter:
./exalead_exporter &
By default, it will load the file config.yml to perform action.
Detail options
Usage: exalead_exporter [-h] [-b BASE_PATH] [-c CONFIG_FILE]
[-f LOGGER.FACILITY] [-l {error,warning,info,debug}]
[-o METRICS_FILE] [-m METRIC] [-n] [-t TARGET]
[-w WEB.LISTEN_ADDRESS] [-V] [-v]
collector for exalead.
optional arguments:
-h, --help show this help message and exit
-b BASE_PATH, --base_path BASE_PATH
set base directory to find default files.
-c CONFIG_FILE, --config_file CONFIG_FILE
path to config files.
-f LOGGER.FACILITY, --logger.facility LOGGER.FACILITY
logger facility (syslog or file path).
-l {error,warning,info,debug}, --logger.level {error,warning,info,debug}
logger level.
-o METRICS_FILE, --metrics_file METRICS_FILE
collect the metrics from the specified file instead of
config.
-m METRIC, --metric METRIC
collect only the specified metric name from the
metrics_file.
-n , --dry_mode collect the metrics then exit; display results to
stdout.
-t TARGET, --target TARGET
In dry_mode collect metrics on specified target.i
Default first from config file.
-w WEB.LISTEN_ADDRESS, --web.listen-address WEB.LISTEN_ADDRESS
Address to listen on for web interface and telemetry.
-V, --version display program version and exit..
-v , --verbose verbose mode; display log message to stdout.
To test your configuration you can launch the exporter in dry_mode:
./exalead_exporter -v -n -t host.domain
This command will try to connect to the 'host.domain' exaleas server with parameters specified in config.yml, expose the collected metrics, and eventually the warning or errors, then exits.
Prometheus config
Since several exalead servers can be set in the exporter, Prometheus addresses each server by adding a target parameter in the url. The "target" must be the same (lexically) that in exporter config file.
- job_name: "exalead"
scrape_interval: 120s
scrape_timeout: 60s
metrics_path: /metrics
static_configs:
- targets: [ exaleadhost.domain ]
labels:
environment: "PROD"
# file_sd_configs:
# - files: [ "/etc/prometheus/exalead_exp/*.yml" ]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: "exalead-exporter-hostname.domain:9247" # The exalead exporter's real hostname.
Metrics
The collected metrics are defined in separeted files positionned the folder conf/metrics. All Values, computations, labels are defined in the metrics files, meaning that the exporter doesn't nothing internally on values. The configuration fully drive how values are rendered.
Collected Metrics
All metrics are defined in the configuration file (conf/metrics/*.yml). You can retrive all metric names here. Most of them have help text too. All metrics are prefixed with "exaled_".
file | domain | metrics |
---|---|---|
none | default | exalead_up : 0 or 1. define if exalead server can be reached or not. |
licence_status.yml | general licences elements | prefix: exalead_license_ . (see licences dashboard) |
deploymentsStatus.yml | general indexing processes | prefix: exalead_process_. (see processes dashboard) |
connectorStatus.yml | indexation | Prefix: exalead_connectors_. gauge by connector name: (see processes dashboard) |
Extending metrics
Exported metrics, are defined the YAML config file. The value can use Jinja2 templating language. The format of the configuration is inspired from Ansible task representation. So a metric configuration file, consists in a list of action to perform.
There are five possible actions:
- url: to collect metrics from HTTP API
- set_fact: to assign vlaue to variables
- actions: to perform a list of (sub-)actions
- metrics: to define metrics to expose/return to Prometheus
- debug: to display debug text to logger.
All actions have default "attributes":
- name: the name of action or metric counter for metrics action.
- vars: to set vars to global symbols' table.
- with_items: to loop on current action with a list of items.
- loop_var: to set the name of the variable that will receive the current value in the loop. Default is 'item'.
- when: a list of condition (and) that must be check and be true to perform the action.
The "attributes" are analyzed in the order specified in previous table; it means that you can't use "item" var (obtained from 'with_items' directive) in the vars section because it is not yet defined when the 'vars' section is evaluated. If you need that feature, you will have to consider 'with_items' in an 'actions' section (see metrics/connectorStatus.yml).
action | parameter | description | remark |
---|---|---|---|
url | a string that's representing the entity to collect without '/api' | http://host.domain:port/api**[url]**. e.g.: /reports/summary/overview | |
var_name | the name of the variable to store the results. Default is '_root' meaning that the resulting JSON object is directly store in symbols table. | ||
set_fact | list of variable to define | ||
var_name: value | |||
metrics | define the list of metrics to expose | ||
metric_prefix | a prefix to add to all metric name | final name will be [metric_prefix]_[metric_name] | |
'a metric' | name | the name of the metric | |
help | the help message added to the metric (and displayed in grafana explorer) | ||
type 'gauge' or 'counter' | the type of the prometheus metric | ||
value | the numeric value itself | ||
labels | a list of name value pairs to qualify the metric |
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
Built Distribution
File details
Details for the file exalead_exporter-0.0.3.tar.gz
.
File metadata
- Download URL: exalead_exporter-0.0.3.tar.gz
- Upload date:
- Size: 602.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b99bda9dd7cffcacda55db38e92aa98008778d78cee310dfd5aa09c90effad0 |
|
MD5 | 6727b44a923b6110ce6bb2ee5af7158f |
|
BLAKE2b-256 | 93e2b12c9749e7d60997428c91c3dfadb03d75df45b511378b8fd1195ba241f3 |
File details
Details for the file exalead_exporter-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: exalead_exporter-0.0.3-py3-none-any.whl
- Upload date:
- Size: 29.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 46ee9bd290fb6ede8d18cc859f51d8d9ce350c39eb2114721a8b2f22c07cbfa5 |
|
MD5 | 27da232cbb0c3fab721f474d7e8c5743 |
|
BLAKE2b-256 | 204461fa9e3575290d981ca17863fa3191f577c1c1c3cda82f464c1fe11b9999 |