Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffreyc-splunk committed Dec 1, 2023
1 parent af4f156 commit 65e2e64
Show file tree
Hide file tree
Showing 12 changed files with 323 additions and 41 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/chef-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
push:
branches:
- main
- chef-node-zc
paths:
- '.github/workflows/chef-test.yml'
- 'deployments/chef/**'
Expand Down Expand Up @@ -94,6 +95,12 @@ jobs:
with:
version: 21.12.720

- name: Install nodejs
if: ${{ contains(matrix.SUITE, 'node') }}
run: |
mkdir -p $HOME/.chef/cookbooks
knife supermarket install nodejs
- run: kitchen test ${{ matrix.SUITE }}-${{ matrix.DISTRO }}

- uses: actions/upload-artifact@v3
Expand Down
3 changes: 3 additions & 0 deletions deployments/chef/attributes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,4 +100,7 @@
default['splunk_otel_collector']['auto_instrumentation_enable_profiler_memory'] = false
default['splunk_otel_collector']['auto_instrumentation_enable_metrics'] = false
default['splunk_otel_collector']['auto_instrumentation_otlp_endpoint'] = 'http://127.0.0.1:4317'
default['splunk_otel_collector']['with_auto_instrumentation_sdks'] = %w(java)
default['splunk_otel_collector']['auto_instrumentation_nodejs_npm_command'] = 'npm install'
default['splunk_otel_collector']['auto_instrumentation_nodejs_npm_prefix'] = '--global'
end
57 changes: 55 additions & 2 deletions deployments/chef/kitchen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ driver:
name: dokken
chef_license: accept
privileged: true
env:
- NODE_PATH=/usr/local/nodejs-binary-14.17.3/lib/node_modules

transport:
name: dokken
Expand Down Expand Up @@ -170,14 +172,15 @@ suites:
splunk_realm: test
with_auto_instrumentation: true

- name: with_custom_preload_instrumentation
- name: with_custom_preload_java_instrumentation
run_list:
- recipe[splunk_otel_collector]
attributes:
splunk_otel_collector:
splunk_access_token: testing123
splunk_realm: test
with_auto_instrumentation: true
with_auto_instrumentation_sdks: ["java"]
auto_instrumentation_ld_so_preload: "# my extra library"
auto_instrumentation_resource_attributes: deployment.environment=test
auto_instrumentation_service_name: test
Expand All @@ -188,6 +191,30 @@ suites:
auto_instrumentation_enable_metrics: true
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317

- name: with_custom_preload_node_instrumentation
run_list:
- recipe[nodejs]
- recipe[splunk_otel_collector]
attributes:
nodejs:
install_method: binary
version: 14.17.3
splunk_otel_collector:
splunk_access_token: testing123
splunk_realm: test
with_auto_instrumentation: true
with_auto_instrumentation_sdks: ["nodejs"]
auto_instrumentation_ld_so_preload: "# my extra library"
auto_instrumentation_resource_attributes: deployment.environment=test
auto_instrumentation_service_name: test
auto_instrumentation_generate_service_name: false
auto_instrumentation_disable_telemetry: true
auto_instrumentation_enable_profiler: true
auto_instrumentation_enable_profiler_memory: true
auto_instrumentation_enable_metrics: true
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317
nodejs_manage_node: true

- name: with_default_systemd_instrumentation
run_list:
- recipe[splunk_otel_collector]
Expand All @@ -198,14 +225,39 @@ suites:
with_auto_instrumentation: true
auto_instrumentation_systemd: true

- name: with_custom_systemd_instrumentation
- name: with_custom_systemd_java_instrumentation
run_list:
- recipe[splunk_otel_collector]
attributes:
splunk_otel_collector:
splunk_access_token: testing123
splunk_realm: test
with_auto_instrumentation: true
with_auto_instrumentation_sdks: ["java"]
auto_instrumentation_ld_so_preload: "# this should not be added"
auto_instrumentation_systemd: true
auto_instrumentation_resource_attributes: deployment.environment=test
auto_instrumentation_service_name: test
auto_instrumentation_generate_service_name: false
auto_instrumentation_disable_telemetry: true
auto_instrumentation_enable_profiler: true
auto_instrumentation_enable_profiler_memory: true
auto_instrumentation_enable_metrics: true
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317

