2 # Cookbook:: prometheus
5 # Copyright:: 2020, OpenStreetMap Foundation
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
11 # https://www.apache.org/licenses/LICENSE-2.0
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
21 include_recipe "networking"
25 if node.internal_ipaddress
26 node.default[:prometheus][:mode] = "internal"
27 node.default[:prometheus][:address] = node.internal_ipaddress
28 elsif node[:networking][:wireguard][:enabled]
29 node.default[:prometheus][:mode] = "wireguard"
30 node.default[:prometheus][:address] = node[:networking][:wireguard][:address]
32 search(:node, "roles:prometheus") do |server|
33 node.default[:networking][:wireguard][:peers] << {
34 :public_key => server[:networking][:wireguard][:public_key],
35 :allowed_ips => server[:networking][:wireguard][:address],
36 :endpoint => "#{server.name}:51820"
40 node.default[:prometheus][:mode] = "external"
41 node.default[:prometheus][:address] = node.external_ipaddress(:family => :inet)
44 directory "/opt/prometheus" do
49 git "/opt/prometheus-exporters" do
51 repository "https://github.com/openstreetmap/prometheus-exporters.git"
58 directory "/etc/prometheus/collectors" do
65 directory "/etc/prometheus/exporters" do
72 directory "/var/lib/prometheus/node-exporter" do
79 template "/var/lib/prometheus/node-exporter/chef.prom" do
80 source "chef.prom.erb"
88 node[:hardware][:hwmon].each do |chip, details|
89 next unless details[:ignore]
91 sensors = details[:ignore].join("|")
94 :source_labels => "chip,sensor",
95 :regex => "#{chip};(#{sensors})",
100 prometheus_exporter "node" do
105 restrict_address_families %w[AF_UNIX AF_NETLINK]
106 system_call_filter ["@system-service", "@clock"]
108 --collector.textfile.directory=/var/lib/prometheus/node-exporter
109 --collector.interrupts
110 --collector.processes
111 --collector.rapl.enable-zone-label
115 metric_relabel metric_relabel
118 unless node[:prometheus][:junos].empty?
119 targets = node[:prometheus][:junos].collect { |_, details| details[:address] }.sort.join(",")
121 prometheus_exporter "junos" do
124 --ssh.user=prometheus
125 --ssh.keyfile=/var/lib/prometheus/junos-exporter/id_rsa
126 --ssh.targets=#{targets}
128 --power.enabled=false
131 register_target false
135 unless node[:prometheus][:snmp].empty?
136 prometheus_exporter "snmp" do
138 options "--config.file=/opt/prometheus-exporters/exporters/snmp/snmp.yml"
139 register_target false
143 if node[:prometheus][:files].empty?
144 prometheus_exporter "filestat" do
148 file "/etc/prometheus/filestat.yml" do
152 template "/etc/prometheus/filestat.yml" do
153 source "filestat.yml.erb"
159 prometheus_exporter "filestat" do
161 options "--config.file=/etc/prometheus/filestat.yml"
162 subscribes :restart, "template[/etc/prometheus/filestat.yml]"