An idea for low cost vibration monitoring: use your smartphone.
I did this recently out of curiosity. Found an app that records my phone accelerometer to a text file. Leaving the phone on a table, I could detect the vibration of a diesel generator in the office basement. The generator vibration was only just perceptible by a person, and the phone could just detect it after some post processing in Octave/Python/Matlab.
You could take measurements at a few places and plot them on a map to show the source of the vibration.
The phone records at up to 200 Samples/s, plenty for the vibration you're hunting. And the results are in m.s-2,so even if this isn't a traceable calibrated measurement, it gives you some figures to play with.
Edit: here's the result, from processing my smartphone accelerometer. The Android app is called Accelerometer Monitor, though there may be others. You can see the generator vibration, and the way it vanishes when the generator shuts down:
The code to plot this looks like this, works in Octave (free software), should also work in Matlab.
I did need to remove the headers and footer from the text file.
windowsize = 1000; % samples in a window
A = dlmread('generator.txt',' '); % load the cleaned-up file
B = detrend(A(200000:end-100,1:3),'linear'); % remove DC and drift
sb = size(B,1); % size of B
nw = floor(sb/wind); % number of windows in the file
dt = mean(A(:,4)); % delta-t in ms
freq = linspace(0,500/dt,wind/2-1); % frequency axis for plotting
tim = (1:(nw))*wind*dt/1000; % time axis for plotting
temp = abs(fft(B(((a-1)*wind+1):(a*wind),:))).^2;
F(:,:,a) = (( temp(2:(wind/2),:) + temp((wind):-1:(wind/2+2),:) )/wind);
pcolor(tim,freq,squeeze(10*log10(F(:,3,:)))); shading flat;
cax=caxis; caxis([cax(2)-25 cax(2)]); colormap(hot);
ylabel('Frequency, Hz'); xlabel('time, s');
The code above is made more complicated than it needs to be, because I wanted a spectrogram. For a simple graph of the spectrum, just take the fft of a few seconds worth of data, like this:
A = dlmread('acceleration.txt',' '); % load the data
F = fft(A(1:2000,3); % choose a channel, Z had the most vibration for me
F = abs(F(2:1000))+abs(F(1999:-1:1001)); % add positive and negative frequency
Octave is available for Windows, free.
Edit: I neglected to mention in the code above, that the acceleration data from a smartphone isn't necessarily at even intervals in time. You might get away with it in a short spectrogram, but you really need to resample it before doing the DFT.