- name: with_custom_systemd_node_instrumentation
run_list:
- recipe[nodejs]
- recipe[splunk_otel_collector]
attributes:
nodejs:
install_method: binary
version: 14.17.3
splunk_otel_collector:
splunk_access_token: testing123
splunk_realm: test
with_auto_instrumentation: true
with_auto_instrumentation_sdks: ["nodejs"]
auto_instrumentation_ld_so_preload: "# this should not be added"
auto_instrumentation_systemd: true
auto_instrumentation_resource_attributes: deployment.environment=test
Expand All @@ -216,3 +268,4 @@ suites:
auto_instrumentation_enable_profiler_memory: true
auto_instrumentation_enable_metrics: true
auto_instrumentation_otlp_endpoint: http://0.0.0.0:4317
nodejs_manage_node: true
123 changes: 84 additions & 39 deletions deployments/chef/recipes/auto_instrumentation.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
# Cookbook:: splunk_otel_collector
# Recipe:: auto_instrumentation

ohai 'reload packages' do
plugin 'packages'
action :nothing
end
with_new_instrumentation = node['splunk_otel_collector']['auto_instrumentation_version'] == 'latest' || Gem::Version.new(node['splunk_otel_collector']['auto_instrumentation_version']) >= Gem::Version.new('0.87.0')
splunk_otel_js_path = '/usr/lib/splunk-instrumentation/splunk-otel-js.tgz'
with_systemd = node['splunk_otel_collector']['auto_instrumentation_systemd'].to_s.downcase == 'true'
with_java = node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('java')
with_nodejs = node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('nodejs')
npm_command = node['splunk_otel_collector']['auto_instrumentation_npm_command']
npm_prefix = node['splunk_otel_collector']['auto_instrumentation_npm_prefix']

package 'splunk-otel-auto-instrumentation' do
action :install
Expand All @@ -16,45 +19,87 @@
&& Gem::Version.new(node['packages']['apt']['version'].split('~')[0]) >= Gem::Version.new('1.1.0')
allow_downgrade true if platform_family?('amazon', 'rhel', 'suse')
notifies :reload, 'ohai[reload packages]', :immediately
notifies :run, 'execute[Install splunk-otel-js]', :immediately
notifies :create, 'template[/etc/ld.so.preload]', :delayed
end

ohai 'reload packages' do
plugin 'packages'
action :nothing
end

execute 'Install splunk-otel-js' do
command "#{npm_command} #{npm_prefix} #{splunk_otel_js_path}"
action :nothing
only_if { with_nodejs && with_new_instrumentation }
end

file '/etc/splunk/zeroconfig/java.conf' do
action :delete
only_if { with_systemd || !with_java }
end

file '/etc/splunk/zeroconfig/node.conf' do
action :delete
only_if { with_systemd || !with_nodejs }
end

file '/usr/lib/splunk-instrumentation/instrumentation.conf' do
action :delete
only_if { with_systemd || with_new_instrumentation }
end

directory '/usr/lib/systemd/system.conf.d' do
recursive true
action :nothing
end

template '/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source '00-splunk-otel-auto-instrumentation.conf.erb'
notifies :create, 'directory[/usr/lib/systemd/system.conf.d]', :before
notifies :run, 'execute[reload systemd]', :delayed
only_if { with_systemd }
end

file '/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf' do
action :delete
notifies :run, 'execute[reload systemd]', :delayed
not_if { with_systemd }
end

template '/etc/splunk/zeroconfig/java.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source 'java.conf.erb'
only_if { with_java && with_new_instrumentation && !with_systemd }
end

template '/etc/splunk/zeroconfig/node.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source 'node.conf.erb'
only_if { with_nodejs && with_new_instrumentation && !with_systemd }
end

template '/usr/lib/splunk-instrumentation/instrumentation.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source 'instrumentation.conf.erb'
only_if { with_java && !with_new_instrumentation && !with_systemd }
end

template '/etc/ld.so.preload' do
source 'ld.so.preload.erb'
action :nothing
end

