From: Tom Hughes Date: Mon, 2 Nov 2020 12:08:14 +0000 (+0000) Subject: Configure phpfpm exporter for main wiki X-Git-Url: https://git.openstreetmap.org/chef.git/commitdiff_plain/08cf52e21395d633afe7de03f255aaa0941bac1d Configure phpfpm exporter for main wiki --- diff --git a/cookbooks/mediawiki/resources/site.rb b/cookbooks/mediawiki/resources/site.rb index 60034adf9..90527e740 100644 --- a/cookbooks/mediawiki/resources/site.rb +++ b/cookbooks/mediawiki/resources/site.rb @@ -45,6 +45,7 @@ property :recaptcha_private_key, :kind_of => String property :extra_file_extensions, :kind_of => [String, Array], :default => [] property :fpm_max_children, :kind_of => Integer, :default => 5 property :fpm_request_terminate_timeout, :kind_of => Integer, :default => 300 +property :fpm_prometheus_port, :kind_of => Integer property :reload_apache, :kind_of => [TrueClass, FalseClass], :default => true action :create do @@ -527,6 +528,7 @@ action :create do "max_execution_time" => "240", "upload_max_filesize" => "70M", "post_max_size" => "100M" + prometheus_port new_resource.fpm_prometheus_port end apache_site new_resource.site do diff --git a/cookbooks/php/metadata.rb b/cookbooks/php/metadata.rb index cd084e851..db4cfc27a 100644 --- a/cookbooks/php/metadata.rb +++ b/cookbooks/php/metadata.rb @@ -7,3 +7,4 @@ description "Installs and configures PHP" version "1.0.0" supports "ubuntu" depends "apache" +depends "prometheus" diff --git a/cookbooks/php/recipes/fpm.rb b/cookbooks/php/recipes/fpm.rb index ecda9640c..4fbbc881a 100644 --- a/cookbooks/php/recipes/fpm.rb +++ b/cookbooks/php/recipes/fpm.rb @@ -18,6 +18,7 @@ # include_recipe "php" +include_recipe "prometheus" package "php-fpm" @@ -32,3 +33,4 @@ end service "php#{node[:php][:version]}-fpm" do action [:enable, :start] end + diff --git a/cookbooks/php/resources/fpm.rb b/cookbooks/php/resources/fpm.rb index d70efe53c..c461cf679 100644 --- a/cookbooks/php/resources/fpm.rb +++ b/cookbooks/php/resources/fpm.rb @@ -36,6 +36,7 @@ property :php_admin_values, :kind_of => Hash, :default => {} property :php_flags, :kind_of => Hash, :default => {} property :php_admin_flags, :kind_of => Hash, :default => {} property :reload_fpm, :kind_of => [TrueClass, FalseClass], :default => true +property :prometheus_port, :kind_of => Integer action :create do template conf_file do @@ -46,12 +47,31 @@ action :create do mode "644" variables new_resource.to_hash end + + if new_resource.prometheus_port + prometheus_exporter "phpfpm" do + port new_resource.prometheus_port + service service_name + command "server" + options "--phpfpm.scrape-uri=#{scrape_uri}" + end + else + prometheus_exporter "phpfpm" do + action :delete + service service_name + end + end end action :delete do file conf_file do action :delete end + + prometheus_exporter "phpfpm" do + action :delete + service service_name + end end action_class do @@ -62,6 +82,18 @@ action_class do def conf_file "/etc/php/#{php_version}/fpm/pool.d/#{new_resource.pool}.conf" end + + def service_name + "phpfpm-#{new_resource.pool}" + end + + def scrape_uri + if new_resource.port + "tcp://127.0.0.1:#{new_resource.port}/status" + else + "unix:///run/php/#{new_resource.pool}.sock;/status" + end + end end def after_created diff --git a/cookbooks/php/templates/default/pool.conf.erb b/cookbooks/php/templates/default/pool.conf.erb index ad6894c9a..1877b7bef 100644 --- a/cookbooks/php/templates/default/pool.conf.erb +++ b/cookbooks/php/templates/default/pool.conf.erb @@ -19,6 +19,7 @@ pm.start_servers = <%= @pm_start_servers %> pm.min_spare_servers = <%= @pm_min_spare_servers %> pm.max_spare_servers = <%= @pm_max_spare_servers %> pm.max_requests = <%= @pm_max_requests %> +pm.status_path = /status request_terminate_timeout = <%= @request_terminate_timeout %> diff --git a/cookbooks/prometheus/resources/exporter.rb b/cookbooks/prometheus/resources/exporter.rb index 82c2957c0..826c1c1f7 100644 --- a/cookbooks/prometheus/resources/exporter.rb +++ b/cookbooks/prometheus/resources/exporter.rb @@ -24,8 +24,10 @@ property :port, :kind_of => Integer, :required => [:create] property :listen_switch, :kind_of => String, :default => "web.listen-address" property :listen_type, :kind_of => String, :default => "address" property :user, :kind_of => String, :default => "root" +property :command, :kind_of => String property :options, :kind_of => [String, Array] property :environment, :kind_of => Hash, :default => {} +property :service, :kind_of => String action :create do systemd_service service_name do @@ -33,7 +35,7 @@ action :create do type "simple" user new_resource.user environment new_resource.environment - exec_start "#{executable_path} #{executable_options}" + exec_start "#{executable_path} #{new_resource.command} #{executable_options}" private_tmp true protect_system "strict" protect_home true @@ -75,7 +77,11 @@ end action_class do def service_name - "prometheus-#{new_resource.exporter}-exporter" + if new_resource.service + "prometheus-#{new_resource.service}-exporter" + else + "prometheus-#{new_resource.exporter}-exporter" + end end def executable_path diff --git a/cookbooks/wiki/recipes/default.rb b/cookbooks/wiki/recipes/default.rb index 064f686cf..e75763af1 100644 --- a/cookbooks/wiki/recipes/default.rb +++ b/cookbooks/wiki/recipes/default.rb @@ -34,6 +34,7 @@ mediawiki_site "wiki.openstreetmap.org" do directory "/srv/wiki.openstreetmap.org" fpm_max_children 25 + fpm_prometheus_port 9253 database_name "wiki" database_user "wiki-user"