1
0
mirror of https://github.com/cmur2/dyndnsd.git synced 2025-08-08 08:33:56 +02:00

Compare commits

...

6 Commits

Author SHA1 Message Date
cn
d2ac6890aa release: 2.0.0.rc2 2018-04-23 19:21:32 +02:00
cn
a01276c348 monitoring: add textfile reporter to write Graphite-style metrics into file 2018-04-23 09:09:21 +02:00
depfu[bot]
22d686dec7 gems: update rubocop to version 0.55.0
Upgrade rubocop to version 0.55.0 (#8)
2018-04-16 12:31:20 +02:00
cn
fe019515eb gem: update dependencies 2018-04-10 13:59:22 +02:00
cn
3d64c2f2a3 gem: tighten version constraints for 0.x dependencies 2018-04-03 14:43:05 +02:00
cn
472d9aaa98 gem: update dependencies 2018-03-26 20:56:53 +02:00
8 changed files with 141 additions and 10 deletions

View File

@@ -34,6 +34,12 @@ Metrics/MethodLength:
Metrics/PerceivedComplexity:
Enabled: false
Naming/UncommunicativeMethodParamName:
Enabled: false
Naming/MemoizedInstanceVariableName:
Enabled: false
Style/ConditionalAssignment:
Enabled: false
@@ -58,5 +64,8 @@ Style/InverseMethods:
Style/NegatedIf:
Enabled: false
Style/RescueModifier:
Enabled: false
Style/SymbolArray:
Enabled: false

View File

@@ -11,6 +11,7 @@ IMPROVEMENTS:
- Add Ruby 2.5 support
- Add experimental [OpenTracing](http://opentracing.io/) support with [CNCF Jaeger](https://github.com/jaegertracing/jaeger)
- Support host offlining by deleting the associated DNS records
- Add textfile reporter to write Graphite-style metrics (also compatible with [Prometheus](https://prometheus.io/)) into a file
## 1.6.1 (October 31, 2017)

View File

@@ -135,7 +135,7 @@ The [Debian 6 init.d script](init.d/debian-6-dyndnsd) assumes that dyndnsd.rb is
### Monitoring
For monitoring dyndnsd.rb uses the [metriks](https://github.com/eric/metriks) framework and exposes several metrics like the number of unauthenticated requests, requests that did (not) update a hostname, etc. By default the most important metrics are shown in the [proctitle](https://github.com/eric/metriks#proc-title-reporter) but you can also configure a [Graphite](https://graphiteapp.org/) backend for central monitoring.
For monitoring dyndnsd.rb uses the [metriks](https://github.com/eric/metriks) framework and exposes several metrics like the number of unauthenticated requests, requests that did (not) update a hostname, etc. By default the most important metrics are shown in the [proctitle](https://github.com/eric/metriks#proc-title-reporter) but you can also configure a [Graphite](https://graphiteapp.org/) backend for central monitoring or the [textfile_reporter](https://github.com/prometheus/node_exporter/#textfile-collector) which outputs Graphite-style metrics that are also compatible with Prometheus to a file.
```yaml
host: "0.0.0.0"
@@ -147,6 +147,10 @@ graphite:
host: localhost # defaults for host and port of a carbon server
port: 2003
prefix: "my.graphite.metrics.naming.structure.dyndnsd"
# OR configure the textfile reporter instead of Graphite/proctitle
textfile:
file: /path/to/file.prom
prefix: "my.graphite.metrics.naming.structure.dyndnsd"
# configure the updater, here we use command_with_bind_zone, params are updater-specific
updater:
name: "command_with_bind_zone"

View File

@@ -1,5 +1,5 @@
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
$LOAD_PATH.push File.expand_path('lib', __dir__)
require 'dyndnsd/version'
@@ -23,14 +23,14 @@ Gem::Specification.new do |s|
s.add_runtime_dependency 'rack', '~> 2.0'
s.add_runtime_dependency 'json'
s.add_runtime_dependency 'metriks'
s.add_runtime_dependency 'opentracing', '~> 0.3'
s.add_runtime_dependency 'rack-tracer', '~> 0.4'
s.add_runtime_dependency 'spanmanager', '~> 0.3'
s.add_runtime_dependency 'jaeger-client', '~> 0.4'
s.add_runtime_dependency 'opentracing', '~> 0.4.0'
s.add_runtime_dependency 'rack-tracer', '~> 0.5.0'
s.add_runtime_dependency 'spanmanager', '~> 0.3.0'
s.add_runtime_dependency 'jaeger-client', '~> 0.4.0'
s.add_development_dependency 'bundler'
s.add_development_dependency 'rake'
s.add_development_dependency 'rspec'
s.add_development_dependency 'rack-test'
s.add_development_dependency 'rubocop', '~> 0.52.1'
s.add_development_dependency 'rubocop', '~> 0.55.0'
end

View File

@@ -18,6 +18,7 @@ require 'dyndnsd/responder/dyndns_style'
require 'dyndnsd/responder/rest_style'
require 'dyndnsd/database'
require 'dyndnsd/helper'
require 'dyndnsd/textfile_reporter'
require 'dyndnsd/version'
module Dyndnsd
@@ -235,6 +236,12 @@ module Dyndnsd
options[:prefix] = config['graphite']['prefix'] if config['graphite']['prefix']
reporter = Metriks::Reporter::Graphite.new(host, port, options)
reporter.start
elsif config['textfile']
file = config['textfile']['file'] || '/tmp/dyndnsd-metrics.prom'
options = {}
options[:prefix] = config['textfile']['prefix'] if config['textfile']['prefix']
reporter = Dyndnsd::TextfileReporter.new(file, options)
reporter.start
else
reporter = Metriks::Reporter::ProcTitle.new
reporter.add 'good', 'sec' do

View File

@@ -13,9 +13,9 @@ module Dyndnsd
def self.ip_valid?(ip)
IPAddr.new(ip)
return true
true
rescue ArgumentError
return false
false
end
def self.user_allowed?(username, password, users)

View File

@@ -0,0 +1,110 @@
# Adapted from https://github.com/eric/metriks-graphite/blob/master/lib/metriks/reporter/graphite.rb
require 'metriks'
module Dyndnsd
class TextfileReporter
attr_reader :file
def initialize(file, options = {})
@file = file
@prefix = options[:prefix]
@registry = options[:registry] || Metriks::Registry.default
@interval = options[:interval] || 60
@on_error = options[:on_error] || proc { |ex| }
end
def start
@thread ||= Thread.new do
loop do
sleep @interval
Thread.new do
begin
write
rescue StandardError => e
@on_error[e] rescue nil
end
end
end
end
end
def stop
@thread&.kill
@thread = nil
end
def restart
stop
start
end
def write
File.open(@file, 'w') do |f|
@registry.each do |name, metric|
case metric
when Metriks::Meter
write_metric f, name, metric, [
:count, :one_minute_rate, :five_minute_rate,
:fifteen_minute_rate, :mean_rate
]
when Metriks::Counter
write_metric f, name, metric, [
:count
]
when Metriks::UtilizationTimer
write_metric f, name, metric, [
:count, :one_minute_rate, :five_minute_rate,
:fifteen_minute_rate, :mean_rate,
:min, :max, :mean, :stddev,
:one_minute_utilization, :five_minute_utilization,
:fifteen_minute_utilization, :mean_utilization
], [
:median, :get_95th_percentile
]
when Metriks::Timer
write_metric f, name, metric, [
:count, :one_minute_rate, :five_minute_rate,
:fifteen_minute_rate, :mean_rate,
:min, :max, :mean, :stddev
], [
:median, :get_95th_percentile
]
when Metriks::Histogram
write_metric f, name, metric, [
:count, :min, :max, :mean, :stddev
], [
:median, :get_95th_percentile
]
end
end
end
end
def write_metric(file, base_name, metric, keys, snapshot_keys = [])
time = Time.now.to_i
base_name = base_name.to_s.gsub(/ +/, '_')
base_name = "#{@prefix}.#{base_name}" if @prefix
keys.flatten.each do |key|
name = key.to_s.gsub(/^get_/, '')
value = metric.send(key)
file.write("#{base_name}.#{name} #{value} #{time}\n")
end
unless snapshot_keys.empty?
snapshot = metric.snapshot
snapshot_keys.flatten.each do |key|
name = key.to_s.gsub(/^get_/, '')
value = snapshot.send(key)
file.write("#{base_name}.#{name} #{value} #{time}\n")
end
end
end
end
end

View File

@@ -1,4 +1,4 @@
module Dyndnsd
VERSION = '2.0.0.rc1'.freeze
VERSION = '2.0.0.rc2'.freeze
end