Skip to content

Commit

Permalink
monitoring: T4315: Add telegraf output plugin prometheus-client
Browse files Browse the repository at this point in the history
Add output Plugin "prometheus-client" for telegraf:
  set service monitoring telegraf prometheus-client
  • Loading branch information
sever-sever committed May 3, 2022
1 parent 318f81c commit 5ceabd7
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 6 deletions.
18 changes: 18 additions & 0 deletions data/templates/monitoring/telegraf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,28 @@
logfile = ""
hostname = ""
omit_hostname = false
{% if influxdb_configured is vyos_defined %}
[[outputs.influxdb_v2]]
urls = ["{{ url }}:{{ port }}"]
insecure_skip_verify = true
token = "$INFLUX_TOKEN"
organization = "{{ authentication.organization }}"
bucket = "{{ bucket }}"
{% endif %}
{% if prometheus_client is vyos_defined %}
[[outputs.prometheus_client]]
## Address to listen on
listen = "{{ prometheus_client.listen_address if prometheus_client.listen_address is vyos_defined else '' }}:{{ prometheus_client.port }}"
metric_version = {{ prometheus_client.metric_version }}
{% if prometheus_client.authentication.username is vyos_defined and prometheus_client.authentication.password is vyos_defined %}
## Use HTTP Basic Authentication
basic_username = "{{ prometheus_client.authentication.username }}"
basic_password = "{{ prometheus_client.authentication.password }}"
{% endif %}
{% if prometheus_client.allow_from is vyos_defined %}
ip_range = {{ prometheus_client.allow_from }}
{% endif %}
{% endif %}
[[inputs.cpu]]
percpu = true
totalcpu = true
Expand Down Expand Up @@ -50,6 +66,7 @@
server = "unixgram:///run/telegraf/telegraf_syslog.sock"
best_effort = true
syslog_standard = "RFC3164"
{% if influxdb_configured is vyos_defined %}
[[inputs.exec]]
commands = [
"{{ custom_scripts_dir }}/show_firewall_input_filter.py",
Expand All @@ -58,3 +75,4 @@
]
timeout = "10s"
data_format = "influx"
{% endif %}
83 changes: 83 additions & 0 deletions interface-definitions/service_monitoring_telegraf.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,89 @@
</properties>
<defaultValue>all</defaultValue>
</leafNode>
<node name="prometheus-client">
<properties>
<help>Output plugin Prometheus client</help>
</properties>
<children>
<node name="authentication">
<properties>
<help>HTTP basic authentication parameters</help>
</properties>
<children>
<leafNode name="username">
<properties>
<help>Authentication username</help>
</properties>
</leafNode>
<leafNode name="password">
<properties>
<help>Authentication password</help>
<valueHelp>
<format>txt</format>
<description>Authentication password</description>
</valueHelp>
</properties>
</leafNode>
</children>
</node>
<leafNode name="allow-from">
<properties>
<help>Networks allowed to query this server</help>
<valueHelp>
<format>ipv4net</format>
<description>IP address and prefix length</description>
</valueHelp>
<valueHelp>
<format>ipv6net</format>
<description>IPv6 address and prefix length</description>
</valueHelp>
<multi/>
<constraint>
<validator name="ip-prefix"/>
</constraint>
</properties>
</leafNode>
<leafNode name="listen-address">
<properties>
<help>Local IP addresses to listen on</help>
<completionHelp>
<script>${vyos_completion_dir}/list_local_ips.sh --both</script>
</completionHelp>
<valueHelp>
<format>ipv4</format>
<description>IPv4 address to listen for incoming connections</description>
</valueHelp>
<valueHelp>
<format>ipv6</format>
<description>IPv6 address to listen for incoming connections</description>
</valueHelp>
<constraint>
<validator name="ipv4-address"/>
<validator name="ipv6-address"/>
<validator name="ipv6-link-local"/>
</constraint>
</properties>
</leafNode>
<leafNode name="metric-version">
<properties>
<help>Metric version control mapping from Telegraf to Prometheus format</help>
<valueHelp>
<format>u32:1-2</format>
<description>Metric version (default: 2)</description>
</valueHelp>
<constraint>
<validator name="numeric" argument="--range 1-2"/>
</constraint>
</properties>
<defaultValue>2</defaultValue>
</leafNode>
#include <include/port-number.xml.i>
<leafNode name="port">
<defaultValue>9273</defaultValue>
</leafNode>
</children>
</node>
<leafNode name="url">
<properties>
<help>Remote URL [REQUIRED]</help>
Expand Down
22 changes: 16 additions & 6 deletions src/conf_mode/service_monitoring_telegraf.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,20 +99,30 @@ def get_config(config=None):
monitoring['interfaces_ethernet'] = get_interfaces('ethernet', vlan=False)
monitoring['nft_chains'] = get_nft_filter_chains()

if 'authentication' in monitoring or \
'url' in monitoring:
monitoring['influxdb_configured'] = True

# Ignore default XML values if config doesn't exists
# Delete key from dict
if not conf.exists(base + ['prometheus-client']):
del monitoring['prometheus_client']

return monitoring

def verify(monitoring):
# bail out early - looks like removal from running config
if not monitoring:
return None

if 'authentication' not in monitoring or \
'organization' not in monitoring['authentication'] or \
'token' not in monitoring['authentication']:
raise ConfigError(f'Authentication "organization and token" are mandatory!')
if 'influxdb_configured' in monitoring:
if 'authentication' not in monitoring or \
'organization' not in monitoring['authentication'] or \
'token' not in monitoring['authentication']:
raise ConfigError(f'Authentication "organization and token" are mandatory!')

if 'url' not in monitoring:
raise ConfigError(f'Monitoring "url" is mandatory!')
if 'url' not in monitoring:
raise ConfigError(f'Monitoring "url" is mandatory!')

return None

Expand Down

0 comments on commit 5ceabd7

Please sign in to comment.