From 4e47ebfa6fb661fb1ae646ba6a146eb2392bfe7d Mon Sep 17 00:00:00 2001 From: Kazuhiro MUSASHI Date: Sun, 27 Sep 2020 14:05:44 +0900 Subject: [PATCH] Deploy `filestat_exporter`. --- cookbooks/prometheus/attributes.rb | 7 +++ cookbooks/prometheus/default.rb | 4 ++ .../consul.d/service-filestat_exporter.json | 6 +++ .../etc/prometheus_exporters.d/filestat.yml | 16 ++++++ .../supervisor/conf.d/filestat_exporter.conf | 8 +++ .../prometheus/filestat_exporter_install.rb | 53 +++++++++++++++++++ .../prometheus/filestat_exporter_setup.rb | 31 +++++++++++ 7 files changed, 125 insertions(+) create mode 100644 cookbooks/prometheus/files/etc/consul.d/service-filestat_exporter.json create mode 100644 cookbooks/prometheus/files/etc/prometheus_exporters.d/filestat.yml create mode 100644 cookbooks/prometheus/files/etc/supervisor/conf.d/filestat_exporter.conf create mode 100644 cookbooks/prometheus/filestat_exporter_install.rb create mode 100644 cookbooks/prometheus/filestat_exporter_setup.rb diff --git a/cookbooks/prometheus/attributes.rb b/cookbooks/prometheus/attributes.rb index 21c31b7..221f13f 100644 --- a/cookbooks/prometheus/attributes.rb +++ b/cookbooks/prometheus/attributes.rb @@ -38,4 +38,11 @@ node.reverse_merge!({ 'storage' => '/opt/prometheus/', 'location' => '/usr/local/bin/' }, + 'filestat_exporter' => { + 'url' => 'https://github.com/michael-doubez/filestat_exporter/releases/download/', + 'prefix' => 'filestat_exporter-', + 'postfix' => '.linux-amd64.tar.gz', + 'storage' => '/opt/filestat_exporter/', + 'location' => '/usr/local/bin/' + }, }) diff --git a/cookbooks/prometheus/default.rb b/cookbooks/prometheus/default.rb index 1859b1f..a42c10e 100644 --- a/cookbooks/prometheus/default.rb +++ b/cookbooks/prometheus/default.rb @@ -51,4 +51,8 @@ end include_recipe './node_exporter_install.rb' include_recipe './node_exporter_setup.rb' +# Install the filestat_exporter here: +include_recipe './filestat_exporter_install.rb' +include_recipe './filestat_exporter_setup.rb' + include_recipe './exporter_proxy.rb' diff --git a/cookbooks/prometheus/files/etc/consul.d/service-filestat_exporter.json b/cookbooks/prometheus/files/etc/consul.d/service-filestat_exporter.json new file mode 100644 index 0000000..5cccb80 --- /dev/null +++ b/cookbooks/prometheus/files/etc/consul.d/service-filestat_exporter.json @@ -0,0 +1,6 @@ +{ + "service": { + "name": "filestat_exporter", + "port": 60000 + } +} diff --git a/cookbooks/prometheus/files/etc/prometheus_exporters.d/filestat.yml b/cookbooks/prometheus/files/etc/prometheus_exporters.d/filestat.yml new file mode 100644 index 0000000..2b11ade --- /dev/null +++ b/cookbooks/prometheus/files/etc/prometheus_exporters.d/filestat.yml @@ -0,0 +1,16 @@ +exporter: + # Optional network parameters + listen_address: ':9943' + metrics_path: /metrics + + # Optional working directory - overridden by parameter '-path.cwd' + # working_directory: "/path/to/my/project" + + # Default enable/disable of metrics - overridden if not set by parameter '-metric.*' + enable_crc32_metric: true + enable_nb_line_metric: false + # list of patterns to apply - metrics can be enable/disabled for each group + files: + - patterns: ["/var/run/reboot-required"] + enable_crc32_metric: false + enable_nb_line_metric: false diff --git a/cookbooks/prometheus/files/etc/supervisor/conf.d/filestat_exporter.conf b/cookbooks/prometheus/files/etc/supervisor/conf.d/filestat_exporter.conf new file mode 100644 index 0000000..c61c76c --- /dev/null +++ b/cookbooks/prometheus/files/etc/supervisor/conf.d/filestat_exporter.conf @@ -0,0 +1,8 @@ +[program:filestat_exporter] +command=/usr/local/bin/filestat_exporter --config.file=/etc/prometheus_exporters.d/filestat.yml +stdout_logfile=/var/log/supervisor/filestat_exporter.log +redirect_stderr=true +stdout_logfile_maxbytes=1MB +stdout_logfile_backups=5 +autorestart=true +stopsignal=HUP diff --git a/cookbooks/prometheus/filestat_exporter_install.rb b/cookbooks/prometheus/filestat_exporter_install.rb new file mode 100644 index 0000000..a1fa6db --- /dev/null +++ b/cookbooks/prometheus/filestat_exporter_install.rb @@ -0,0 +1,53 @@ +filestat_exporter_url = '' +filestat_exporter_bin = '' + +vtag = '' + +# Calculate the Download URL: +begin + require 'net/http' + + uri = URI.parse('https://github.com/michael-doubez/filestat_exporter/releases/latest') + + Timeout.timeout(3) do + response = Net::HTTP.get_response(uri) + + vtag = $1 if response.body =~ %r{tag\/(v\d+\.\d+\.\d+)} + + filestat_exporter_bin = "#{node['filestat_exporter']['prefix']}#{vtag}#{node['filestat_exporter']['postfix']}" + filestat_exporter_url = "#{node['filestat_exporter']['url']}/#{vtag}/#{filestat_exporter_bin}" + end +rescue + # Abort the chef client process: + raise 'Cannot connect to http://github.com.' +end + +# バージョン確認して、アップデート必要かどうか確認 +result = run_command("filestat_exporter --version 2>&1 | grep #{vtag}", error: false) +if result.exit_status != 0 + # Download: + TMP = "/tmp/#{filestat_exporter_bin}" + + execute "wget #{filestat_exporter_url} -O #{TMP}" + + # Install: + directory node['filestat_exporter']['storage'] do + owner 'root' + group 'root' + mode '755' + end + + execute "tar zxf #{TMP} -C #{node['filestat_exporter']['storage']} --strip-components 1" + + # Change Owner and Permissions: + file "#{node['filestat_exporter']['storage']}filestat_exporter" do + owner 'root' + group 'root' + mode '755' + end + + # Create Link + link "#{node['filestat_exporter']['location']}filestat_exporter" do + to "#{node['filestat_exporter']['storage']}filestat_exporter" + end +end diff --git a/cookbooks/prometheus/filestat_exporter_setup.rb b/cookbooks/prometheus/filestat_exporter_setup.rb new file mode 100644 index 0000000..693bfe2 --- /dev/null +++ b/cookbooks/prometheus/filestat_exporter_setup.rb @@ -0,0 +1,31 @@ +# Deploy the `supervisord` configuration: +remote_file '/etc/prometheus_exporters.d/filestat.yml' do + owner 'root' + group 'root' + mode '644' + + notifies :restart, 'service[supervisor]' +end + +# Deploy the `supervisord` configuration: +remote_file '/etc/supervisor/conf.d/filestat_exporter.conf' do + owner 'root' + group 'root' + mode '644' + + notifies :restart, 'service[supervisor]' +end + +# Deploy `consul` config for `node_exporter`: +remote_file '/etc/consul.d/service-filestat_exporter.json' do + owner 'root' + group 'root' + mode '644' + + notifies :restart, 'service[supervisor]' +end + +service 'supervisor' do + action :nothing +end +