Skip to content

Commit 0305831

Browse files
committed
Add support for junos exporter
1 parent f06628a commit 0305831

File tree

8 files changed

+76
-1
lines changed

8 files changed

+76
-1
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
default[:prometheus][:addresses] = {}
22
default[:prometheus][:exporters] = {}
3+
default[:prometheus][:junos] = {}
34
default[:prometheus][:snmp] = {}
45
default[:prometheus][:metrics] = {}
56
default[:prometheus][:files] = []
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCwBRhz6gJsBcf5xf1WWEdhm6DjOnVlB5CHn48qEDYk4Gy5j62ZsKq+pBmHIJ1SeoR2ezlsMgKyPouzRkIQgh3Mc1qcy0fmr/szsDwhswKjODyk7vfnkEH5bK70W2/WrrBmBi1RGp03hCnJqWFG5uLaYiO2MjkyihTSoLM4XWj71aohbmOhIQiHB8td24JS+3tsGqNe+UhtKWjk2BJ0lqIhDvpOmuLjxGPMVGzBaC4a18jMYFxZs1AxXf/veLP5cduxA7KxT5nWnun2QsW/P0AThBGkhTny/a2GdmQ/aKAmYftFwnBUtgJtGuo/GXkd5Up8BienJzbZ16HhKFl23cXAuFIV7EJwu8bClzCJQtMUE+7rhAX9StDris1P9e1ldjalUSFBMzPHkhf3nHAju3E14URH8DrnfA8kNrnYvYwCgeH3mAu+yht/6mzZWkoaF94AkJVCQ8KRxsuUO9tZO/hLONMuG5FCao1dofnNtvc797XYWS4X6pjBMW5BpANrFrk= prometheus@openstreetmap.org

cookbooks/prometheus/recipes/default.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,23 @@
115115
metric_relabel metric_relabel
116116
end
117117

118+
unless node[:prometheus][:junos].empty?
119+
targets = node[:prometheus][:junos].collect { |_, details| details[:address] }.sort.join(",")
120+
121+
prometheus_exporter "junos" do
122+
port 9326
123+
options %W[
124+
--ssh.user=prometheus
125+
--ssh.keyfile=/etc/prometheus/exporters/junos/id_rsa
126+
--ssh.targets=#{targets}
127+
--lacp.enabled=true
128+
--power.enabled=false
129+
]
130+
ssh true
131+
register_target false
132+
end
133+
end
134+
118135
unless node[:prometheus][:snmp].empty?
119136
prometheus_exporter "snmp" do
120137
port 9116

cookbooks/prometheus/recipes/server.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
end
121121

122122
jobs = {}
123+
junos_targets = []
123124
snmp_targets = []
124125

125126
search(:node, "recipes:prometheus\\:\\:default").sort_by(&:name).each do |client|
@@ -162,6 +163,15 @@
162163
}
163164
end
164165

166+
Hash(client[:prometheus][:junos]).each do |instance, details|
167+
junos_targets << {
168+
:instance => instance,
169+
:target => details[:address],
170+
:address => client[:prometheus][:addresses]["junos"],
171+
:labels => Array(details[:labels])
172+
}
173+
end
174+
165175
Hash(client[:prometheus][:snmp]).each do |instance, details|
166176
snmp_targets << {
167177
:instance => instance,
@@ -214,7 +224,7 @@
214224
owner "root"
215225
group "root"
216226
mode "644"
217-
variables :jobs => jobs, :snmp_targets => snmp_targets, :certificates => certificates
227+
variables :jobs => jobs, :junos_targets => junos_targets, :snmp_targets => snmp_targets, :certificates => certificates
218228
end
219229

220230
template "/etc/prometheus/alert_rules.yml" do

cookbooks/prometheus/resources/exporter.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,27 @@
4747
property :scrape_timeout, :kind_of => String
4848
property :metric_relabel, :kind_of => Array
4949
property :register_target, :kind_of => [TrueClass, FalseClass], :default => true
50+
property :ssh, [true, false]
5051

5152
action :create do
53+
if new_resource.ssh && new_resource.user.nil?
54+
keys = data_bag_item("prometheus", "keys")
55+
56+
directory "/var/lib/private/prometheus/#{new_resource.exporter}-exporter" do
57+
mode "700"
58+
recursive true
59+
end
60+
61+
file "/var/lib/private/prometheus/#{new_resource.exporter}-exporter/id_rsa" do
62+
content keys["ssh"].join("\n")
63+
mode "400"
64+
end
65+
66+
cookbook_file "/var/lib/private/prometheus/#{new_resource.exporter}-exporter/id_rsa.pub" do
67+
mode "644"
68+
end
69+
end
70+
5271
systemd_service service_name do
5372
after "network-online.target"
5473
wants "network-online.target"
@@ -60,6 +79,7 @@
6079
environment new_resource.environment
6180
exec_start "#{executable_path} #{new_resource.command} #{executable_options}"
6281
sandbox :enable_network => true
82+
state_directory "prometheus/#{new_resource.exporter}-exporter" if new_resource.ssh && new_resource.user.nil?
6383
protect_proc new_resource.protect_proc if new_resource.property_is_set?(:protect_proc)
6484
proc_subset new_resource.proc_subset if new_resource.property_is_set?(:proc_subset)
6585
capability_bounding_set new_resource.capability_bounding_set if new_resource.property_is_set?(:capability_bounding_set)

cookbooks/prometheus/templates/default/prometheus.yml.erb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,26 @@ scrape_configs:
8585
<% end -%>
8686
<% end -%>
8787
<% end -%>
88+
- job_name: junos
89+
scrape_interval: 5m
90+
scrape_timeout: 4m
91+
static_configs:
92+
<% @junos_targets.sort_by { |t| t[:instance] }.each do |target| -%>
93+
- targets:
94+
- "<%= target[:target] %>/<%= target[:address] %>"
95+
labels:
96+
instance: <%= target[:instance] %>
97+
<% target[:labels].sort.each do |name, value| -%>
98+
<%= name %>: <%= value %>
99+
<% end -%>
100+
<% end -%>
101+
relabel_configs:
102+
- source_labels: [__address__]
103+
regex: "([^/]+)/.*"
104+
target_label: __param_target
105+
- source_labels: [__address__]
106+
regex: "[^/]+/(.*)"
107+
target_label: __address__
88108
- job_name: snmp
89109
scrape_interval: 5m
90110
scrape_timeout: 2m

roles/fafnir.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343
}
4444
},
4545
:prometheus => {
46+
:junos => {
47+
"switch1" => { :address => "184.104.226.97", :labels => { "site" => "dublin" } }
48+
},
4649
:snmp => {
4750
"pdu1" => { :address => "10.0.64.100", :modules => %w[apcups], :labels => { "site" => "dublin" } },
4851
"pdu2" => { :address => "10.0.64.101", :modules => %w[apcups], :labels => { "site" => "dublin" } },

roles/ironbelly.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
}
5353
},
5454
:prometheus => {
55+
:junos => {
56+
"switch1" => { :address => "184.104.179.129", :labels => { "site" => "amsterdam" } }
57+
},
5558
:snmp => {
5659
"pdu1" => { :address => "10.0.48.100", :modules => %w[apcups], :labels => { "site" => "amsterdam" } },
5760
"pdu2" => { :address => "10.0.48.101", :modules => %w[apcups], :labels => { "site" => "amsterdam" } },

0 commit comments

Comments
 (0)