if node['splunk_otel_collector']['auto_instrumentation_systemd'].to_s.downcase == 'true'
execute 'reload systemd' do
command 'systemctl daemon-reload'
action :nothing
end
directory '/usr/lib/systemd/system.conf.d' do
recursive true
action :create
end
template '/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source '00-splunk-otel-auto-instrumentation.conf.erb'
notifies :run, 'execute[reload systemd]', :immediately
end
else
file '/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf' do
action :delete
end
if node['splunk_otel_collector']['auto_instrumentation_version'] == 'latest' || Gem::Version.new(node['splunk_otel_collector']['auto_instrumentation_version']) >= Gem::Version.new('0.87.0')
template '/etc/splunk/zeroconfig/java.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source 'java.conf.erb'
end
else
template '/usr/lib/splunk-instrumentation/instrumentation.conf' do
variables(
installed_version: lazy { node['packages']['splunk-otel-auto-instrumentation']['version'] }
)
source 'instrumentation.conf.erb'
end
end
execute 'reload systemd' do
command 'systemctl daemon-reload'
action :nothing
end
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
[Manager]
<% if node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('java') -%>
DefaultEnvironment="JAVA_TOOL_OPTIONS=-javaagent:<%= node['splunk_otel_collector']['auto_instrumentation_java_agent_jar'] %>"
<% end -%>
<% if node['splunk_otel_collector']['with_auto_instrumentation_sdks'].include?('nodejs') -%>
DefaultEnvironment="NODE_OPTIONS=-r @splunk/otel/instrument"
<% end -%>
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_resource_attributes']) && node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] != "" -%>
DefaultEnvironment="OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>-systemd,<%= node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] %>"
<% else -%>
Expand Down
13 changes: 13 additions & 0 deletions deployments/chef/templates/node.conf.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
NODE_OPTIONS=-r @splunk/otel/instrument
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_resource_attributes']) && node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] != "" -%>
OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>,<%= node['splunk_otel_collector']['auto_instrumentation_resource_attributes'] %>
<% else -%>
OTEL_RESOURCE_ATTRIBUTES=splunk.zc.method=splunk-otel-auto-instrumentation-<%= @installed_version %>
<% end -%>
<% if defined?(node['splunk_otel_collector']['auto_instrumentation_service_name']) && node['splunk_otel_collector']['auto_instrumentation_service_name'] != "" -%>
OTEL_SERVICE_NAME=<%= node['splunk_otel_collector']['auto_instrumentation_service_name'] %>
<% end -%>
SPLUNK_PROFILER_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_profiler'].to_s.downcase %>
SPLUNK_PROFILER_MEMORY_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_profiler_memory'].to_s.downcase %>
SPLUNK_METRICS_ENABLED=<%= node['splunk_otel_collector']['auto_instrumentation_enable_metrics'].to_s.downcase %>
OTEL_EXPORTER_OTLP_ENDPOINT=<%= node['splunk_otel_collector']['auto_instrumentation_otlp_endpoint'] %>
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
it { should be_installed }
end

describe npm('@splunk/otel') do
it { should_not be_installed }
end

describe file('/etc/ld.so.preload') do
its('content') { should match /^#{libsplunk_path}$/ }
its('content') { should match /^#{ld_preload_line}$/ }
Expand All @@ -17,6 +21,14 @@
it { should_not exist }
end

describe file('/etc/splunk/zeroconfig/node.conf') do
it { should_not exist }
end

describe file('/usr/lib/splunk-instrumentation/instrumentation.conf') do
it { should_not exist }
end

describe file('/etc/splunk/zeroconfig/java.conf') do
its('content') { should match /^JAVA_TOOL_OPTIONS=#{java_tool_options}$/ }
its('content') { should match /^OTEL_RESOURCE_ATTRIBUTES=#{resource_attributes}$/ }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
libsplunk_path = '/usr/lib/splunk-instrumentation/libsplunk.so'
node_options = '-r @splunk/otel/instrument'
otlp_endpoint = 'http://0.0.0.0:4317'
ld_preload_line = '# my extra library'

describe package('splunk-otel-auto-instrumentation') do
it { should be_installed }
end

describe npm('@splunk/otel') do
it { should be_installed }
end

describe file('/etc/ld.so.preload') do
its('content') { should match /^#{libsplunk_path}$/ }
its('content') { should match /^#{ld_preload_line}$/ }
end

describe file('/usr/lib/systemd/system.conf.d/00-splunk-otel-auto-instrumentation.conf') do
it { should_not exist }
end

describe file('/etc/splunk/zeroconfig/java.conf') do
it { should_not exist }
end

describe file('/usr/lib/splunk-instrumentation/instrumentation.conf') do
it { should_not exist }
end

describe file('/etc/splunk/zeroconfig/node.conf') do
its('content') { should match /^NODE_OPTIONS=#{node_options}$/ }
its('content') { should match /^OTEL_RESOURCE_ATTRIBUTES=#{resource_attributes}$/ }
its('content') { should match /^OTEL_SERVICE_NAME=test$/ }
its('content') { should match /^SPLUNK_PROFILER_ENABLED=true$/ }
its('content') { should match /^SPLUNK_PROFILER_MEMORY_ENABLED=true$/ }
its('content') { should match /^SPLUNK_METRICS_ENABLED=true$/ }
its('content') { should match /^OTEL_EXPORTER_OTLP_ENDPOINT=#{otlp_endpoint}$/ }
end

describe service('splunk-otel-collector') do
it { should be_enabled }
it { should be_running }
end

describe service('td-agent') do
it { should_not be_enabled }
it { should_not be_running }
end
Loading

0 comments on commit 65e2e64

Please sign in to comment.